GitHub ActionsとAWSをOIDCで接続する記事は以前に書きました。
この時は手で設定していたのですが、今回はTerraformを使って設定してみます。
今回つかうファイルの説明
コードはこちら
リポジトリの中身はこんな感じ
. ├── .github │ └── workflows │ └── actions.yaml ├── .terraform.lock.hcl ├── .tool-versions ├── README.md ├── main.tf ├── outputs.tf └── versions.tf 3 directories, 7 files
確認用のActionsです。
├── .github │ └── workflows │ └── actions.yaml
パブリックリポジトリなので、こちらからどういう動作をしているのかが確認できます。
Workflow runs · VirtualTech-DevOps/terraform-aws-oidc · GitHub
動作してる画面はこちら
Terraformのモジュールなどのバージョンが書かれたファイルです。
├── .terraform.lock.hcl
今回使うコマンドラインツールのリストです。
├── .tool-versions
これらのツールを使います。
- AWS CLI
- Terraform
- GitHub CLI
asdfを使うと.tool-versions
と同じディレクトリでasdf install
とすることでツールのインストールができます。
asdfの使い方はこちらをご覧ください。
Terraformのコードです。
├── main.tf ├── outputs.tf └── versions.tf
特に難しいことはしてなくて、main.tf
でIDプロバイダーとロールの作成、outputs.tf
で作成されたロールのArnを出力します。versions.tf
ではTerraformとAWSプロバイダーのバージョンを固定しています。
このコードを実行することで、AWSにIDプロバイダーと、GitHubOIDC-
のプレフィックでロールが作成されます。
このロールをGitHub Actions側から指定することで、GitHub ActionsとAWS間でOIDCを使用した接続ができるようになります。
Terraformを実行
Terraformを実行すると、AWSにリソースが作成されます。AWS CLIで対象のAWSが操作対象に設定されているか必ず確認してください。
リポジトリのルートに移動して以下のコマンドを実行します。
terraform init
これでコードの中で使用しているプロバイダーやモジュールがダウンロードされ、コードの実行環境が準備されます。
実行計画を作成します。
terraform plan
このコマンドで、コードからどういうリソースが作成されるかを見ることができます。バグのあるコードや構文エラーなどがあれば、この段階で発見することができるので、必ず結果を見るようにします。
リソースを作成します。
terraform apply
作成されたロールを確認します。
terraform output -raw role
ここまででエラーが出ていなければリソースの作成は成功です。
GitHub Actionsに設定してみる
っと言っても設定は難しくありません。
GitHub Actionsで使用する変数を設定していきます。
IAMロールの値を変数に設定します。
terraform output -raw role | gh variable set assume_role
AWSリージョンの値を変数に設定します。
terraform output -raw region | gh variable set aws_region
ここまで設定できれば何か適当なファイルをコミットしプッシュすることでGitHub Actionsが動きOIDC接続できていることが確認できます。