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から離れられなくなりそうです。
