本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 將本機成品上傳至 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-filepackaged-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-namestack-name
部署大於 51,200 個位元組的範本時,請使用 deploy命令搭配 --s3-bucket
選項,將範本上傳至 S3,如下列範例所示。
aws cloudformation deploy \ --template-file
packaged-template.json
\ --stack-namestack-name
\ --s3-bucketamzn-s3-demo-bucket
注意
如需使用 package命令上傳本機成品的另一個範例,請參閱 使用巢狀堆疊將範本分割成可重複使用的部分。