Terraform state file 操作

記事タイトルとURLをコピーする

こんにちは!サーバーワークスの松井です!

今回は、Terraform state file(以下、state file)の操作方法について紹介します。

Terraformは、CloudFormationでのコード管理と違い、state fileにてクラウド環境の現在の状態を管理します。

手動で構築したリソースをTerraformの管理対象としたい、逆にTerraformの管理対象からリソースを外したいという場合にこの記事を役立てていただければと思います。

AWSのサービス Amazon API Gateway(以下、API Gateway)を例にしてそのやり方を紹介したいと思います。

Terraform state fileへの取り込み

state fileへの取り込みの際は、terraform import というコマンドを利用します。

terraform importのリソースでの実行方法は、各種リソース公式ドキュメントの最下部に記載されています。

API Gatewayの場合、コマンド実行にあたって、以下が必要になります。

1. 自分でterraform上で定義している論理名

論理名は取り込み前にTerraformのコード内にて記載しておく必要があります。

2. REST-API-ID

API Gatewayのコンソール画面トップの「ID」欄に記載があります。

3. RESOURCE-ID

RESOURCE-IDは、AWS CLIでしか確認できないのでCloud Shell等で確認します。 実行結果の「id」の値部分が、RESOURCE-IDとなります。

RESOURCE-ID確認コマンド

$ aws apigateway get-resources --rest-api-id REST-API-ID 

    {
        "items": [
            {
                "id": "abcd123",
                "path": "/"
            },
            {
                "id": "efgh123",
                "parentId": "abcd123",
                "pathPart": "v1",
                "path": "/v1"
            },
            {
                "id": "ijkl123",
                "parentId": "efgh123",
                "pathPart": "aaa",
                "path": "/v1/aaa"
                "resourceMethods": {
                    "POST": {}
                }
            }
        ]
    }

取り込みコマンド

# aws_api_gateway_resourceの場合( "path": "/"を取り込む場合)

$ terraform import module.tokyo.aws_api_gateway_resource.{自分でterraform上で定義している論理名} REST-API-ID/abcd123

# aws_api_gateway_methodの場合

$ terraform import module.tokyo.aws_api_gateway_method.{自分でterraform上で定義している論理名} REST-API-ID/ijkl123/POST

取り込み確認コマンド

$ terraform state show module.tokyo.aws_api_gateway_resource.{自分でterraform上で定義している論理名}

resource "module.tokyo.aws_api_gateway_resource" "{自分でterraform上で定義している論理名}" {
    created       = "2021-12-17T00:06:56Z"
    xxx      = "xxx"
}

取り込んだ際の内容と一致していれば成功です。

Terraform state fileからの削除

state fileから削除する際は、terraform state rm というコマンドを使います。

こちらについては、先程取り込みの際に利用した自分でterraform上で定義している論理名のみで削除が可能です。

コマンドを実行する際には、管理コードからもリソースの記載を削除してください。

削除コマンド

$ terraform state rm module.tokyo.aws_api_gateway_method.{自分でterraform上で定義している論理名}

削除確認コマンド

$ terraform state list  | grep api

module.tokyo.aws_api_gateway_method.{自分でterraform上で定義している論理名}

がリストに存在していなければ成功です。

まとめ

state file操作を実施することでよりTerraformの管理を柔軟に行うことができます。

Terraformの運用時に頻繁に環境設定を修正する際には、是非今回紹介した各種手法を実施してみてください。

松井 宏司

アプリケーションサービス部

AWS認定11冠

好きなお笑い芸人:トム・ブラウンとハイツ友の会