GitHub Actionsを利用したTerraformの自動実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/ca657853-f999-6459-f359-e3af30a6ce68.png)

### はじめに

今回は、GitHub Actionsを使用してTerraformを自動実行する方法について説明します。Terraformは、コードでインフラストラクチャを管理するためのツールであり、GitHub Actionsを活用することで、自動化されたデプロイメントプロセスを簡単に設定できます。

### **GitHub Actionsの設定**

今回は以下のような(main.tf)ファイルでGCPのVMインスタンスを作成するtfファイルを実行してみたいと思います。
```
#VMインスタンス起動用のmain.tf

terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "3.72.0"
    }
  }
}

provider "google" {
  credentials = file(".terraform/providers/registry.terraform.io/hashicorp/google/3.72.0/darwin_arm64/gcp.json")
  project     = "gcpteam" #GCPのプロジェクト名
  region      = "asia-northeast1"
}

resource "google_compute_instance" "sample-instance" {
  name         = "sample-instance"　#インスタンス名
  machine_type = "n2-standard-2"
  zone         = "asia-northeast1-a"  # インスタンスのゾーンを指定

  boot_disk {
    initialize_params {
      image = "ubuntu-os-cloud/ubuntu-2004-lts"
      size  = 100  # ブートディスクのサイズを100GBに設定
    }
  }
  
  network_interface {
    network = "default"
    access_config {
      // 外部IPアドレスを持つように設定
    }
  }
```

以下は、GitHub Actionsの設定ファイル（terraform.yml）の例です。この設定では、mainブランチにプッシュが行われ、かつmain.tfファイルに変更があった場合にのみ、Terraformの実行がトリガーされます。

```yaml
name: Terraform Apply

on:
  push:
    branches:
      - main
    paths:
      - ./main.tf

jobs:
  terraform:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v1
        with:
          terraform_version: 1.0.5

      - name: Terraform Init
        run: terraform init

      - name: Terraform Plan
        run: terraform plan

      - name: Terraform Apply
        run: terraform apply -auto-approve

```

ディレクトリ構造

```yaml
project_root/
│
├── .github/
│   └── workflows/
│       └── terraform.yml        # GitHub Actionsのワークフロー定義ファイル
│
├── .terraform/
│   └── (Terraformが管理するファイルとディレクトリ)
│
├── [main.tf](http://main.tf/)                      # Terraformのメイン設定ファイル
├── gcp.json                     # Google Cloud Platformの認証情報ファイル（セキュリティに注意）
├── terraform.tfstate
├── terraform.tfstate.backup
│
├── GCP_test.drawio              # オプション：プロジェクトの図面やドキュメント
└── [README.md](http://readme.md/)                    # プロジェクトの説明やドキュメント
```

### 手動での実行方法

GitHub Actionsのワークフローは、手動でトリガーすることもできます。以下の手順に従って、手動で実行することができます。

1. GitHubのリポジトリページに移動します。
2. ページ上部にある「Actions」タブをクリックします。
3. 左側のサイドバーで、手動でトリガーしたいワークフローが含まれているワークフローを選択します。
4. ボタンをクリックしてワークフローを手動で実行します。
 
    
    以下のように問題なく実行が完了すれば、成功です。

 ![スクリーンショット 2024-02-28 18.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/6c2ee14a-3bc7-f3f5-0139-bf0ba33c04f1.png)

### **メール通知や実行状況の監視**

GitHub Actionsでは、ジョブの実行状況や結果を確認するための通知機能を提供しています。実行が完了することで自身のメールに完了連絡を送らせることができます。また、ジョブの実行状況を監視するためのダッシュボードも利用できます。これにより、実行の状態をリアルタイムで把握し、必要に応じて対応することができます。
![スクリーンショット 2024-02-28 18.41.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/ae334919-0d75-8bb9-5bf1-038cc95349c0.png)

### **さらなる活用**

GitHub Actionsを使用したTerraformの自動実行は、開発プロセスを効率化するだけでなく、さまざまな活用方法があります。たとえば、ワークフローをカスタマイズして特定の条件下で実行する、別の環境へのデプロイメントを自動化するなど、さまざまなシナリオに応じて設定をカスタマイズできます。

以上がGitHub Actionsを使用したTerraformの自動実行に関する解説です。自動化により、開発者はより多くの時間をコードの改善やビジネス価値の創出に費やすことができます。