bash - 创建 bash 脚本文件以创建 S3 存储桶
问题描述
我编写了这些命令来创建 s3 存储桶:
bucketname=test1234
AWS_ACCESS_KEY_ID=*** AWS_SECRET_ACCESS_KEY=*** REGION=us-east-1 aws s3 mb "s3://$bucketname"
这成功创建了一个存储桶。但是当我将它复制到文件中时,将存储桶名称作为参数传递并运行脚本文件时出现错误:
Script in the file:
bucketname=$1
AWS_ACCESS_KEY_ID=*** AWS_SECRET_ACCESS_KEY=*** REGION=us-east-1 aws s3 mb "s3://$bucketname"
Bash 文件:createbucket.txt
使用的命令:./createbucket.txt buckettest1234
Error:
Parameter validation failed:ettest1234
": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"
它甚至出于某种原因取出了前 4 个字母。
解决方案
您收到的错误消息表明存储桶名称在进入aws
命令之前发生了一些事情。你期待buckettest1234
,但你得到类似的东西ettest1234
。
为了更容易理解为什么会发生这种情况,请尝试将您的秘密用单引号括起来,将变量引用用双引号括起来,并在自己的行上初始化变量,并打印中间值,如下所示:
创建bucket.sh:
#! /usr/bin/env bash
AWS_ACCESS_KEY_ID='***'
AWS_SECRET_ACCESS_KEY='***'
REGION='us-east-1'
aws s3 mb "s3://$1"
aws s3 cp "s3://frombucket/testfile.txt" "s3://$1/testfile.txt"
推荐阅读
- networking - 无法在 HoloLens 服务器上接收 HTTP 消息
- spring - 配置属性和配置文件中的元素列表
- html - 从类型为“日期”的输入元素中删除选定的日期
- excel - VBA 拒绝启动
- ios - iOS 上的 Firebase Analytics 事件 - 测试和生产
- openedge - 如何使用连接表定义 prodataset
- c# - 逻辑文件“测试”不是数据库“测试”的一部分。使用 RESTORE FILELISTONLY 列出逻辑文件名
- matplotlib - 标签 alignmnet 饼图/matplotlib 2.1.0+
- javascript - 如何使用节点 js 在 sql db 上插入记录?
- jquery - 使用 AJAX 删除 rails 项目