将本地构件上传到 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 文件,然后上传该 .zip 文件。您可指定绝对路径或相对路径,其中相对路径相对于模板的位置。
您只能对 package
命令支持的资源属性使用本地项目。有关此命令的更多信息和支持的资源属性的列表,请参阅《Amazon CLI 命令参考》中的 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": "nodejs18.x", "CodeUri": "/home/user/code/lambdafunction" } } } }
以下命令创建包含函数的源代码文件夹的 .zip 文件,然后将 .zip 文件上传到 my-bucket
存储桶的根文件夹。
包命令
aws cloudformation package \ --template /path_to_template/template.json \ --s3-bucket mybucket \ --output-template-file packaged-template.json \ --use-json
此命令将它生成的模板保存到由 --output
选项指定的路径。此命令将构件替换为 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://mybucket/<md5 checksum>
"
}
}
}
}