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

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

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

您可以使用 AWS CLI 將 CloudFormation 範本參考的本機成品上傳至 Amazon S3 儲存貯體。本機成品是您在範本中參考的檔案。您可以指定範本中的本機成品,並使用 package命令快速上傳檔案,而不是手動上傳檔案到 S3 儲存貯體,然後將其位置新增至範本。

本機成品是 package 命令上傳至 Amazon S3 的檔案或資料夾的路徑。例如,成品可以是 AWS Lambda 函數原始碼的本機路徑或 Amazon API Gateway REST API 的 OpenAPI 檔案。

使用 package命令時:

  • 如果您指定檔案,命令會將它直接上傳至 S3 儲存貯體。

  • 如果您指定資料夾,命令會建立資料夾.zip的檔案,然後上傳.zip檔案。

  • 如果您未指定路徑,命令會為工作目錄建立.zip檔案並上傳。

您可以指定絕對或相對路徑,相對路徑相對於範本的位置。

上傳成品之後,命令會傳回範本的副本,以命令上傳成品的 S3 位置取代本機成品的參考。然後,您可以使用傳回的範本來建立或更新堆疊。

注意

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

先決條件

開始之前,您必須擁有現有的 Amazon S3 儲存貯體。

使用本機成品封裝和部署範本

以下範本指定用於 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的檔案,並將其上傳至指定儲存貯體的根目錄。

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 位置,如下所示。.zip 檔案會使用資料夾內容的 MD5 檢查總和來命名,而不是使用資料夾名稱本身。

產生範本

{ "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" } } } }

在您封裝範本的成品之後,請使用 deploy命令部署已處理的範本。

aws cloudformation deploy \ --template-file packaged-template.json \ --stack-name stack-name

部署大於 51,200 個位元組的範本時,請使用 deploy命令搭配 --s3-bucket選項,將範本上傳至 S3,如下列範例所示。

aws cloudformation deploy \ --template-file packaged-template.json \ --stack-name stack-name \ --s3-bucket amzn-s3-demo-bucket
注意

如需使用 package命令上傳本機成品的另一個範例,請參閱 使用巢狀堆疊將範本分割成可重複使用的部分