Terraformのaws_iam_openid_connect_providerリソースのthumbprint_listに自動で値を入れる方法

この記事はterraform Advent Calendar 2020の19日目です。

TL; DR

tls_certificateリソースを使う

Terraformのaws_iam_openid_connect_providerリソースのthumbprint_listに自動で値を入れたい

EKSで IAM roles for service accounts機能(PodにIAMロールを割り当てる機能)を使おうと思って、OIDC ID プロバイダーをTerraformのaws_iam_openid_connect_providerリソースを使って作成しようと思った。

しかしaws_iam_openid_connect_providerリソースのthumbprint_listは必須項目でこれをどうやって自動で入れればいいか調べてみると、 手動で値を取得する方法shellを用いて自動的に値を入れる方法などが見つかったが、もっとスマートなやり方が見つかった。 それが、tls_certificateリソースを使うを方法だ。 使い方は簡単で以下のようにすればよい。

resource "aws_eks_cluster" "my_cluster" {
  name = "my_cluster"
}

data "tls_certificate" "my_certificate" {
  url = aws_eks_cluster.example.identity.0.oidc.0.issuer
}

resource "aws_iam_openid_connect_provider" "my_openid_connect_provider" {
  client_id_list  = ["sts.amazonaws.com"]
  thumbprint_list = [data.tls_certificate.my_certificate.certificates.0.sha1_fingerprint]
  url             = aws_eks_cluster.my_cluster.identity.0.oidc.0.issuer
}

注意点としては、以下のような問題がありterraform planすると毎回idに差分がでてしまう。 github.com このコメントをみると 0.14.2で解消されているらしい(私はまだ試してない)