Terraform IaC 檔案 - AWS Proton

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

Terraform IaC 檔案

了解如何搭配 使用 Terraform 基礎設施做為程式碼 (IaC) 檔案 AWS Proton。Terraform 是由 HashiCorp 開發的廣泛使用開放原始碼 IaC 引擎。Terraform 模組是以 HashiCorp 的 HCL 語言開發,並支援數個後端基礎設施供應商,包括 Amazon Web Services。

AWS Proton 支援 Terraform IaC 的自我管理佈建

如需回應提取請求並實作基礎設施佈建的佈建儲存庫完整範例,請參閱 GitHub 上適用於 的 Terraform OpenSource GitHub Actions 自動化範本 AWS Proton。 GitHub

自我管理佈建如何與 Terraform IaC 範本套件檔案搭配使用:
  1. 當您從 Terraform 範本套件建立環境時, 會使用主控台或spec file輸入參數來 AWS Proton 編譯您的.tf檔案。

  2. 它提出提取請求,將編譯的 IaC 檔案合併到您已向 註冊的儲存庫 AWS Proton

  3. 如果請求獲得核准, 會 AWS Proton 等待您提供的佈建狀態。

  4. 如果請求遭到拒絕,則會取消環境建立。

  5. 如果提取請求逾時,則環境建立未完成

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"
Layout 1

如果 AWS Proton 找到具有 environments 資料夾的指定儲存庫,它會建立包含編譯 IaC 檔案並以 命名的資料夾environment.name

如果 AWS Proton 找到具有資料夾environments的指定儲存庫,其中包含與服務執行個體相容環境名稱相符的資料夾名稱,則會建立資料夾,其中包含編譯的執行個體 IaC 檔案,並以 命名service_instance.name

/repo /environments /env-prod # environment folder main.tf proton.environment.variables.tf proton.auto.tfvars.json /service-one-instance-one-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-prod # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json /env-staged # environment folder main.tf proton.variables.tf proton.auto.tfvars.json /service-one-instance-one-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-staged # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json
Layout 2

如果 AWS Proton 找到沒有 environments 資料夾的指定儲存庫,它會建立資料夾environment.name,找到編譯的環境 IaC 檔案。

如果 AWS Proton 找到具有與服務執行個體相容環境名稱相符之資料夾名稱的指定儲存庫,它會建立service_instance.name資料夾來尋找編譯的執行個體 IaC 檔案。

/repo /env-prod # environment folder main.tf proton.environment.variables.tf proton.auto.tfvars.json /service-one-instance-one-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-prod # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json /env-staged # environment folder main.tf proton.variables.tf proton.auto.tfvars.json /service-one-instance-one-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-staged # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json