本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Terraform IaC 文件
学习如何使用 Terraform 基础设施即代码 (IaC) 文件。 AWS ProtonTerraform
AWS Proton 支持 Terraform IaC 的自我管理配置。
有关响应拉取请求并实现基础架构配置的配置存储库的完整示例,请参阅上的 Terraform Acti OpenSource GitHub ons 自动化模板
自托管式预置如何使用 Terraform IaC 模板捆绑包文件:
-
使用 Terraform 模板包创建环境时,使用控制台或输入参数 AWS Proton 编译
.tf
文件。spec file
-
它发出拉取请求,将编译的 IaC 文件合并到您在 AWS Proton中注册的存储库。
-
如果请求获得批准,则 AWS Proton 等待您提供的配置状态。
-
如果拒绝了该请求,则取消创建环境。
-
如果拉取请求超时,则不会 完成创建环境。
AWS Proton 考虑到 Terraform IaC 的注意事项:
-
AWS Proton 无法管理你的 Terraform 配置。
-
您必须向注册配置存储库 AWS Proton。 AWS Proton 对该存储库发出拉取请求。
-
您必须创建 CodeStar 连接才能连接到 AWS Proton 您的配置存储库。
-
要从 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 文件创建的服务、管道和组件部署到通过 IaC 文件创建的环境中。 CloudFormation
在准备 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 编译为代码文件。它为 Terraform 可使用的输入创建 proton.
和 resource-type
.variables.tfproton.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 支持两种存储库路径布局。在以下示例中,路径是由两个环境中的命名空间资源参数命名的。每个环境具有两个服务的服务实例,其中的一个服务的服务实例具有直接定义的组件。
资源类型 | 名称参数 | = | 资源名称 |
---|---|---|---|
环境 | 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" |