Terraform 状態ファイルを管理する

デプロイによっては、状態ファイルの検査や変更が必要になることがあります。たとえば、デプロイからリソースをインポートまたは削除する場合は、状態ファイルを変更します。

このページでは、デプロイとリビジョンごとに作成される Terraform 状態ファイルを使用する方法について説明します。状態ファイルの詳細については、状態をご覧ください。

このページの説明は、Terraform の知識があることを前提としています。

始める前に

  1. 状態ファイルを操作するために必要な権限があることを確認します。config.admin ロールには、必要な権限が含まれています。必要な権限は次のとおりです。

    • config.deployments.lock
    • config.revisions.getState
    • config.deployments.updateState
    • config.deployments.unlock
    • config.deployments.getLock
    • config.deployments.getState
  2. Terraform 構成のローカルコピーがあることを確認します。これは、使用している状態ファイルに対応する構成です。

    構成のローカルコピーを使用すると、状態ファイルを変更しながら、terraform refreshterraform plan などのコマンドをローカルで実行できます。

  3. ローカルマシンで Terraform CLI を使用するには、Terraform をインストールします。

状態ファイルを変更または検査する

状態ファイルを変更または検査するには、デプロイをロックして状態ファイルをダウンロードする必要があります。その後、状態ファイルを変更または検査できます。

状態ファイルを変更したら、Infra Manager がデプロイで使用するファイルをアップロードします。

デプロイメントをロックする

  1. デプロイをロックして、状態ファイルを変更している間にデプロイが変更されないようにします。状態ファイルをダウンロードするには、デプロイをロックする必要があります。

    gcloud infra-manager deployments lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

    次のように置き換えます。

    • DEPLOYMENT_ID は、デプロイ ID に置き換えます。
    • PROJECT_ID: デプロイが実行されるプロジェクト。
    • LOCATION は、デプロイが実行されるロケーションに置き換えます。

    このコマンドの出力には、状態ファイルのアップロードとロック解除に使用される lock ID が含まれます。

  2. ロック ID をいつでも取得するには、次のコマンドを使用します。

    gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

状態ファイルをダウンロードする

状態ファイルをダウンロードするには、署名付き Cloud Storage URL を使用します。

SIGNED_STATE_DOWNLOAD_URL=$(gcloud infra-manager deployments export-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(signedUri)")

curl -s -X GET --output terraform.tfstate ${SIGNED_STATE_DOWNLOAD_URL}

状態ファイルをローカルで変更する

  1. 構成(*.tf ファイル)が、ダウンロードした状態ファイル(terraform.tfstate)と同じディレクトリにあることを確認します。

  2. Terraform を初期化します。

    terraform init
    
  3. Terraform を以前に初期化している場合は、再構成フラグを使用して初期化する必要があります。

    terraform init -reconfigure
    
  4. 必要に応じて状態ファイルを操作します。たとえば、状態の検査ミューテーションのオペレーションを実行できます。ステート ファイルの操作の詳細については、Terraform のステートの操作をご覧ください。

  5. Terraform 構成ファイルをローカルで変更した場合は、変更した構成をアップロードします。この構成を、構成のデプロイ元として使用するストレージ バケットまたは公開 git リポジトリにアップロードします。

状態ファイルをアップロードする

署名付き Cloud Storage URL を使用して、状態ファイルをアップロードします。

  1. ロック ID を取得します。

    LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. アップロード URL を取得します。

    SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID} --format="get(signedUri)")
    
    curl -s -X PUT --upload-file terraform.tfstate ${SIGNED_STATE_UPLOAD_URL}
    

デプロイのロックを解除する

  1. ロック ID を取得します。

    LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. デプロイのロックを解除します。

    gcloud infra-manager deployments unlock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID}
    

次のステップ