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.

Where in CostGlassSettings → Cloud Accounts → AWS wizard
PlanAll plans
Who can do thisOwner or Admin in CostGlass; Terraform access to AWS
Time neededAbout 20 minutes, plus up to 24 hours for the first data
Kurz und bündig
  • 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.
Handgepflegtes Äquivalent
Die vom Assistenten generierte CloudFormation-Vorlage ist die Quelle der Wahrheit. This Terraform matches it as of this guide's publication (checked with 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.
Bevor Sie beginnen
  • 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.

1
Starten Sie den Assistenten
Go to Settings → Cloud Accounts, click the AWS card, choose the same Account type and the same features you will use in Terraform, then click Generate my template.
2
Kopieren Sie die externe ID
On Deploy the CloudFormation template it is shown as External ID (pre-filled in the template). This is the value for external_id.
3
Kopieren Sie die CostGlass-Konto-ID
In the template preview (or in the file from Download) find the parameter CostGlassAccountId and copy its Standardmäßig value, a 12-digit number. This is the value for costglass_account_id.
4
Lassen Sie den Assistenten geöffnet
Do not click "I have deployed it" until Terraform has finished. Starten Sie keine andere Verbindung, da dadurch eine andere externe ID entsteht.
Wichtig
Markieren Sie im Assistenten dieselben Funktionen, die Sie in Terraform aktivieren. CostGlass records the wizard's selection, and shows it on the account card.

Einzelkonto

Erstellen Sie einen Ordner mit diesen Dateien. Alles wird in us-east-1, wie die CloudFormation-Vorlage.

versionen.tf
Variablen.tf
main.tf
Ausgänge.tf
terraform.tfvars (Beispiel, nicht die echte Datei festschreiben)

Variablen

VariableWas es bewirktStandardmäßig
costglass_account_idDas CostGlass AWS-Konto darf die Rolle übernehmen.Keiner. Erforderlich.
external_idYour connection's External ID. Marked sensitive.Keiner. Erforderlich.
bucket_name_prefixDer Bucket heißt <Präfix>-<Ihre Konto-ID>.costglass-cur-exports
export_nameName des Kosten- und Nutzungsexports.KostenGlassCURExport
s3_prefixOrdner im Eimer.aktuell
enable_instance_schedulerFügt die einzigen Schreibberechtigungen hinzu (Start, Stopp, Skalierung).FALSCH
enable_rightsizingFügt CloudWatch-Metriken und Compute Optimizer-Lesevorgänge hinzu.FALSCH
enable_uptime_monitoringgespeichert Integriert Statusprüfungen, Alarme und Zielzustandsmessungen.FALSCH
Tipp
Pass the External ID with an environment variable instead of a file: 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

1
Initialisieren
Run terraform init.
2
Tarif
Run 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.
3
Anwenden
Run terraform apply und bestätigen. When it finishes it prints RolleArn, BucketName Und ExportArn.
4
Zurück im Assistenten
Click I have deployed it. Paste 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.
5
Verifizieren
Click Verify & connect. Von hier aus ist alles identisch mit CloudFormation-Leitfaden, einschließlich der Wartezeit von bis zu 24 Stunden auf den ersten Export.

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.

stackset.tf

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.

Mitglieder.tf
module/member_role/main.tf

Satz member_account_ids in your variables, for example ["111111111111", "222222222222"], and add a provider and module pair for each extra account.

Hinweis
Verwenden Sie Option A oder Option B, nicht beide. The management account itself uses 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.

vergleichen.sh

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

Warum verwendet Terraform us-east-1?
Die Exportressource „Kosten und Nutzung“ ist nur in „us-east-1“ vorhanden. Dort werden auch die Rolle und der Bucket erstellt, genau wie bei der CloudFormation-Vorlage.
Kann ich die CloudFormation-Vorlage für AWS und Terraform für Azure und Google Cloud verwenden?
Ja. Jede Cloud ist unabhängig. Siehe Azure Und Google Cloud.
Der Plan schlägt mit einem unbekannten Ressourcentyp aws_bcmdataexports_export fehl.
Ihr AWS-Anbieter ist zu alt. Führen Sie terraform init -upgrade mit der Einschränkung ~> 5.0 aus.
zuweisen Die S3-Bucket-Richtlinie wird abgelehnt.
Die Konfiguration wendet die öffentliche Zugriffssperre vor der Richtlinie an, um ein bekanntes Zeitproblem zu vermeiden. Wenn Sie die Dateien aufteilen, behalten Sie diese Abhängigkeit bei.
Wie entferne ich es?
Remove the connection in CostGlass, empty the bucket, then run terraform destroy. Siehe Verbinden Sie AWS und entfernen Sie den Zugriff.

Verwandte Anleitungen