Terraform IaC ファイル - AWS Proton

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform IaC ファイル

で Terraform Infrastructure as Code (IaC) ファイルを使用する方法について説明します AWS Proton。Terraform は、 によって開発された広く使用されているオープンソース IaC エンジンですHashiCorp。Terraform モジュールは、 HashiCorpの HCL 言語で開発され、Amazon Web Services を含むいくつかのバックエンドインフラストラクチャプロバイダーをサポートしています。

AWS Proton は、Terraform IaC のセルフマネージドプロビジョニングをサポートしています。

プルリクエストに応答し、インフラストラクチャプロビジョニングを実装するプロビジョニングリポジトリの完全な例については、「」の「 の Terraform OpenSource GitHub Actions オートメーションテンプレート AWS Proton」を参照してください GitHub。

Terraform IaC テンプレートバンドルファイルにおけるセルフマネージドプロビジョニングの働き:
  1. Terraform テンプレートバンドルから環境を作成すると、 はコンソールまたはspec file入力パラメータを使用して.tfファイルを AWS Proton コンパイルします。

  2. コンパイル済み IaC ファイルをマージするためのプルリクエストをAWS Protonに登録したリポジトリに送ります。

  3. リクエストが承認されると、 は指定したプロビジョニングステータスを AWS Proton 待機します。

  4. リクエストが拒否されると、環境の作成はキャンセルされます。

  5. プルリクエストがタイムアウトになった場合、環境の作成は完了しません

AWS Proton Terraform IaC に関する考慮事項:
  • AWS Proton は Terraform プロビジョニングを管理しません。

  • このリポジトリの .makes プルリクエストにプロビジョニングリポジトリを登録する必要があります。 AWS Proton AWS Proton

  • プロビジョニングリポジトリ AWS Proton に接続するには、 CodeStar 接続を作成する必要があります。

  • AWS Proton コンパイルされた IaC ファイルからプロビジョニングするには、環境およびサービスの作成および更新アクション後に AWS Proton プル AWS Proton リクエストに応答する必要があります。詳細については、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 }

コンパイル済み Infrastructure as Code として

環境またはサービスを作成すると、 はコンソールまたはspec file入力を使用してインフラストラクチャをコードファイルとして AWS Proton コンパイルします。これで、次の例に示すように、Terraform であなたの入力に使用できる proton.resource-type.variables.tf ファイルと proton.auto.tfvars.json ファイルが作成されます。これらのファイルは、環境名やサービスインスタンス名と同じフォルダ内の指定されたリポジトリにあります。

この例では、 が変数定義と変数値にタグ 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 は 2 つのリポジトリパスレイアウトをサポートしています。次の例では、2 つの環境の名前空間リソースパラメータによってパスの名前が指定されています。各環境には 2 つのサービスのサービスインスタンスがあり、そのうちの 1 つのサービスのサービスインスタンスにはコンポーネントが直接定義されています。

リソースタイプ 名前パラメータ = リソース名
環境 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

environmentsフォルダを持つ指定されたリポジトリ AWS Proton を検索すると、コンパイルされた IaC ファイルを含むフォルダが作成され、 で名前が付けられますenvironment.name

が、サービスインスタンス互換環境名と一致するフォルダ名を含む environmentsフォルダを持つ指定されたリポジトリ AWS Proton を検索すると、コンパイルされたインスタンス 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

environmentsフォルダなしで指定されたリポジトリ AWS Proton を検索すると、コンパイルされた環境 IaC ファイルがある environment.nameフォルダが作成されます。

がサービスインスタンス互換環境名と一致するフォルダ名を持つ指定されたリポジトリ AWS Proton を検索すると、コンパイルされたインスタンス IaC ファイルがあるservice_instance.nameフォルダが作成されます。

/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