Connectez AWS à Terraform au lieu de CloudFormation
A Terraform equivalent of the generated AWS template, with an Organization variant and a way to compare it to the wizard.
Connectez AWS à Terraform au lieu de CloudFormation
Créez le même rôle IAM, le même compartiment S3 et l'exportation de coût et d'utilisation que ceux créés par le modèle de l'assistant CostGlass, mais en tant que Terraform, vous pouvez vérifier et conserver le contrôle de version.
- CostGlass génère un modèle CloudFormation pour AWS. Il ne génère pas Terraform. Cette page donne un équivalent Terraform écrit à la main.
- Vous démarrez toujours l'assistant AWS dans CostGlass, car il crée votre connexion, votre ID externe et votre ID de compte CostGlass.
- Rien de secret n'est codé en dur : l'ID de compte CostGlass et l'ID externe sont des variables que vous renseignez.
- Vous collez ensuite les sorties RoleArn et BucketName dans l'assistant, exactement comme avec CloudFormation.
- Comme il est géré manuellement, comparez ses autorisations avec le modèle de l'assistant avant de postuler. Un script de comparaison est ci-dessous.
terraform validate on AWS provider 5.100). Si CostGlass ajoute ultérieurement une autorisation au modèle, cette page peut être à la traîne. Exécutez toujours la comparaison dans la dernière section avant de postuler.- Terraform 1.5 ou version ultérieure et fournisseur AWS hashicorp/aws version ~> 5.0. La ressource d'exportation (aws_bcmdataexports_export) nécessite une version 5.x qui l'inclut ; si init indique que le type de ressource est inconnu, exécutez terraform init -upgrade.
- Les informations d'identification AWS pour le compte qui paie la facture (le compte de gestion d'une organisation), autorisées à créer des rôles IAM, des compartiments S3 et des exportations de données de facturation.
- L'assistant CostGlass s'ouvre à l'étape de déploiement (expliquée ci-dessous).
Obtenez vos deux valeurs de CostGlass
Le Terraform a besoin de deux valeurs qui appartiennent à votre connexion. Ne les saisissez jamais de mémoire et ne les partagez jamais dans le chat.
external_id.ID de compte CostGlass and copy its Par défaut value, a 12-digit number. This is the value for costglass_account_id.Compte unique
Créez un dossier avec ces fichiers. Tout est appliqué dans nous-est-1, comme le modèle CloudFormation.
Variables
| Variables | Ce que ça fait | Par défaut |
|---|---|---|
costglass_account_id | Le compte CostGlass AWS autorisé à assumer ce rôle. | Aucun. Requis. |
external_id | Your connection's External ID. Marked sensitive. | Aucun. Requis. |
bucket_name_prefix | Le compartiment est nommé <préfixe>-<votre ID de compte>. | costglass-cur-exports |
export_name | Nom de l’export Coût et utilisation. | CoûtGlassCUREExport |
s3_prefix | Dossier dans le seau. | cur |
enable_instance_scheduler | Ajoute les seules autorisations d'écriture (démarrer, arrêter, mettre à l'échelle). | FAUX |
enable_rightsizing | Ajoute des métriques CloudWatch et des lectures Compute Optimizer. | FAUX |
enable_uptime_monitoring | Ajoute des lectures de vérification de l'état, d'alarme et de santé de la cible. | FAUX |
export TF_VAR_external_id='...'. La valeur est également stockée dans l'état Terraform, protégez donc votre fichier d'état comme un mot de passe.Exécutez-le et terminez dans CostGlass
terraform init.terraform plan and read it. Vous devriez voir le rôle, ses politiques, le compartiment et ses paramètres, ainsi que l'exportation. Rien n'est encore créé.terraform apply et confirmez. When it finishes it prints RôleArn, Nom du compartiment et ExportArn.RôleArn into Role ARN (Outputs: RoleArn) and Nom du compartiment into S3 bucket (Outputs: BucketName). Leave Prefix as cur/ (change it to match s3_prefix, with a trailing slash, if you changed that) and Region as nous-est-1.Organisation AWS
In the wizard choose AWS Organization. Exécutez le Terraform à compte unique ci-dessus dans le compte de gestion: it creates the bucket, the export and the role CoûtGlassCURReader. Member accounts also need the role CoûtGlassReadOnly. Choisissez l’une des deux manières.
Option A : un StackSet (le plus proche du modèle d'assistant)
Ajoutez ce fichier au même dossier. Il crée un StackSet géré par le service qui déploie le rôle de membre sur chaque compte membre, maintenant et lorsque les comptes rejoindront plus tard. Effectuez d'abord la condition préalable unique : dans le compte de gestion, CloudFormation → StackSets → Activer un accès fiable avec AWS Organizations.
Option B : un appel de module Terraform par compte membre
Utilisez-le si vous souhaitez que Terraform lui-même possède les rôles ou si vous ne connectez que quelques comptes. Terraform ne peut pas créer de fournisseurs en boucle, chaque compte a donc besoin de son propre alias de fournisseur et de son propre bloc de module. The management account assumes OrganizationAccountAccessRole, which AWS Organizations creates in accounts it created; accounts you invited need an equivalent role.
Ensemble member_account_ids in your variables, for example ["111111111111", "222222222222"], and add a provider and module pair for each extra account.
CoûtGlassCURReader only, the same as the CloudFormation template.Vérifiez qu'il correspond à l'assistant
Download the YAML from the wizard (Download), save it next to your Terraform, then compare the permission lists. Cochez d'abord les mêmes caractéristiques des deux côtés.
Une sortie vide signifie que les deux listes sont égales. Expected differences: for an Organization template the YAML also lists organizations:ListRoots et organizations:DescribeOrganization (used by a helper function that Option A replaces with a Terraform lookup). Pour l'option B, les politiques de compte membre apparaissent dans le plan du module, comparez-les donc séparément avec le modèle de membre dans YAML. Toute autre autorisation apparaissant d'un côté signifie uniquement que Terraform est obsolète ou que vous avez coché différentes fonctionnalités.
Also compare the Billing export columns: they live in local.cur_columns dans main.tf and must equal the SELECT list in the template's QueryStatement.
FAQ
terraform destroy. Voir Connectez AWS en supprimant l'accès.