AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

将本地项目上传到 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 Command Line Interface 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: nodejs4.3 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: nodejs4.3 CodeUri: s3://mybucket/lambdafunction.zip