デプロイごとに、状態ファイルを検査または変更する場合があります。たとえば、デプロイメントからリソースをインポートまたは削除する場合は、状態ファイルを変更します。
このページでは、デプロイとリビジョンごとに作成される Terraform 状態ファイルの操作方法について説明します。状態ファイルの詳細については、状態をご覧ください。
このページの説明は、Terraform の知識があることを前提としています。
始める前に
状態ファイルの操作に必要な権限があることを確認します。
config.admin
ロールには、必要な権限が含まれています。必要な権限は次のとおりです。config.deployments.lock
config.revisions.getState
config.deployments.updateState
config.deployments.unlock
config.deployments.getLock
config.deployments.getState
Terraform 構成のローカル コピーがあることを確認します。これは、作業している状態ファイルに対応する構成です。
構成のローカルコピーを使用すると、状態ファイルを変更しながら
terraform refresh
やterraform plan
などのコマンドをローカルで実行できます。Terraform をインストールして、ローカルマシンで Terraform CLI を使用します。
状態ファイルを変更または検査する
状態ファイルを変更(変更)または検査するには、デプロイメントをロックして状態ファイルをダウンロードする必要があります。その後、状態ファイルを変更または検査できます。
状態ファイルを変更したら、Infra Manager がデプロイで使用できるようにファイルをアップロードします。
デプロイメントをロックする
デプロイをロックして、statefile を変更するときにデプロイが変更されないようにします。状態ファイルをダウンロードするには、デプロイメントをロックする必要があります。
gcloud infra-manager deployments lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
以下のように置き換えます。
- DEPLOYMENT_ID はデプロイ ID に置き換えます。
- PROJECT_ID は、Deployment が実行されるプロジェクトに置き換えます。
- LOCATION は、デプロイが実行されるロケーションに置き換えます。
このコマンドの出力には、statefile のアップロードとロック解除に使用される
lock ID
が含まれます。ロック 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}
状態ファイルをローカルで変更する
構成(
*.tf
ファイル)が、ダウンロードした状態ファイル(terraform.tfstate
)と同じディレクトリにあることを確認します。Terraform を初期化します。
terraform init
以前に Terraform を初期化している場合は、reconfigure フラグを使用して初期化する必要があります。
terraform init -reconfigure
必要に応じて、状態ファイルを操作します。たとえば、状態の検査やミューテーション オペレーションを行うことができます。状態ファイルの操作の詳細については、Terraform の状態の操作をご覧ください。
Terraform 構成ファイルをローカルで変更した場合は、変更した構成をアップロードします。この構成を、構成のデプロイ元として使用しているストレージ バケットまたは公開 git リポジトリにアップロードします。
状態ファイルをアップロードする
署名付き Cloud Storage URL を使用して、状態ファイルをアップロードします。
ロック ID を取得します。
LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
アップロード 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
デプロイメントのロックを解除する
ロック ID を取得します。
LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
デプロイのロックを解除します。
gcloud infra-manager deployments unlock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID}
次のステップ
- Google Cloudで Terraform を使用する方法の詳細を確認する。
- デプロイメントを更新する。
- デプロイの状態を表示する。
- デプロイされたリソースを表示する。
- デプロイメントを削除する。