
初めに
記事の概要
今回は、TerraformのCI/CDをGitHub Actionsを利用して構築する方法についてご紹介します。Terraformを使ってGitHubのリポジトリを作成し、GitHub Actionsを使ってCI/CDを自動化する方法を実際の手順とともに解説します。この記事を読むことで、TerraformとGitHub Actionsを使った開発の流れを学習することができます.最終的には、以下の画像のように、GitHub上で管理されるリポジトリを作成することができます。

設計図
今回の内容の設計図は以下の図のようになります。

利点
GitHub Actionsを使うことで、手動でのデプロイの手間が省けるだけでなく、コードの変更やテストによって自動的にデプロイが行われるため、より迅速かつ信頼性の高いデプロイが実現できます。また、別途サーバーの準備をせずにCI/CD環境を構築できます。
①Terraformでリポジトリの作成をコード化
初めにTerraformでリポジトリの作成をコード化していきます。
設計図でいうと以下の部分になります。

Terraformとは
TerraformはHashiCorp社が開発している、インフラストラクチャの構成管理ツールです。このツールは、インフラストラクチャのリソースをコードとして宣言的に定義し、その状態になるようにリソースを作成・操作してくれます。Terraformは、AWS、GCP、Azureなど、ほとんどすべてのタイプのインフラストラクチャを、Terraformのリソースとして表現することができます。そして、これらのプロバイダーのAPIを利用して、リソースを管理し、インフラストラクチャの構成管理を実現します。
では、実際に使ってみましょう。
開発環境は以下のようになっています。
- mac:13.2.1
- terraform : 1.4.3
- Homebrew : 4.0.9
手順
-
以下のコマンドを実行しterraformをインストールします。
brew install terraform
これでtfファイルを実行できる環境が整いました。
-
エディターなどでtfファイルを作成し、以下の内容を書き込みます。
# exmple-repositoryという名前のレポジトリを作成 module "repository" { source = "mineiros-io/repository/GitHub" version = "~> 0.18.0" name = "example-repository" license_template = "apache-2.0" gitignore_template = "Terraform" }
このtfファイルの主要な内容は以下になります。
- GitHubにリポジトリを作成するためのリソースを提供してくれるmineiros-io/repository/GitHubというモジュールを使用することを宣言している。
- リポジトリ名は”example-repository”となる。
②TerraformのCI/CDをGitHub Actionsで構築
次に、先ほど作成したtfファイルのCI/CDをGitHub Actionsで構築します。
設計図でいうと以下の部分になります。

GitHub Actionsとは
GitHub Actionsとは、GitHubが提供する継続的インテグレーション(CI)および継続的デプロイ(CD)のためのサービスです。GitHub上で管理されているリポジトリ内に、自動化されたワークフローを定義することができ、コードの変更やイベントに応じて自動的にビルドやテスト、デプロイなどのアクションを実行することができます。GitHub Actionsは、ビルドとテスト、パッケージング、デプロイ、通知などのアクションを提供し、さまざまなプログラミング言語やフレームワークに対応しています。
手順
-
先ほど作成したtfファイルを格納しているフォルダへ移動し、以下のコマンドを実行します。
mkdir -p .Github/workflows/ touch .Github/workflows/deploy.yml
これがきちんと実行されると”deploy.yml”ファイルが作成されるはずです。
-
手順1で作成された”deploy.yml”ファイルに以下の内容を書き込みます。
name: terraform plan on: push: branches: - main env: tf_version: '1.4.2' tf_work_dir: '.' GitHub_TF_TOKEN: ${{ secrets.TF_TOKEN}} jobs: plan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: terraform fmt uses: hashicorp/terraform-GitHub-actions@master with: tf_actions_version: ${{ env.tf_version }} tf_actions_subcommand: fmt tf_actions_working_dir: ${{ env.tf_work_dir }} - name: terraform init uses: hashicorp/terraform-GitHub-actions@master with: tf_actions_version: ${{ env.tf_version }} tf_actions_subcommand: init tf_actions_working_dir: ${{ env.tf_work_dir }} - name: terraform validate uses: hashicorp/terraform-GitHub-actions@master with: tf_actions_version: ${{ env.tf_version }} tf_actions_subcommand: validate tf_actions_working_dir: ${{ env.tf_work_dir }} - name: terraform plan uses: hashicorp/terraform-GitHub-actions@master with: tf_actions_version: ${{ env.tf_version }} tf_actions_subcommand: plan tf_actions_working_dir: ${{ env.tf_work_dir }} - name: Start Deployment uses: bobheadxi/deployments@master id: deployment with: step: start TF_TOKEN: ${{ secrets.TF_TOKEN}} env: production - name: terraform apply uses: hashicorp/terraform-GitHub-actions@master with: tf_actions_version: ${{ env.tf_version }} tf_actions_subcommand: apply tf_actions_working_dir: ${{ env.tf_work_dir }} # Deploymentを終了する - name: Finish Deployment uses: bobheadxi/deployments@master with: step: finish TF_TOKEN: ${{ secrets.TF_TOKEN}} status: ${{ job.status }} deployment_id: ${{ steps.deployment.outputs.deployment_id }}
このymlファイルの内容は以下になります。
- mainブランチへのpushをトリガーにする
- Ubuntuの最新ver.の環境で実行する
- terraform fmfでコードの整形を行う
- terraform initで初期化を行う
- terraform validateで構文エラーがでないか検証する
- terraform planで実行計画を生成する
- Start Deploymentでデプロイメントプロセスを開始する
- terraform applyで実行計画に従って内容を実行する
- Finish Deploymentでデプロイメントを終了する
では、リモートリポジトリを作成し、ローカルのコンテンツ(tfファイルとymlファイル)をmainブランチへpushしてみましょう。GitHub Actionsは、mainブランチへのpushをトリガーに起動されるため、この作業が完了したら自動的にGitHub Actionsが開始されます。
GitHubのActionsタブを開くと以下のようになります。

ビルドが成功すると以下になります。 ※ここでエラーが出た方は、ymlファイルの1~8のどの段階でエラー出たか確認してみてください

実際にレポジトリを確認してみると,”example-repository”が作成されたことが確認できました。

最後に
今回は、GitHub Actionsを利用してTerraformのCI/CDを構築する方法についてご紹介しました。この記事のようにGitHub Actionsによって自動化されたCI/CDを導入することで、開発プロセスをより効率的に進めることができ、今後の開発に役立てることができます。是非、実践してみてください。
参考リンク
SinkCapitalではデータに関する支援を行っています
弊社はスペシャリスト人材が多く在籍するデータ組織です。 データ分析や分析基盤の設計などでお困りの方がいらっしゃれば、 まずは無料で、こちらから各分野のスペシャリストに直接相談出来ます。






















































