使用 Amazon CLI 将本地构件上传到 S3 存储桶 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

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

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

您只能对 package 命令支持的资源属性使用本地项目。有关此命令的更多信息和支持的资源属性的列表,请参阅 Amazon 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>" } } } }