我正在创建一个CI/CD管道,其中我使用cloudformation包来打包部署。现在,我希望cloudformation将工件上传到具有当前日期时间戳的动态创建的文件夹中。我能做到吗?我的解决方案如下,但行不通。
build.sh
other commands
timestamp=$(date +%s)
aws cloudformation package --template-file template.yaml --output-template-file packaged-template.yaml --s3-bucket bucket name --s3-prefix cfn-deployment/$timestamp
现在我想在deploy.sh
shell脚本中使用这个timestamp
变量,其中cloudformation部署命令我使用
没有"文件夹"的概念;或Amazon S3中的目录。它是对象存储。"paths"实际上只是对象名称。路径的名称中有正斜杠,Amazon S3 Console将以一种特殊的方式处理它,使其看起来像目录。在现实中,你没有。
你想做的事情没有意义,而且是不可能的。当您需要将工件上传到S3时,只需指定路径就可以了,不需要通过CloudFormation做任何事情。
例子创建空桶
aws s3api create-bucket --bucket $MY_BUCKET --region us-east-1
上传包含今天日期的密钥文件:
echo 'hello' > myfile
aws s3 cp myfile s3://$MY_BUCKET/$(date -u +"%Y-%m-%d")/myfile
upload: ./myfile to s3://REDACTED/2023-01-09/myfile
通过s3 ls
列出对象(使其看起来像您的linux列表):
aws s3 ls s3://$MY_BUCKET
PRE 2023-01-09/
通过API (s3api list-objects-v2
)列出对象:
aws s3api list-objects-v2 --bucket $MY_BUCKET
{
"Contents": [
{
"Key": "2023-01-09/myfile",
"LastModified": "2023-01-09T10:43:20.000Z",
"ETag": ""b1946ac92492d2347c6235b4d2611184"",
"Size": 6,
"StorageClass": "STANDARD"
}
]
}