uni-3 log

    Search by

    GCPの既存リソースをterraformerでimportする

    GCPのリソース管理をterraformでやるために、まずは既存のものをimportしてみた

    importまで案外大変だったので書き残しておく

    環境

    • ubuntu: 18.04
    • terraformer: 0.8.10
    • tfenv: 2.0.0
    • terraform: 0.14.5

    セットアップ

    terraform with tfenv

    おおよそtfenvのREADME通り。terraformのバージョンは最新かつalpha版でないものをつかう

    git clone https://github.com/tfutils/tfenv.git ~/.tfenv
    'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
    source ~/.bash_profile 
    
    tfenv list-remote
    ...
    tfenv install 0.14.5
    tfenv use 0.14.5

    確認

    tfenv list
    terraform version

    terraformer

    こちらもREADME通り

    git clone git@github.com:GoogleCloudPlatform/terraformer.git

    使用するproviderはgoogle

    export PROVIDER={google}
    curl -LO https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64
    chmod +x terraformer-${PROVIDER}-linux-amd64
    sudo mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformer

    確認

    terraformer version

    GCPのリソースimport

    terraformerでimportする。terraformでproviderの設定をする必要がある

    terraform

    ほしいリソースについての、providerを作成

    versions.tf
    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
        }
      }
      required_version = ">= 0.14"
    }

    を作成し

    terraform init

    カレントディレクトリにprovidersが作成されるので、terraformerのpluginsディレクトリへコピー

    rsync -av .terraform/providers/registry.terraform.io/hashicorp/google/3.54.0/linux_amd64 ~/~.terraform.d/plugins

    terraformer

    認証情報はサービスアカウントを作成して、.jsonキーファイルを作成し、ダウンロードしておく(名前はterraform.jsonとした)

    versions.tfに認証情報をかいても読み取ってくれないようで、使用するキーファイルのパスを環境変数で設定する必要がある

    コマンドにてimportするproject region resourceの指定をする

    export GOOGLE_APPLICATION_CREDENTIALS="terraform.json"
    terraformer import google --resources=instances,forwardingRules,httpHealthChecks --regions=us-west1 --projects=xxxx-12345
    
    ... 
    2021/01/11 00:53:33 google importing project xxxx- region us-west1

    importする対象を指定するresourcesの値は

    terraformer import google list --projects=xxxx-12345

    で確認できる

    importされたtfファイル群はgenerated/以下に保存される

    terraform init

    リソースごとにディレクトリが切られるので、instanceだけ試した

    terraform init
    ...
    Error: Invalid legacy provider address
    ...

    terraformerで作られるtfファイル群は対応するバージョンが低い様子

    Receive error ‘Invalid legacy provider address’ with Terraform in Bitbucket pipeline - Stack Overflow を参考に以下コマンドを実行

    変更確認がでるのでyesで更新する

    terraform state replace-provider "registry.terraform.io/-/google" "hashicorp/google"
    terraform init
    terraform plan
    ...
    Plan: 0 to add, 0 to change, 0 to destroy.

    差分もなさそうなので、良い感じ

    参考

    2021, Built with Gatsby. This site uses Google Analytics.