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

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

上傳本機成品到 S3 儲存貯體

對於某些需要 Amazon S3 位置 (儲存貯體名稱和檔案名稱) 的資源屬性,您可以改為指定本機參考。例如,您可以指定 AWS Lambda 函數原始程式碼的 S3 位置或 Amazon API Gateway REST API 的 OpenAPI (以前稱為 Swagger) 檔案。您不需要手動上傳檔案到 S3 儲存貯體,然後將位置新增到您的範本,您可以在您的範本中指定本機參考 (稱為本機成品),然後使用 package 命令來快速上傳。本機成品是 package 命令上傳至 Amazon S3 的檔案或資料夾的路徑。例如,成品可以是 AWS Lambda 函數原始程式碼的本機路徑,也可以是 Amazon API Gateway REST API 的 OpenAPI 檔案。

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

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

您只能在 package 命令支援的資源屬性中使用本機成品。如需有關此命令和受支援資源屬性清單的詳細資訊,請參閱 AWS CLI 命令參考中的 aws cloudformation 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"
      }
    }
  }
}

以下命令會建立一個 .zip 檔案,其中包含該函數的原始程式碼資料夾,然後將 .zip 檔案上傳至 my-bucket 儲存貯體的根資料夾。

套件命令

aws cloudformation package \ --template /path_to_template/template.json \ --s3-bucket mybucket \ --output-template-file packaged-template.json \ --use-json

此命令會儲存範本,它會產生至 --output 選項指定的路徑。此命令會以 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://mybucket/<md5 checksum>"
      }
    }
  }
}