使用 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-filepackaged-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>
"
}
}
}
}