shell 如何在s3中动态创建cloudformation包的文件夹

92dk7w1h  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(120)

我正在创建一个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部署命令

vltsax25

vltsax251#

Amazon S3中没有"文件夹"或目录的概念。它是一个对象存储。"路径"实际上只是对象名称。路径名称中有正斜杠,Amazon S3控制台将以特殊方式处理,使其看起来像是有目录。实际上,没有。
你想做的事情是没有意义的,也是不可能的。无论何时你需要上传你的工件到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"
        }
    ]
}

相关问题