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 をインストールして、ローカルマシンで Terraform CLI を使用します。

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

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

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

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

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

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

    以下のように置き換えます。

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

    このコマンドの出力には、statefile のアップロードとロック解除に使用される 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 を初期化している場合は、reconfigure フラグを使用して初期化する必要があります。

     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}
    

次のステップ