我编写了以下命令来创建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个字母。
答案 0 :(得分:1)
您收到的错误消息表示在将桶名称用于aws
命令之前,桶名称正在发生某些变化。您期望得到buckettest1234
,但得到的像是ettest1234
。
要更容易了解这种情况的发生原因,请尝试将秘密用单引号引起来,将变量引用用双引号引起来,并在自己的行上初始化变量,然后打印中间值,如下所示:
createbucket.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"