终止支持通知:2026 年 10 月 7 日, AWS 将终止对的支持。 AWS Proton 2026 年 10 月 7 日之后,您将无法再访问 AWS Proton 控制台或 AWS Proton 资源。您部署的基础架构将保持不变。有关更多信息,请参阅《AWS Proton 服务弃用和迁移指南》。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 | environment.name |
= | "env-prod" |
| Environment | 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" |