使用 AWS CLI 将本地构件上传到 S3 存储桶 - AWS CloudFormation

使用 AWS CLI 将本地构件上传到 S3 存储桶

对于需要 Amazon S3 位置(桶名称和文件名)的部分资源属性,您可改为指定本地引用。例如,您可指定 AWS Lambda 函数的源代码或 Amazon API Gateway REST API 的 OpenAPI(之前称为 Swagger)文件的 S3 位置。您可以在模板中指定称为“本地构件”的本地引用,然后使用 package 命令快速上传它们,而不是将文件手动上传到 S3 存储桶,然后向模板添加位置。本地项目是 package 命令将向 Amazon S3 上传的文件或文件夹的路径。例如,构件可以是 AWS Lambda 函数的源代码或 Amazon API Gateway REST API 的 OpenAPI 文件的本地路径。

如果您指定一个文件,此命令会将该文件直接上传到 S3 存储桶。在上传项目之后,此命令将返回模板的副本,并将对本地项目的引用替换为命令已将项目上传到的 S3 位置。然后,您可使用返回的模板创建或更新堆栈。

如果您指定一个文件夹,则命令将为该文件夹创建一个 .zip 文件,然后上传该 .zip 文件。如果您未指定路径,则命令将为工作目录创建一个 .zip 文件,然后上传该文件。您可指定绝对路径或相对路径,其中相对路径相对于模板的位置。

您只能对 package 命令支持的资源属性使用本地项目。有关此命令的更多信息和支持的资源属性的列表,请参阅 AWS CLI 命令参考中的 package 文档。

以下模板指定 Lambda 函数的源代码的本地项目。此源代码存储在用户的 /home/user/code/lambdafunction 文件夹中。

原始模板

{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Resources": { "MyFunction": { "Type": "AWS::Serverless::Function", "Properties": { "Handler": "index.handler", "Runtime": "nodejs18.x", "CodeUri": "/home/user/code/lambdafunction" } } } }

以下 package 命令创建一个包含函数源代码文件夹的 .zip 文件,然后将 .zip 文件上传到 amzn-s3-demo-bucket 存储桶的根文件夹。

package 命令

aws cloudformation package --s3-bucket amzn-s3-demo-bucket \ --template /path_to_template/template.json \ --output-template-file packaged-template.json \ --output json

此命令将它生成的模板保存到由 --output-template-file 选项指定的路径。此命令将构件替换为 Amazon S3 位置,如以下示例中所示:

结果模板

{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Resources": { "MyFunction": { "Type": "AWS::Serverless::Function", "Properties": { "Handler": "index.handler", "Runtime": "nodejs18.x", "CodeUri": "s3://amzn-s3-demo-bucket/<md5 checksum>" } } } }