Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Aprenda a usar la infraestructura de Terraform como archivos de código (IaC) con. AWS ProtonTerraform
AWS Proton admite el aprovisionamiento autogestionado para Terraform IaC.
Para ver un ejemplo completo de un repositorio de aprovisionamiento que responde a las solicitudes de cambios e implementa el aprovisionamiento de infraestructura, consulta la plantilla de automatización de Terraform OpenSource GitHub
Cómo funciona el aprovisionamiento autogestionado con los archivos del paquete de plantillas iAC de Terraform:
-
Cuando crea un entorno a partir de paquetes de plantillas de Terraform, AWS Proton compila sus
.tf
archivos con parámetros de entrada o de consola.spec file
-
Realiza una solicitud de selección para fusionar los archivos IaC compilados con el repositorio en el que te has registrado. AWS Proton
-
Si se aprueba la solicitud, AWS Proton espera al estado de aprovisionamiento que nos proporciones.
-
Si se rechaza la solicitud, se cancela la creación del entorno.
-
Si se agota el tiempo de espera de la solicitud de extracción, la creación del entorno no se completará.
AWS Proton teniendo en cuenta las consideraciones de Terraform IaC:
-
AWS Proton no administra su aprovisionamiento de Terraform.
-
Debe registrar un repositorio de aprovisionamiento con. AWS Proton AWS Proton realiza solicitudes de incorporación de cambios en este repositorio.
-
Debe crear una CodeStar conexión para conectarse AWS Proton con su repositorio de aprovisionamiento.
-
Para aprovisionar a partir de archivos IaC AWS Proton compilados, debes responder a las solicitudes de AWS Proton extracción. AWS Proton realiza solicitudes de extracción después de las acciones de creación y actualización del entorno y el servicio. Para obtener más información, consulte AWS Proton entornos y Servicios de AWS Proton.
-
Para aprovisionar una canalización a partir de archivos IaC AWS Proton compilados, debe crear un repositorio de canalizaciones de CI/CD.
-
La automatización del aprovisionamiento basada en solicitudes de extracción debe incluir pasos para notificar cualquier cambio en el estado AWS Proton de los recursos AWS Proton aprovisionados. Puedes usar la AWS Proton NotifyResourceDeploymentStatusChange API.
-
No puede implementar servicios, canalizaciones y componentes creados a partir de archivos CloudFormation IaC en entornos creados a partir de archivos IaC de Terraform.
-
No puede implementar servicios, canalizaciones y componentes creados a partir de archivos iAC de Terraform en entornos creados a partir de archivos iAC. CloudFormation
Al preparar los archivos iAC de Terraform AWS Proton, debe adjuntar espacios de nombres a las variables de entrada, como se muestra en los siguientes ejemplos. Para obtener más información, consulte Parámetros.
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
}
Infraestructura compilada como código
Al crear un entorno o un servicio, AWS Proton compila la infraestructura como archivos de código con consola o spec file
entradas. Crea proton.
y resource-type
.variables.tfproton.auto.tfvars.json
archiva tus entradas para que Terraform pueda utilizarlas, como se muestra en los siguientes ejemplos. Estos archivos se encuentran en un repositorio específico en una carpeta que coincide con el nombre del entorno o de la instancia de servicio.
En el ejemplo se muestra cómo se AWS Proton incluyen las etiquetas en la definición y los valores de las variables, y cómo se pueden propagar estas AWS Proton etiquetas a los recursos aprovisionados. Para obtener más información, consulte Propagación de etiquetas a recursos aprovisionados.
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"
}
}
Rutas de repositorio
AWS Proton utiliza las entradas de la consola o de las especificaciones del entorno o las acciones de creación de servicios para encontrar el repositorio y la ruta en la que se encuentran los archivos IaC compilados. Los valores de entrada se pasan a parámetros de entrada espaciados por nombres.
AWS Proton admite dos diseños de rutas de repositorio. En los siguientes ejemplos, las rutas se nombran según los parámetros de recursos con espacios de nombres de dos entornos. Cada entorno tiene instancias de servicio de dos servicios y las instancias de servicio de uno de los servicios tienen componentes definidos directamente.
Tipo de recurso | Nombre (parámetro) | = | Nombre del recurso |
---|---|---|---|
Entorno | environment.name |
= | "env-prod" |
Entorno | environment.name |
"env-staged" |
|
Servicio | service.name |
"service-one" |
|
Instancia de servicio | service_instance.name |
"instance-one-prod" |
|
Instancia de servicio | service_instance.name |
"instance-one-staged" |
|
Servicio | service.name |
"service-two" |
|
Instancia de servicio | service_instance.name |
"instance-two-prod" |
|
Componente | service_instance.components.default.name |
"component-prod" |
|
Instancia de servicio | service_instance.name |
"instance-two-staged" |
|
Componente | service_instance.components.default.name |
"component-staged" |
Si AWS Proton encuentra el repositorio especificado con una environments
carpeta, crea una carpeta que incluye los archivos IaC compilados y se nombra con. environment.name
Si AWS Proton encuentra el repositorio especificado con una environments
carpeta que contiene un nombre de carpeta que coincide con el nombre de un entorno compatible con una instancia de servicio, crea una carpeta que incluye los archivos IaC de la instancia compilada y recibe el nombre de. 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