將本機成品上傳至 S3 儲存貯體,並使用 AWS CLI - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將本機成品上傳至 S3 儲存貯體,並使用 AWS CLI

對於某些需要 Amazon S3 位置 (儲存貯體名稱和檔案名稱) 的資源屬性,您可以改為指定本機參考。例如,您可以指定 AWS Lambda 函數的源代碼或 Amazon API 網關RESTAPI的開放API(以前 Swagger)文件。您可以在範本中指定本機參考 (稱為本機成品),而不是手動將檔案上傳到 S3 儲存貯體,然後再將位置新增至範本 packageCLI命令快速上傳它們。本機成品是 package 命令上傳至 Amazon S3 的檔案或資料夾的路徑。例如,成品可以是您的本機路徑 AWS Lambda 函數的源代碼或 Amazon API 網關RESTAPI的打開API文件。

如果您指定檔案,命令會將它直接上傳至 S3 儲存貯體。上傳成品之後,命令會傳回範本的副本,以命令上傳成品的 S3 位置取代本機成品的參考。然後,您可以使用傳回的範本來建立或更新堆疊。

如果您指定資料夾,命令會建立資料夾的.zip檔案,然後上傳.zip檔案。如果您沒有指定路徑,該命令會為工作目錄建立一個.zip檔案,並將其上傳。您可以指定絕對或相對路徑,相對路徑相對於範本的位置。

您只能在 package 命令支援的資源屬性中使用本機成品。如需有關此命令的詳細資訊以及支援的資源屬性清單,請參閱 package中的文件 AWS CLI 指令參考

以下範本指定用於 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>" } } } }