Verbinden Sie AWS mit Terraform statt mit CloudFormation
A Terraform equivalent of the generated AWS template, with an Organization variant and a way to compare it to the wizard.
Verbinden Sie AWS mit Terraform statt mit CloudFormation
Erstellen Sie dieselbe IAM-Rolle, denselben S3-Bucket und denselben Kosten- und Nutzungsexport wie die CostGlass-Assistentenvorlage, aber als Terraform können Sie die Versionskontrolle überprüfen und beibehalten.
- CostGlass generiert eine CloudFormation-Vorlage für AWS. Es generiert kein Terraform. Diese Seite enthält ein handgeschriebenes Terraform-Äquivalent.
- Sie starten dennoch den AWS-Assistenten in CostGlass, da dieser Ihre Verbindung, Ihre externe ID und Ihre CostGlass-Konto-ID erstellt.
- Nichts Geheimnisvolles ist fest codiert: Die CostGlass-Konto-ID und die externe ID sind Variablen, die Sie ausfüllen.
- Anschließend fügen Sie die Ausgaben „RoleArn“ und „BucketName“ genau wie bei CloudFormation in den Assistenten ein.
- Da es manuell verwaltet wird, vergleichen Sie seine Berechtigungen mit der Assistentenvorlage, bevor Sie es anwenden. Unten finden Sie ein Vergleichsskript.
terraform validate on AWS provider 5.100). Wenn CostGlass der Vorlage später eine Berechtigung hinzufügt, kann es sein, dass diese Seite zurückbleibt. Führen Sie vor der Bewerbung immer den Vergleich im letzten Abschnitt durch.- Terraform 1.5 oder neuer und AWS-Anbieter hashicorp/aws Version ~> 5.0. Die Exportressource (aws_bcmdataexports_export) benötigt eine 5.x-Version, die sie enthält; Wenn init angibt, dass der Ressourcentyp unbekannt ist, führen Sie terraform init -upgrade aus.
- AWS-Anmeldeinformationen für das Konto, das die Rechnung bezahlt (das Verwaltungskonto einer Organisation), berechtigt zum Erstellen von IAM-Rollen, S3-Buckets und Abrechnungsdatenexporten.
- Der CostGlass-Assistent wird im Schritt „Bereitstellen“ geöffnet (siehe unten).
Holen Sie sich Ihre beiden Werte von CostGlass
Das Terraform benötigt zwei Werte, die zu Ihrer Verbindung gehören. Geben Sie sie niemals aus dem Gedächtnis ein oder teilen Sie sie im Chat.
external_id.CostGlassAccountId and copy its Standardmäßig value, a 12-digit number. This is the value for costglass_account_id.Einzelkonto
Erstellen Sie einen Ordner mit diesen Dateien. Alles wird in us-east-1, wie die CloudFormation-Vorlage.
Variablen
| Variable | Was es bewirkt | Standardmäßig |
|---|---|---|
costglass_account_id | Das CostGlass AWS-Konto darf die Rolle übernehmen. | Keiner. Erforderlich. |
external_id | Your connection's External ID. Marked sensitive. | Keiner. Erforderlich. |
bucket_name_prefix | Der Bucket heißt <Präfix>-<Ihre Konto-ID>. | costglass-cur-exports |
export_name | Name des Kosten- und Nutzungsexports. | KostenGlassCURExport |
s3_prefix | Ordner im Eimer. | aktuell |
enable_instance_scheduler | Fügt die einzigen Schreibberechtigungen hinzu (Start, Stopp, Skalierung). | FALSCH |
enable_rightsizing | Fügt CloudWatch-Metriken und Compute Optimizer-Lesevorgänge hinzu. | FALSCH |
enable_uptime_monitoring | gespeichert Integriert Statusprüfungen, Alarme und Zielzustandsmessungen. | FALSCH |
export TF_VAR_external_id='...'. Der Wert wird auch im Terraform-Status gespeichert. Schützen Sie Ihre Statusdatei daher wie ein Passwort.Führen Sie es aus und beenden Sie es in CostGlass
terraform init.terraform plan and read it. Sie sollten die Rolle, ihre Richtlinien, den Bucket und seine Einstellungen sowie den Export sehen. Es ist noch nichts erstellt.terraform apply und bestätigen. When it finishes it prints RolleArn, BucketName Und ExportArn.RolleArn into Role ARN (Outputs: RoleArn) and BucketName 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 us-east-1.AWS-Organisation
In the wizard choose AWS Organization. Führen Sie das Einzelkonto-Terraform oben im aus Verwaltungskonto: it creates the bucket, the export and the role CostGlassCURReader. Member accounts also need the role CostGlassReadOnly. Wählen Sie eine von zwei Möglichkeiten.
Option A: ein StackSet (am nächsten zur Assistentenvorlage)
Fügen Sie diese Datei demselben Ordner hinzu. Es erstellt ein vom Dienst verwaltetes StackSet, das die Mitgliedsrolle für jedes Mitgliedskonto bereitstellt, jetzt und wenn Konten später beitreten. Erfüllen Sie zunächst die einmalige Voraussetzung: im Verwaltungskonto CloudFormation → StackSets → Ermöglichen Sie vertrauenswürdigen Zugriff mit AWS Organizations.
Option B: ein Terraform-Modulaufruf pro Mitgliedskonto
Verwenden Sie dies, wenn Sie möchten, dass Terraform selbst die Rollen übernimmt, oder wenn Sie nur wenige Konten verbinden. Terraform kann keine Anbieter in einer Schleife erstellen, daher benötigt jedes Konto seinen eigenen Anbieteralias und Modulblock. The management account assumes OrganizationAccountAccessRole, which AWS Organizations creates in accounts it created; accounts you invited need an equivalent role.
Satz member_account_ids in your variables, for example ["111111111111", "222222222222"], and add a provider and module pair for each extra account.
CostGlassCURReader only, the same as the CloudFormation template.Überprüfen Sie, ob es mit dem Assistenten
Download the YAML from the wizard (Download), save it next to your Terraform, then compare the permission lists. Kreuzen Sie zunächst auf beiden Seiten die gleichen Merkmale an.
Eine leere Ausgabe bedeutet, dass die beiden Listen gleich sind. Expected differences: for an Organization template the YAML also lists organizations:ListRoots Und organizations:DescribeOrganization (used by a helper function that Option A replaces with a Terraform lookup). Bei Option B erscheinen die Richtlinien für Mitgliedskonten im Plan des Moduls. Vergleichen Sie diese daher separat mit der Mitgliedervorlage in der YAML. des Verifizierungsformulars. Wenn auf einer Seite eine andere Berechtigung angezeigt wird, bedeutet dies nur, dass Terraform veraltet ist oder Sie andere Funktionen aktiviert haben.
Also compare the Billing export columns: they live in local.cur_columns In main.tf and must equal the SELECT list in the template's QueryStatement.
FAQ
terraform destroy. Siehe Verbinden Sie AWS und entfernen Sie den Zugriff.