AWS CloudFormation
用户指南 (API 版本 2010-05-15)

将本地项目上传到 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 文件,然后上传该 .zip 文件。您可指定绝对路径或相对路径,其中相对路径相对于模板的位置。

您只能对 package 命令支持的资源属性使用本地项目。有关此命令的更多信息和支持的资源属性的列表,请参阅AWS CLI Command Reference中的 aws cloudformation 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: nodejs8.10 CodeUri: /home/user/code/lambdafunction

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

包命令

aws cloudformation package --template /path_to_template/template.json --s3-bucket mybucket --output json > packaged-template.json

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

结果模板

AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: s3://mybucket/lambdafunction.zip