Fichiers Terraform iAC - AWS Proton

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fichiers Terraform iAC

Apprenez à utiliser l'infrastructure Terraform sous forme de fichiers de code (IaC) avec. AWS ProtonTerraform est un moteur IaC open source largement utilisé qui a été développé par. HashiCorp Les modules Terraform sont développés dans le langage HashiCorp HCL et prennent en charge plusieurs fournisseurs d'infrastructures dorsales, dont Amazon Web Services.

AWS Proton prend en charge le provisionnement autogéré pour Terraform iAc.

Pour un exemple complet de référentiel de provisionnement qui répond aux pull requests et implémente le provisionnement de l'infrastructure, voir le modèle d'automatisation Terraform OpenSource GitHub Actions pour on. AWS Proton GitHub

Comment fonctionne le provisionnement autogéré avec les fichiers groupés de modèles Terraform iAc :
  1. Lorsque vous créez un environnement à partir de ensembles de modèles Terraform, AWS Proton compilez vos .tf fichiers avec des paramètres de console ou d'entrée. spec file

  2. Il effectue une pull request pour fusionner les fichiers iAc compilés avec le référentiel auprès duquel vous vous êtes enregistré AWS Proton.

  3. Si la demande est approuvée, AWS Proton attend le statut d'approvisionnement que vous fournissez.

  4. Si la demande est rejetée, la création de l'environnement est annulée.

  5. Si le délai d'expiration de la pull request est dépassé, la création de l'environnement n'est pas terminée.

AWS Proton avec les considérations relatives à Terraform IaC :
  • AWS Proton ne gère pas votre approvisionnement en Terraform.

  • Vous devez enregistrer un référentiel de provisioning auprès AWS Proton de. AWS Proton effectue des pull requests sur ce dépôt.

  • Vous devez créer une CodeStar connexion pour vous connecter AWS Proton à votre référentiel de provisioning.

  • Pour effectuer un provisionnement à partir de fichiers IaC AWS Proton compilés, vous devez répondre aux AWS Proton pull requests. AWS Proton effectue des pull requests après la création et la mise à jour des actions de l'environnement et du service. Pour plus d’informations, consultez Environnements AWS Proton et AWS Protonservices.

  • Pour approvisionner un pipeline à partir de fichiers iAc AWS Proton compilés, vous devez créer un référentiel de pipeline CI/CD.

  • Votre automatisation du provisionnement basée sur les pull requests doit inclure des étapes pour signaler tout AWS Proton changement d'état des AWS Proton ressources provisionnées. Vous pouvez utiliser l' AWS Proton NotifyResourceDeploymentStatusChange API.

  • Vous ne pouvez pas déployer de services, de pipelines et de composants créés à partir de fichiers CloudFormation iAC dans des environnements créés à partir de fichiers Terraform iAC.

  • Vous ne pouvez pas déployer de services, de pipelines et de composants créés à partir de fichiers IaC Terraform dans des environnements créés à partir de fichiers CloudFormation iAC.

Lorsque vous préparez vos fichiers Terraform iAC pour AWS Proton, vous attachez des espaces de noms à vos variables d'entrée, comme indiqué dans les exemples suivants. Pour plus d'informations, consultez Parameters.

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 compilée sous forme de code

Lorsque vous créez un environnement ou un service, AWS Proton compilez votre infrastructure sous forme de fichiers de code avec console ou spec file entrées. Il crée proton.resource-type.variables.tf des proton.auto.tfvars.json fichiers pour vos entrées qui peuvent être utilisés par Terraform, comme indiqué dans les exemples suivants. Ces fichiers se trouvent dans un référentiel spécifié dans un dossier qui correspond au nom de l'environnement ou de l'instance de service.

L'exemple montre comment AWS Proton inclure des balises dans la définition et les valeurs des variables, et comment vous pouvez propager ces AWS Proton balises aux ressources provisionnées. Pour de plus amples informations, veuillez consulter Propagation des balises vers les ressources provisionnées.

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" } }

Chemins du référentiel

AWS Proton utilise les entrées de console ou de spécification provenant d'actions de création d'environnements ou de services pour trouver le référentiel et le chemin où se trouvent les fichiers iAc compilés. Les valeurs d'entrée sont transmises aux paramètres d'entrée avec espace de noms.

AWS Proton prend en charge deux configurations de chemin de dépôt. Dans les exemples suivants, les chemins sont nommés selon les paramètres de ressources avec espace de noms provenant de deux environnements. Chaque environnement possède des instances de service de deux services, et les instances de service de l'un des services ont des composants directement définis.

Type de ressource Paramètre de nom = Nom de la ressource
Environnement environment.name = "env-prod"
Environnement environment.name "env-staged"
Service service.name "service-one"
  Instance de service service_instance.name "instance-one-prod"
  Instance de service service_instance.name "instance-one-staged"
Service service.name "service-two"
  Instance de service service_instance.name "instance-two-prod"
    Composant service_instance.components.default.name "component-prod"
  Instance de service service_instance.name "instance-two-staged"
    Composant service_instance.components.default.name "component-staged"
Layout 1

S'il AWS Proton trouve le référentiel spécifié avec un environments dossier, il crée un dossier qui inclut les fichiers iAc compilés et porte le nomenvironment.name.

S'il AWS Proton trouve le référentiel spécifié avec un environments dossier contenant un nom de dossier correspondant à un nom d'environnement compatible avec une instance de service, il crée un dossier qui inclut les fichiers iAC de l'instance compilée et porte le nom deservice_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

S'il AWS Proton trouve le référentiel spécifié sans environments dossier, il crée un environment.name dossier dans lequel il localise les fichiers iAc de l'environnement compilé.

S'il AWS Proton trouve le référentiel spécifié dont le nom de dossier correspond à un nom d'environnement compatible avec une instance de service, il crée un service_instance.name dossier dans lequel il localise les fichiers iAc de l'instance compilée.

/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