GitHub Actions から Terraform destroy してみました

## 概要

GitHub Actions を利用した Terraform による Azureリソースの作成・更新を [この記事](https://qiita.com/turupon/items/0068fe23930116e329a5) や [この記事](https://qiita.com/turupon/items/7096e4df85ce7e95bd29)にまとめています。これら作成したリソースの terraform destory による削除を問題なくできるようにしてみました。

### 実行環境

macOS Monterey 12.3.1 
python 3.8.12
Azure CLI 2.34.1

### 事前準備

- [この記事](https://qiita.com/turupon/items/7096e4df85ce7e95bd29)にあるように、リポジトリと Github Actions の環境が準備されていてAzureのリソースが作成されていること

---

## 必要なコード

GitHub Actions には workflow_dispatch というものがあり、これを利用することで手動で terraform destory を実行する事ができます。

### workflow_dispatch　コード

.github/workflows 配下に terraform_destroy.yml というファイルを新規作成します。

```terraform-destroy.yml
name: terraform-destroy
on:
  workflow_dispatch:

jobs:
  terraform:
    name: "Terraform-Destory"
    env:
      ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
      ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
      ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
      ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
      ARM_ACCESS_KEY: ${{ secrets.ARM_ACCESS_KEY }}
    runs-on: ubuntu-latest
    environment: production

    defaults:
      run:
        shell: bash

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

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

    - name: Terraform Init
      run: terraform init

    - name: Terraform Destroy
      id: destroy
      run: terraform destroy -auto-approve
```

---

## Azureリソースの削除

### git push する

ローカルで作成した workflow_dispatch 定義ファイル「terraform-destroy.yml」を github に push します。

```
git add .
git commit -m "workflow_dispatch commit"
git push -u origin main
```

### workflow_dispatch　の実行

Github画面において、新たな Actions の workflow として「terraform-destory」を確認します。
![スクリーンショット 2022-09-13 1.38.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/a0ead369-531c-a86d-44a0-251e386d344b.png)


「terraform-destory」を選択し、「Run workflow」を選択します。
![スクリーンショット 2022-09-13 1.39.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/1241ec29-d582-48c2-e345-6764f00528a5.png)


その後、「terraform destory」が実行され Terraform で作成された対象となる Azureリソースが削除されます。
![スクリーンショット 2022-09-13 1.42.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/d2163096-b448-8552-93b9-fcd3ccf1dffb.png)


### Azureリソースの確認

Azure CLI を利用して、削除された ResourceGroup を確認してみます。

```
$ az group show --name rg_ituru_github
(ResourceGroupNotFound) Resource group 'rg_ituru_github' could not be found.
Code: ResourceGroupNotFound
Message: Resource group 'rg_ituru_github' could not be found.
```

無事にリソースが削除されています！

### Terraform tfstateファイルの確認

Azure CLI を利用して、ストレージアカウント・コンテナにある tfstateファイルを確認します。Azureリソースが存在する場合の Length は 1080 となっていましたが、リソース削除後の値を確認してみます。

```
## コンテナー内の BLOB を一覧表示する
$ az storage blob list --account-name iturutfstate --container-name tfstate -o table
Name                                Blob Type    Blob Tier    Length    Content Type      Last Modified              Snapshot
----------------------------------  -----------  -----------  --------  ----------------  -------------------------  ----------
githubactions001                    BlockBlob    Hot                                      2022-09-12T14:34:57+00:00
githubactions001/terraform.tfstate  BlockBlob    Hot          156       application/json  2022-09-12T16:41:56+00:00
```

値が大きく減っているので、Azureリソース情報がない＝削除されたもの と判断できます。

---

### まとめ

GitHub Actions を利用した Terraform による Azureリソース作成後、そのリソースを GitHub Actions の workflow を手動実行することにより terraform destory で削除できることを確認できました。

### 参考記事

以下の記事を参考にさせていただきました。感謝申し上げます
[TerraformをGitHubActionsを使ってCI/CDを試す](https://zenn.dev/t_sakurai/articles/de6dd79cbe2cb3)