透過 AWS CLI 上傳本機成品到 S3 儲存貯體 - AWS CloudFormation

透過 AWS CLI 上傳本機成品到 S3 儲存貯體

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

本機成品是 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 位元組的範本時,請搭配 --s3-bucket 選項使用 deploy 命令將範本上傳至 S3,如下列範例所示。

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

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