本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始使用Terraform支援 AWS SAMCLI
本主題介紹如何開始使用指 AWS Serverless Application Model 令行介面 (AWS SAMCLI) 與Terraform。
若要提供意見反應並提交功能要求,請建立GitHub問題
AWS SAMCLITerraform前提
完成所有先決條件,即可開始 AWS SAMCLI與您的Terraform專案搭配使用。
-
安裝或升級 AWS SAMCLI
要檢查是否已 AWS SAMCLI安裝,請運行以下命令:
$
sam --version
如果 AWS SAMCLI已安裝,輸出將顯示版本。若要升級至最新版本,請參閱升級 AWS SAMCLI。
如需有關安裝 AWS SAMCLI及其所有先決條件的指示,請參閱安裝 AWS SAMCLI。
-
安裝 Terraform
要檢查是否已Terraform安裝,請運行以下命令:
$
terraform -version
若要安裝Terraform,請參閱Terraform在Terraform登錄中安
裝。 -
安裝進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 成品,則必須執行下列動作:
-
安裝 Python 3.8 或更新版本
-
安裝工Make具。
-
在Terraform專案中定義 Lambda 成品建置邏輯。
-
定義
sam metadata
資源以通知您 AWS SAMCLI的構建邏輯。 -
使用此命 AWS SAMCLI
sam build
令建立您的 Lambda 成品。
安裝 Python 3.8 或更新版本
Python需要 3.8 或更新版本才能搭配使用 AWS SAMCLI。當您執行時sam build
, AWS SAMCLI會makefiles
建立包含用來建置 Lambda 成品之Python命令的建立項目。
如需安裝說明,請參閱 Python 初學者指南中的下載
請執行下列指令,確認 Python 3.8 或更新版本已新增至您的電腦路徑:
$
python --version
輸出應該顯示一個版本的 Python 是 3.8 或更高版本。
安裝工Make具
GNUMake是一種控制項目的可執行文件和其他非源文件的生成的工具。依賴此工具來建 AWS SAMCLI立makefiles
您的 Lambda 成品的建立項目。
如果您尚未Make在本地計算機上安裝,請在繼續之前進行安裝。
對於視窗, 您可以使用安裝巧克力
定義 Lambda 成品建置邏輯
使用資null_resource
Terraform源類型定義 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_resource
Terraform資源類型,提 AWS SAMCLI供尋找 Lambda 成品所需的資訊。專案中的每個 Lambda 函數或層都需要唯一的sam metadata
資源。若要深入了解此資源類型,請參閱登錄中的 null_resource
若要定義資sam metadata源
-
為資源命名,
sam_metadata_
以將資源識別為sam metadata資源。 -
在資源
triggers
區塊內定義 Lambda 成品屬性。 -
使用
null_resource
depends_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會執行下列動作:
-
尋找Terraform專案中的
sam metadata
資源,以瞭解並找出您的 Lambda 資源。 -
啟動 Lambda 建置邏輯以建置 Lambda 成品。
-
建立組織Terraform專案以與 AWS SAMCLI
sam local
指令搭配使用的.aws-sam
目錄。
要建立與山姆構建
-
從包含Terraform根模塊的目錄中,運行以下命令:
$
sam build --hook-name terraform
-
若要建立特定的 Lambda 函數或層,請執行下列命令
$
sam build --hook-name terraform
lambda-resource-id
Lambda 資源識別碼可以是 Lambda 函數名稱或完整Terraform資源地址,例如
aws_lambda_function.list_books
或module.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。
若要使用容器建置
-
建立
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"]
-
用docker build
來建立您的Docker映像檔。 以下是範例:
$
docker build --tag
terraform-build:v1
<path-to-directory-containing-Dockerfile>
-
使用
--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。
-
配置令API牌 — 令牌的類型將取決於您的訪問級別。若要進一步了解,請參閱Terraform Cloud文件中的 APIToken
。 -
設定 API Token 環境變數 — 以下是命令列中的範例:
$
export TOKEN="<api-token-value>
" -
取得您的執行 ID — 從Terraform Cloud主控台,找出您要與之搭配使用的Terraform執行 ID AWS SAMCLI。
執行 ID 位於執行階段的階層連結路徑中。
-
獲取計劃文件 — 使用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_
後續步驟
若要開始使用 AWS SAMCLI與Terraform Cloud,請參閱使用 AWS SAMCLI與進Terraform行本機除錯和測試。