Terraform奮闘日記#5 Github Actionsを用いてテストを自動化したい
こんにちは!分析屋の加成(かなり)です。
私はAWSを用いて社内の勤怠システムのAPIを開発する業務を行っています。
具体的には下図のようなAWSの構成をTerrafromを用いて構築します。
これまでにもTerraformについての記事を書いていますのでぜひチェックしてみてください!
#1:Terraformのメリットや使い方
Terrafromのメリットや使い方について記載しましたので、Terraform未経験者の人は#1から読んでみてください!!
#2:AWSのLambda関数をTerraformにて作成
実際にTerraformを使って、AWSのLambda関数を作成
#3:Lambda関数を実行するEventBridge ScheduleをTerraformにて作成
#4:Terraformを使って、IAMポリシーとIAMロールを作成
#5ではGithub Actionsを用いて、Terraformでのインフラ構築のテストを自動化するシステムを作成します。
■概要
毎回terraform planのコマンドを打って、Terraormのコードが正しく記述できているかテストをすることが面倒だったため今回Github Actionsを使って自動化しようとなりました。
やりたいことはgithub上のTerraformのファイルに更新があった際に自動的にterraform planのコマンドを実行することです。
イメージは以下。
■Github Actionsを使用する上での注意点(料金)
パブリックリポジトリで実施する場合は特に料金はかからないが、プライベートリポジトリでGithub Actionsを実行する場合は無料枠の制限があります。
〇Storage
StorageとはGithub Actionsにより生成されるファイルなどの成果物の保存領域を指します。
ログなどを出力する場合はプランに合わせて出力するサイズを注意してください。
〇Minutes(per month)
MinutesはGithub ActionsによるJobの実行時間です。
また、使用するOSによっても1分あたり何分と計測されるかが変わってきますので、注意してください。(OSはyamlファイルにて設定可能)
■Github Actionsの準備
では実際にGithub Actionsを使用するための準備をしましょう。
手順は5つです。
AWS上でIDプロバイダを作成
IDプロバイダを割り当てたIAMロールを作成
作成したIAMロールのARNをgithub上の環境変数として設定
利用するリポジトリに.github/workflowsフォルダを作成
作成した.github/workflowsフォルダの直下にyamlファイルを作成
■AWS上でIDプロバイダを作成
まず、github actionからAWSに接続するために必要なIDプロバイダを作成します。
作成する際の設定としては2つ必要です。
プロバイダのタイプをOpenID Connectに設定
プロバイダ名に”https://token.actions.githubusercontent.com”を設定
対象者に”sts.amazonaws.com”を設定
■IDプロバイダを割り当てたIAMロールを作成
作成したIDプロバイダをIAMロールに割り当てます。割り当てる際は以下のようにJSONを記載してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<account-id>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
},
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:<organization-name>/<repository-name>:*"
}
}
}
]
}
■作成したIAMロールのARNをgithub上の環境変数として設定
続いて、作成したIAMロールのARNをgithub上のsecret環境変数として設定してください。
設定するリポジトリを開く。
Settingにて、”Secret and variables”のActionを開く。
Secretの環境変数として、Nameに”AWS_ASSUME_ROLE”。値に作成したIAMロールのARNを設定する。
ここまででgithub actionを使用するための事前設定が完了です!!
■yamlファイルの作成
では最後に.github/workflowsフォルダを作成し、作成したフォルダ内にyamlファイルを格納します。
yamlファイルの中身についてはコメントアウトで説明しています。
name: Terraform Plan
on:
push:
paths:
- 'test/**' # 変更を監視するフォルダを指定
pull_request:
paths:
- 'test/**' # 変更を監視するフォルダを指定
# AWSに接続するために必要な権限
permissions:
id-token: write
contents: read
jobs:
Plan:
runs-on: ubuntu-latest
steps:
# リポジトリのコードをチェックアウト
- name: Checkout code
uses: actions/checkout@v4
# Terraformをセットアップ
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: 1.2.0
# 使用するTerraformのバージョンを指定。tfファイルに記載したバージョンを記載
- name: Setup AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ASSUME_ROLE }}
# github上の環境変数として設定する。
aws-region: us-west-1
# Terraformの初期化
- name: Terraform Init
working-directory: ./test # Terraformの設定ファイルが存在するディレクトリ
run: terraform init
# Terraform Planの実行
- name: Terraform Plan
working-directory: ./test # Terraformの設定ファイルが存在するディレクトリ
run: terraform plan
■実施結果
ここまでの手順を実施することで、github actionを実行する準備が整いました!
では実際にファイルをtestフォルダにpushしてみましょう!
すると、Actionタブにて作成したgithub actionが起動しました!
ログを確認してみると、全て実行が完了していることがわかります。
また、この画面でTerraform Planのログを確認することでtfファイルが正しく記載されているか確認することができます。
以上でterraform plamを自動的に実行するgithub actionを作成することができました。
terraform planだけでなく、terraform applyの実行も自動化できるので、ぜひお試しください!
ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!
これまでの記事はこちら!
弊社が作成を行いました分析レポートを、鎌倉市観光協会様HPに掲載いただきました。
ホームページはこちら。
noteでの会社紹介記事はこちら。
【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。