開始使用Terraform支援 AWS SAMCLI - AWS Serverless Application Model

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

開始使用Terraform支援 AWS SAMCLI

本主題介紹如何開始使用指 AWS Serverless Application Model 令行介面 (AWS SAMCLI) 與Terraform。

若要提供意見反應並提交功能要求,請建立GitHub問題

AWS SAMCLITerraform前提

完成所有先決條件,即可開始 AWS SAMCLI與您的Terraform專案搭配使用。

  1. 安裝或升級 AWS SAMCLI

    要檢查是否已 AWS SAMCLI安裝,請運行以下命令:

    $ sam --version

    如果 AWS SAMCLI已安裝,輸出將顯示版本。若要升級至最新版本,請參閱升級 AWS SAMCLI

    如需有關安裝 AWS SAMCLI及其所有先決條件的指示,請參閱安裝 AWS SAMCLI

  2. 安裝 Terraform

    要檢查是否已Terraform安裝,請運行以下命令:

    $ terraform -version

    若要安裝Terraform,請參閱Terraform在Terraform登錄裝。

  3. 安裝進Docker行本地測試

    本地測試Docker的 AWS SAMCLI要求。若要安裝Docker,請參閱安裝泊塢視窗以搭配使用 AWS SAMCLI

使用 AWS SAMCLI指令搭配 Terraform

當您執行支援的 AWS SAMCLI命令時,請使用--hook-name選項並提供terraform值。以下是範例:

$ sam local invoke --hook-name terraform

您可以在 AWS SAMCLI組態檔案中使用下列項目配置此選項:

hook_name = "terraform"

設定專Terraform案

完成本主題中的步驟以使用 AWS SAMCLI與Terraform專案搭配使用。

如果您在項目之外構建 AWS Lambda 成品,則不需要額外的Terraform設置。請參使用 AWS SAMCLI與進Terraform行本機除錯和測試閱以開始使用 AWS SAMCLI。

如果您在Terraform專案中建立 Lambda 成品,則必須執行下列動作:

  1. 安裝 Python 3.8 或更新版本

  2. 安裝工Make具。

  3. 在Terraform專案中定義 Lambda 成品建置邏輯。

  4. 定義sam metadata資源以通知您 AWS SAMCLI的構建邏輯。

  5. 使用此命 AWS SAMCLIsam build令建立您的 Lambda 成品。

安裝 Python 3.8 或更新版本

Python需要 3.8 或更新版本才能搭配使用 AWS SAMCLI。當您執行時sam build, AWS SAMCLI會makefiles建立包含用來建置 Lambda 成品之Python命令的建立項目。

如需安裝說明,請參閱 Python 初學者指南中的下載 Python。

請執行下列指令,確認 Python 3.8 或更新版本已新增至您的電腦路徑:

$ python --version

輸出應該顯示一個版本的 Python 是 3.8 或更高版本。

安裝工Make具

GNUMake是一種控制項目的可執行文件和其他非源文件的生成的工具。依賴此工具來建 AWS SAMCLI立makefiles您的 Lambda 成品的建立項目。

如果您尚未Make在本地計算機上安裝,請在繼續之前進行安裝。

對於視窗, 您可以使用安裝巧克力. 如需指示,請參閱「如何在 Windows 中安裝和使用「Make」中的「使用巧克力

定義 Lambda 成品建置邏輯

使用資null_resourceTerraform源類型定義 Lambda 建置邏輯。以下是使用自訂建置指令碼建置 Lambda 函數的範例。

resource "null_resource" "build_lambda_function" { triggers = { build_number = "${timestamp()}" } provisioner "local-exec" { command = substr(pathexpand("~"), 0, 1) == "/"? "./py_build.sh \"${local.lambda_src_path}\" \"${local.building_path}\" \"${local.lambda_code_filename}\" Function" : "powershell.exe -File .\\PyBuild.ps1 ${local.lambda_src_path} ${local.building_path} ${local.lambda_code_filename} Function" } }

定義資sam metadata源

sam metadata源是一種null_resourceTerraform資源類型,提 AWS SAMCLI供尋找 Lambda 成品所需的資訊。專案中的每個 Lambda 函數或層都需要唯一的sam metadata資源。若要深入了解此資源類型,請參閱登錄中的 null_resource。Terraform

若要定義資sam metadata源
  1. 為資源命名,sam_metadata_以將資源識別為sam metadata資源。

  2. 在資源triggers區塊內定義 Lambda 成品屬性。

  3. 使用null_resourcedepends_on引數指定包含 Lambda 建置邏輯的內容。

    以下是範例範本:

    resource "null_resource" "sam_metadata_..." { triggers = { resource_name = resource_name resource_type = resource_type original_source_code = original_source_code built_output_path = built_output_path } depends_on = [ null_resource.build_lambda_function # ref to your build logic ] }

    以下是範例sam metadata資源:

    resource "null_resource" "sam_metadata_aws_lambda_function_publish_book_review" { triggers = { resource_name = "aws_lambda_function.publish_book_review" resource_type = "ZIP_LAMBDA_FUNCTION" original_source_code = "${local.lambda_src_path}" built_output_path = "${local.building_path}/${local.lambda_code_filename}" } depends_on = [ null_resource.build_lambda_function ] }

sam metadata資源的內容會根據 Lambda 資源類型 (函數或層) 以及封裝類型 (ZIP或影像) 而有所不同。若要取得更多資訊和範例,請參閱〈〉sam 中繼資料資源

當您設定sam metadata資源並使用支援的 AWS SAMCLI命令時, AWS SAMCLI會在執行命 AWS SAMCLI令之前產生中繼資料檔案。產生此檔案後,您可以將此--skip-prepare-infra選項與 future 的 AWS SAMCLI指令搭配使用,以略過中繼資料產生程序並節省時間。只有在您尚未進行任何基礎設施變更 (例如建立新的 Lambda 函數或新API端點) 時,才應使用此選項。

使用建置 AWS SAMCLI您的 Lambda 成品

使用此命 AWS SAMCLIsam build令建立您的 Lambda 成品。當您執行時sam build, AWS SAMCLI會執行下列動作:

  1. 尋找Terraform專案中的sam metadata資源,以瞭解並找出您的 Lambda 資源。

  2. 啟動 Lambda 建置邏輯以建置 Lambda 成品。

  3. 建立組織Terraform專案以與 AWS SAMCLIsam local指令搭配使用的.aws-sam目錄。

要建立與山姆構建
  1. 從包含Terraform根模塊的目錄中,運行以下命令:

    $ sam build --hook-name terraform
  2. 若要建立特定的 Lambda 函數或層,請執行下列命令

    $ sam build --hook-name terraform lambda-resource-id

    Lambda 資源識別碼可以是 Lambda 函數名稱或完整Terraform資源地址,例如aws_lambda_function.list_booksmodule.list_book_function.aws_lambda_function.this[0]

如果您的函數源代碼或其他Terraform配置文件位於包含Terraform根模塊的目錄之外,則需要指定位置。使用--terraform-project-root-path此選項可指定包含這些檔案之頂層目錄的絕對路徑或相對路徑。以下是範例:

$ sam build --hook-name terraform --terraform-project-root-path ~/projects/terraform/demo

使用容器建置

執行命 AWS SAMCLIsam build令時,您可以設定 AWS SAMCLI為使用本機Docker容器建置應用程式。

注意

您必須已Docker安裝並設定。如需說明,請參閱 安裝泊塢視窗以搭配使用 AWS SAMCLI

若要使用容器建置
  1. 建立Dockerfile包含TerraformPython、和Make工具的。您也應該包含您的 Lambda 函數執行階段。

    下面是一個例子Dockerfile

    FROM public.ecr.aws/amazonlinux/amazonlinux:2
    
    RUN yum -y update \
        && yum install -y unzip tar gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \
        less libcurl-devel openssl openssl-devel readline-devel xz-devel \
        zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \
        && rm -rf /var/cache/yum
    
    RUN yum -y install make \
        && yum -y install zip
    
    RUN yum install -y yum-utils \
        && yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo \
        && yum -y install terraform \
        && terraform --version
    
    # AWS Lambda Builders
    RUN amazon-linux-extras enable python3.8
    RUN yum clean metadata && yum -y install python3.8
    RUN curl -L get-pip.io | python3.8
    RUN pip3 install aws-lambda-builders
    RUN ln -s /usr/bin/python3.8 /usr/bin/python3
    RUN python3 --version
    
    VOLUME /project
    WORKDIR /project
    
    ENTRYPOINT ["sh"]
  2. docker build來建立您的Docker映像檔。

    以下是範例:

    $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
  3. 使用--use-container--build-image選項執行 AWS SAMCLIsam build命令。

    以下是範例:

    $ sam build --use-container --build-image terraform-build:v1

後續步驟

若要開始與Terraform專案 AWS SAMCLI搭配使用,請參閱使用 AWS SAMCLI與進Terraform行本機除錯和測試

設定 Terraform Cloud

我們建議您使用Terraform v1.6.0或更新版本。如果您使用的是舊版本,則必須在本端產生Terraform計畫檔。本地計劃文件提供 AWS SAM CLI了執行本地測試和調試所需的信息。

產生本端平面檔的步驟
注意

這些步驟不是Terraform v1.6.0或更新的必要步驟。若要開始使用 AWS SAM CLI與Terraform Cloud,請參閱 AWS SAMCLI搭配使用 Terraform

  1. 配置令API牌 — 令牌的類型將取決於您的訪問級別。若要進一步了解,請參閱Terraform Cloud文件中的 APIToken

  2. 設定 API Token 環境變數 — 以下是命令列中的範例:

    $ export TOKEN="<api-token-value>"
  3. 取得您的執行 ID — 從Terraform Cloud主控台,找出您要與之搭配使用的Terraform執行 ID AWS SAMCLI。

    執行 ID 位於執行階段的階層連結路徑中。

    中顯示執行 ID 的Terraform Cloud階層連結路徑。
  4. 獲取計劃文件 — 使用API令牌獲取本地計劃文件。以下是命令列中的範例:

    curl \ --header "Authorization: Bearer $TOKEN" \ --header "Content-Type: application/vnd.api+json" \ --location \ https://app.terraform.io/api/v2/runs/<run ID>/plan/json-output \ > custom_plan.json

您現在可以使用 AWS SAMCLI與Terraform Cloud。使用支援的指 AWS SAMCLI令時,請使用--terraform-plan-file選項來指定本端平面檔的名稱和路徑。以下是範例:

$ sam local invoke --hook-name terraform --terraform-plan-file custom-plan.json

以下是使用sam local start-api指令的範例:

$ sam local start-api --hook-name terraform --terraform-plan-file custom-plan.json

如需可搭配這些範例使用的範例應用程式,請參閱 AWS 範例儲存庫中的 api_gateway_v2_tf_ cloud。GitHub

後續步驟

若要開始使用 AWS SAMCLI與Terraform Cloud,請參閱使用 AWS SAMCLI與進Terraform行本機除錯和測試