Wenn Sie Werte verwenden, die Terraform selbst nicht direkt verwaltet, haben Sie einige Optionen.
Die erste, einfachste Option besteht darin, den Wert wie hier fest zu codieren. Dies ist eine einfache Antwort, wenn Sie erwarten, dass sich der Wert niemals ändert. Da diese "vordefinierten Richtlinien" dokumentiert sind, entsprechen die integrierten AWS-Funktionen wahrscheinlich diesen Kriterien.
Die zweite Option ist es, ein Modul Terraform und Festcode den Wert in zu schaffen , dass , und dann dieses Modul aus mehreren anderen Modulen verweisen. Auf diese Weise können Sie den Wert zentral verwalten und mehrfach verwenden. Ein Modul, das nur Ausgaben enthält, ist ein gängiges Muster für diese Art von Dingen. Sie können jedoch auch ein Modul erstellen, das eine aws_iam_role_policy_attachment
Ressource mit der aus einer Variablen festgelegten Rolle enthält .
Die dritte Option besteht darin, den Wert an einer Stelle zu platzieren, von der Terraform Werte abrufen kann, z. B. Consul, und ihn dann mithilfe einer Datenquelle von dort abzurufen. Wenn nur Terraform im Spiel ist, entspricht dies weitgehend der zweiten Option. Dies bedeutet jedoch, dass Terraform sie bei jeder Aktualisierung erneut liest und nicht nur, wenn Sie das Modul mit aktualisieren. terraform init -upgrade
Dies könnte daher eine bessere Option für Werte sein, die dies tun oft ändern.
Die vierte Option besteht darin, eine spezielle Datenquelle zu verwenden, die den Wert direkt aus der Quelle der Wahrheit lesen kann. Terraform verfügt derzeit nicht über eine Datenquelle zum Abrufen von Informationen zu verwalteten AWS-Richtlinien. Dies ist daher keine Option für Ihre aktuelle Situation, kann jedoch zum Abrufen anderer AWS-definierter Daten wie AWS-IP-Adressbereiche, Service-ARNs usw. Verwendet werden .
Welche davon für eine bestimmte Situation geeignet ist, hängt davon ab, wie häufig sich der Wert ändert, wer Änderungen daran verwaltet und ob spezielle Terraform-Datenquellen verfügbar sind.