本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Terraform IaC 檔案
了解如何搭配 使用 Terraform 基礎設施做為程式碼 (IaC) 檔案 AWS Proton。Terraform
AWS Proton 支援 Terraform IaC 的自我管理佈建。
如需回應提取請求並實作基礎設施佈建的佈建儲存庫完整範例,請參閱 GitHub 上適用於 的 Terraform OpenSource GitHub Actions 自動化範本 AWS Proton
自我管理佈建如何與 Terraform IaC 範本套件檔案搭配使用:
-
當您從 Terraform 範本套件建立環境時, 會使用主控台或
spec file
輸入參數來 AWS Proton 編譯您的.tf
檔案。 -
它提出提取請求,將編譯的 IaC 檔案合併到您已向 註冊的儲存庫 AWS Proton。
-
如果請求獲得核准, 會 AWS Proton 等待您提供的佈建狀態。
-
如果請求遭到拒絕,則會取消環境建立。
-
如果提取請求逾時,則環境建立未完成。
AWS Proton 搭配 Terraform IaC 考量:
-
AWS Proton 不會管理您的 Terraform 佈建。
-
您必須在此儲存庫上向 .makes 提取請求註冊佈建儲存庫。 AWS Proton AWS Proton
-
您必須建立 CodeStar 連線,才能 AWS Proton 與您的佈建儲存庫連線。
-
若要從 AWS Proton 編譯的 IaC 檔案佈建,您必須回應 AWS Proton pull request. AWS Proton makes 在環境和服務建立和更新動作之後提取請求。如需詳細資訊,請參閱AWS Proton 環境及AWS Proton 服務。
-
若要從 AWS Proton 編譯的 IaC 檔案佈建管道,您必須建立 CI/CD 管道儲存庫。
-
您的提取請求型佈建自動化必須包含通知 AWS Proton 任何佈建 AWS Proton 資源狀態變更的步驟。您可以使用 AWS Proton NotifyResourceDeploymentStatusChange API。
-
您無法將從 CloudFormation IaC 檔案建立的服務、管道和元件部署至從 Terraform IaC 檔案建立的環境。
-
您無法將從 Terraform IaC 檔案建立的服務、管道和元件部署至從 CloudFormation IaC 檔案建立的環境。
準備 Terraform IaC 檔案時 AWS Proton,您可以將命名空間連接至輸入變數,如下列範例所示。如需詳細資訊,請參閱參數。
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } // This tells terraform to store the state file in s3 at the location // s3://terraform-state-bucket/tf-os-sample/terraform.tfstate backend "s3" { bucket = "terraform-state-bucket" key = "tf-os-sample/terraform.tfstate" region = "us-east-1" } } // Configure the AWS Provider provider "aws" { region = "us-east-1" default_tags { tags = var.proton_tags } } resource "aws_ssm_parameter" "my_ssm_parameter" { name = "my_ssm_parameter" type = "String" // Use the Proton environment.inputs. namespace value = var.environment.inputs.ssm_parameter_value }
編譯的基礎設施做為程式碼
當您建立環境或服務時, 會使用主控台或spec file
輸入將基礎設施 AWS Proton 編譯為程式碼檔案。它為您的輸入建立 proton.
和 resource-type
.variables.tfproton.auto.tfvars.json
檔案,供 Terraform 使用,如下列範例所示。這些檔案位於與環境或服務執行個體名稱相符的資料夾中指定的儲存庫中。
此範例顯示 如何在變數定義和變數值中 AWS Proton 包含標籤,以及如何將這些 AWS Proton 標籤傳播到佈建的資源。如需詳細資訊,請參閱將標籤傳播至佈建的資源。
dev/environment.tf:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } // This tells terraform to store the state file in s3 at the location // s3://terraform-state-bucket/tf-os-sample/terraform.tfstate backend "s3" { bucket = "terraform-state-bucket" key = "tf-os-sample/terraform.tfstate" region = "us-east-1" } } // Configure the AWS Provider provider "aws" { region = "us-east-1" default_tags { tags = var.proton_tags } } resource "aws_ssm_parameter" "my_ssm_parameter" { name = "my_ssm_parameter" type = "String" // Use the Proton environment.inputs. namespace value = var.environment.inputs.ssm_parameter_value }
dev/proton.environment.variables.tf:
variable "environment" { type = object({ inputs = map(string) name = string }) } variable "proton_tags" { type = map(string) default = null }
dev/proton.auto.tfvars.json:
{
"environment": {
"name": "dev",
"inputs": {
"ssm_parameter_value": "MyNewParamValue"
}
}
"proton_tags" : {
"proton:account" : "123456789012",
"proton:template" : "arn:aws:proton:us-east-1:123456789012:environment-template/fargate-env",
"proton:environment" : "arn:aws:proton:us-east-1:123456789012:environment/dev"
}
}
儲存庫路徑
AWS Proton 使用來自環境或服務建立動作的主控台或規格輸入來尋找儲存庫,以及尋找編譯 IaC 檔案的路徑。輸入值會傳遞至命名空間輸入參數。
AWS Proton 支援兩種儲存庫路徑配置。在下列範例中,路徑是以來自兩個環境的命名空間資源參數命名。每個環境都有兩個 服務的服務執行個體,而其中一個服務的服務執行個體具有直接定義的元件。
資源類型 | 名稱參數 | = | 資源名稱 |
---|---|---|---|
環境 | environment.name |
= | "env-prod" |
環境 | environment.name |
"env-staged" |
|
服務 | service.name |
"service-one" |
|
服務執行個體 | service_instance.name |
"instance-one-prod" |
|
服務執行個體 | service_instance.name |
"instance-one-staged" |
|
服務 | service.name |
"service-two" |
|
服務執行個體 | service_instance.name |
"instance-two-prod" |
|
元件 | service_instance.components.default.name |
"component-prod" |
|
服務執行個體 | service_instance.name |
"instance-two-staged" |
|
元件 | service_instance.components.default.name |
"component-staged" |