1月30日にTerraform CloudでDynamic Provider Credentialsがパブリックベータで公開されました。
Dynamic Provider Credentialsって何かと思ったら、Terraform CloudでOpenID Connect(OIDC)を使うための機能の名前みたいですね。要するにOIDCがつかえるようになった、と。
Terraform Cloudで不満だったのがOIDCを使えなかった点だったのでこれは期待できそうです。さっそく試していきます。
ひつようなもの
- Terraform v1.2以上
- Terraform CloudのアカウントとOrg
- AWSアカウント
- Terraformを実行するためのIAMユーザーの
access_key
とsecret_key
- Terraformを実行するためのIAMユーザーの
- GitHubアカウント
下ごしらえ
今回は以下のチュートリアルを参考にAWSと接続していきます。
まず、TerraformがOIDCでAWSのリソースを操作できるように、AWSにOIDCプロバイダー、ロールを作成する必要があります。
以下のリポジトリにはこれらのリソースを作成するためのTerraformのコードが入っているので自分のGitHubアカウントにForkしておいてください。
クローンして、ワーキングディレクトリに移動しておきます。
git clone https://github.com/YOUR_USERNAME/learn-terraform-dynamic-credentials.git cd learn-terraform-dynamic-credentials cd aws/trust
tfvars
ファイルがexample拡張子をつけて無効化されているのでコピーしてリネームしておきます。
cp terraform.tfvars.example terraform.tfvars
このtfvarsファイルにはTerraform CloudのOrg名とワークスペース名を設定します。この2つは必須です。
tfc_organization_name = "<YOUR_ORG>" tfc_workspace_name = "learn-terraform-dynamic-credentials"
その他の設定はvariables.tfをご覧ください。以下の点は注意が必要かもしれません。
- Terraform Cloudのprojectを変更したい場合は
tfc_project_name = "<YOUR_PROJECT>"
の行も追加してください。デフォルトではDefault Project
が設定されています。 - AWSに作成するリソースのリージョンを変更したい場合は
aws_region = "<AWS_REGION>"
の行も追加してください。デフォルトではus-east-2
にリソースが作られます。
以下を参考にTerraformでAWSのリソースを操作できるようにしておいてください。
私はexport AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
をしました。
Terraformを初期化します。
terraform init
念の為、どのようなリソースが作成されるかplan
で確認しておきましょう。
terraform plan
問題がなければリソースを作成します。
terraform apply
apply
が完了すると以下のようにrole_arn
が出力されます。
このrole_arn
をTerraformに知らせることによって、AWSでリソースの追加、削除が行えるようになります。次の作業で使用するのでコピーしておいてください。
OIDCを使ってAWSリソースの操作
いよいよOIDCを使用してAWSにEC2を起動します。
Terraform CloudのOrgに移動して、Version control workflow
でワークスペースを作成します。ワークスペース名はterraform.tfvarsのtfc_workspace_name
と一致させてください。
ワークスペースが作成できたら環境変数を入力します。
Variable category | Key | Value | Sensitive |
---|---|---|---|
Environment variable | TFC_AWS_PROVIDER_AUTH | true | No |
Environment variable | TFC_AWS_RUN_ROLE_ARN | role_arn の値 |
No |
こんな感じで設定できていればOKです。
次はSettings > Version Controlに移動してTerraform Workking Directory
にaws/infra
を設定します。
Start a new run
を実行してAWSにEC2を起動してみましょう。
このインスタンスはhttpdが起動してHello, world!
を返すんですが、セキュリティグループで弾かれるかもしれません。もし、outputsのdomain_nameでブラウザからアクセスできない場合は、AWSコンソールからセキュリティグループを調整してみてください。terraform.tfvarsでaws_region
を設定していなかったらオハイオで起動していると思います。
見れました。
片付けをして終わります。
Settings > Destruction and Deletion に移動して、Queue destroy plan
を実行してください。これでAWSに作ったリソースを削除できます。
ワークスペースも削除する場合は、Settings > Destruction and Deletion に移動して、Delete from Terraform Cloud
を実行してください。
OIDCも削除する場合は、クローンしたサンプルプロジェクトのaws/trust
に移動して、terraform destroy
を実行してください。
まとめ
Terraform Cloud、OIDCで接続できれば最高なんだけどなぁっと思ってたところに追加されたこの機能、控えめに言って最高でした。ずっと待ってた機能です。今後ますますTerraform Cloudから離れられなくなりそうです。