Archivos iAC de Terraform - AWS Proton

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.

Archivos iAC de Terraform

Aprenda a usar la infraestructura de Terraform como archivos de código (IaC) con. AWS ProtonTerraform es un motor iAC de código abierto muy utilizado que fue desarrollado por. HashiCorp Los módulos de Terraform se desarrollan en HashiCorp el lenguaje HCL y son compatibles con varios proveedores de infraestructuras de back-end, incluido Amazon Web Services.

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 Actions para ver más información. AWS Proton GitHub

Cómo funciona el aprovisionamiento autogestionado con los archivos del paquete de plantillas iAC de Terraform:
  1. 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

  2. Realiza una solicitud de selección para fusionar los archivos IaC compilados con el repositorio en el que te has registrado. AWS Proton

  3. Si se aprueba la solicitud, AWS Proton espera al estado de aprovisionamiento que nos proporciones.

  4. Si se rechaza la solicitud, se cancela la creación del entorno.

  5. 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.resource-type.variables.tf y proton.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"
Layout 1

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
Layout 2

Si AWS Proton encuentra el repositorio especificado sin una environments carpeta, crea una environment.name carpeta en la que ubica los archivos IaC del entorno compilado.

Si AWS Proton encuentra el repositorio especificado con un nombre de carpeta que coincide con el nombre de un entorno compatible con una instancia de servicio, crea una service_instance.name carpeta en la que ubica los archivos IaC de la instancia compilada.

/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