Terraform テンプレートの公開
アプリケーションによって定義された Terraform テンプレートを GitHub 公開して、バージョン管理、コラボレーション、一元化されたストレージを有効にします。
始める前に
必要なロール:Terraform アドミン
手順
- Terraform テンプレート専用の GitHub リポジトリを作成します。
-
次のコードを別のファイルに保存します。
- ファイル名:awsaccount.tf
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~>5.0" } } } provider "aws" { region = var.region } resource "aws_organizations_account" "account" { email = var.root_email name = var.account_name tags = var.tags parent_id = var.parent_id close_on_deletion=var.close_delete create_govcloud=var.gov_cloud } resource "aws_budgets_budget" "cost" { name = join("-", ["SN-CAM-Monthly-Budget", aws_organizations_account.account.id]) count = var.monthly_budget > 0 ? 1 : 0 budget_type = "COST" limit_amount = var.monthly_budget limit_unit = "USD" time_unit = "MONTHLY" cost_filter { name = "LinkedAccount" values = [ aws_organizations_account.account.id ] } notification { comparison_operator = "GREATER_THAN" threshold = 100 threshold_type = "PERCENTAGE" notification_type = "FORECASTED" subscriber_email_addresses = [var.root_email, var.notification_email] } notification { comparison_operator = "GREATER_THAN" threshold = 85 threshold_type = "PERCENTAGE" notification_type = "ACTUAL" subscriber_email_addresses = [var.root_email, var.notification_email] } notification { comparison_operator = "GREATER_THAN" threshold = 100 threshold_type = "PERCENTAGE" notification_type = "ACTUAL" subscriber_email_addresses = [var.root_email, var.notification_email] } } - ファイル名:variables.tf
variable "region" { type = string default = "us-east-1" } variable "account_name" { type = string description = "(Required) Account Name" } variable "root_email" { type = string description = "(Required) Account Email" } variable tags{ type = map(string) description = "(Required) Tags for the resource" } variable "close_delete" { type = bool description = "Close Account on deletion" default = true } variable "gov_cloud" { type = bool description = "Gov Cloud Account" default = false } variable "parent_id" { type = string description = "(Required) Account Parent Organizational Unit" } variable monthly_budget { type = number default = 0 } variable notification_email { type = string description = "Additional email where Budget Notifications are to be sent" }
- ファイル名:awsaccount.tf
- リモートリポジトリに Terraform ファイルをプッシュします。
-
テンプレートが GitHub に格納されたら、その場所または URL をメモします。
このテンプレートは、Terraform Cloud および ServiceNow インスタンスでサブスクリプションアカウントの作成を自動化する際に参照されます。
重要:変数はアプリケーションに密接に関連付けられているため、テンプレートを変更しないでください。