クラウドインテグレーション部の渡邊です。
本記事はGitHub Actionsを利用する際の設定方法から、実際にGitHub Actionsを利用したTerraformによるAWSリソースの構築までをハンズオン形式で紹介していきます。
GitHub Actionsの概要は以下の記事で紹介しておりますので是非参考にしてください。
なお、こちらの記事はGitHubの基本的な操作(commit , push など)を理解している前提で記述しています。
事前に以下の準備をお願いします。すでにアカウントがある場合はそちらを利用して構いません。
AWS側の設定としてプロバイダの設定とIAMロールの設定を行います。
プロバイダの設定は、IAMロールの信頼するプロバイダーとしてGitHub Actionsを指定するために必要です。
IAMロールの設定は、GitHub Actionsのワークフローに含まれるTerraformを利用したAWSリソースの作成のために必要です。
IAMのコンソール画面左の「IDプロバイダ」から「プロバイダを追加」をクリックしてください。
【IAMのIDプロバイダ設定画面】の各設定項目に以下の値の入力と「サムプリントの取得」をクリックしてから「プロバイダを追加」をクリックしてください。
https://token.actions.githubusercontent.com
プロバイダの追加に成功すると、以下の【プロバイダ追加成功メッセージ】が表示されます。
また、以下の【サムプリント取得エラーメッセージ】のようにサムプリント取得時にエラーが発生した場合は、すでに作成されているのでこちらのステップは飛ばして構いません。
【サムプリント取得エラーメッセージ】
IAMのコンソール画面左の「ロール」から「ロールを作成」をクリックしてください。
各設定項目を以下の通りに設定してください。
IAMロールに付与するポリシーは、今回Terraformを利用したVPCの作成を想定しているため「AmazonVPCFullAccess」を設定してください。
最後に任意のIAMロールの名前を指定し、ロールを作成してください。
ここでは、GitHub Actionsで利用するIAMロールのARNを直接コードに記載しないために、secretsに登録します。
リポジトリ内のSettings > Secrets > Actionsへ移動し、先程作成したロールのARNを以下画像赤枠に記載の`New repository secret`をクリックして登録します。
登録する際には以下の値を設定します。
登録すると以下画像の通り、`Repository secrets`に登録されます。
GitHub Actionsを利用するために必要なワークフローの定義ファイルを作成します。
ワークフローの定義ファイルはリポジトリの.github/workflows配下にYAML形式で配置する必要があります。
よって、今回は「githubactions.yml」というワークフロー の定義ファイルを作成し「リポジトリ名/.github/workflows/githubactions.yml」の形で配置してください。
※mainブランチをトリガーにワークフローを実行するように設定しているため、mainブランチで作成してください。
中身は以下の定義ファイルを利用しています。
githubactions.yml
name: 'GitHubActions-Terraform' on: push: branches: - "main" jobs: apply_tf: name: Terraform apply runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - name: set ROLE run: | echo "AWS_ROLE_ARN=$" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v3 - name: configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: $ aws-region: ap-northeast-1 - name: Setup Terraform uses: hashicorp/setup-terraform@v2 with: terraform_version: ~1.2.0 - name: Terraform Init run: terraform init working-directory: terraform - name: Terraform Apply run: terraform apply -auto-approve working-directory: terraform
GitHub Actionsには、ワークフロー、ジョブ、ステップの3つの実行単位があります。
それぞれの関係は【定義ファイル構成概要】の通りです。
以下定義ファイルの詳細を適宜区切って説明します。
#ワークフロー名 name: 'GitHubActions-Terraform' #イベントトリガー on: push: branches: - "main"
jobs: #ジョブid apply_tf: #ジョブ名 name: Terraform apply #ジョブ実行するマシンのタイプ runs-on: ubuntu-latest #ジョブの権限設定 permissions: id-token: write contents: read
steps: - name: set ROLE #コマンド実行 run: | echo "AWS_ROLE_ARN=$" >> $GITHUB_ENV - name: Checkout #利用するアクション uses: actions/checkout@v3 - name: configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: $ aws-region: ap-northeast-1 - name: Setup Terraform uses: hashicorp/setup-terraform@v2 with: terraform_version: ~1.2.0 - name: Terraform Init run: terraform init working-directory: terraform - name: Terraform Apply run: terraform apply -auto-approve working-directory: terraform
ジョブid配下には、stepsというタスクのグループが含まれています。
以上が今回使用する定義ファイルの中身の説明です。
構文について詳しく知りたい方は以下の「GitHub アクションのワークフロー構文」を参考にしてください。
では早速、Terraformの定義ファイルとして「リポジトリ名/terraform/main.tf」をmainブランチに配置して動作確認をします。
以下のファイルはTerraformでVPCを作成するためのファイルです。
※リポジトリにファイルを配置すると、GitHub Actionsの実行によりAWS環境にVPCが作成されます。
main.tf
resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" tags = { Name = "githubactions-vpc" } }
このように作成できたらリポジトリのActionsタブを確認してみましょう。
Actionsタブではワークフローの実行履歴を確認できます。
以下の画像のようにチェックマークがついてたら成功です。
AWSコンソールからVPCを確認すると【AWS VPCコンソール画面】のように、VPCが作成されています。
今回作成したリソースはVPCのみであるため、AWSコンソール画面から作成したVPCを削除してください。
※GitHubのリポジトリ上からTerraformのファイルを削除しても、ステートファイルでリソース管理をしていないためAWS環境のリソースは削除されません。
お疲れ様でした。
このようにファイルをリポジトリに反映させただけで自動的に実行されると、開発の負担が楽になることを実感していただけたら幸いです。
最後までお読みいただきありがとうございました。