Memo/Terraform/heroku

https://dexlab.net:443/pukiwiki/index.php?Memo/Terraform/heroku
 

Heroku


Error .netrc

  • terraform init時のエラー
    Error installing provider "aws": Error parsing netrc file at "/home/user01/.netrc": line 4: keyword expected; got method.
  • heroku loginすると「~/.netrc」が出来て、tokenが保存される。methodをコメントアウトすると、terraform, heroku共に動く
    vim ~/.netrc
    --
    machine api.heroku.com
      login <email>
      password <token>
    #  method interactive
    --

heroku postgresqlのplan変更


既存のheroku appからterraform.tfstateを生成する

  • Terraformingは2015-09-02現在herokuは未対応
  • 以下の方法で、heroku configで取得できる値は terraform.tfstate に入るため、svn/git等で差分管理に使える
  • 例:heroku app-idが"my-heroku-app-dev"
  • terraform.tfvars
    email = "myname@example.com"
    api_key = "1111-2222-3333-4444-5555"
  • heroku.tf
    variable "email" {}
    variable "api_key" {}
    
    provider "heroku" {
        email   = "${var.email}"
        api_key = "${var.api_key}"
    }
    
    resource "heroku_app" "my-heroku-app" {
        name   = "my-heroku-app-dev"
        region = "us"
    }
  • terraform.tfstate
    {
        "version": 1,
        "serial": 0,
        "modules": [
            {
                "path": [
                    "root"
                ],
                "outputs": {},
                "resources": {
                    "heroku_app.my-heroku-app": {
                        "type": "heroku_app",
                        "primary": {
                            "id": "my-heroku-app-dev",
                            "attributes": {
                            }
                         }
                     }
                 }
             }
        ]
    }
  • 実行
    terraform refresh
  • 既存のaddonをterraform.tfstateに追加する
  1. Memo/Heroku#j7b76ec9 でaddonのidを調べる
  2. terraform.tfstate に追加。herokuのアプリIDが「my-app」の場合
                    "heroku_addon.ssl": {
                        "type": "heroku_addon",
                        "depends_on": [
                            "heroku_app.my-app"
                        ],
                        "primary": {
                            "id": "****-****-****-****-****",
                            "attributes": {
                                "app": "my-app",
                            }
                        }
                    },
  3. attributesの中身を更新
    terraform refresh

[heroku] 既存環境からtfファイルの作成

  • terraform.tfstateからconfigをkey = value形式で抽出
    cat terraform.tfstate \
     | jq '.modules[].resources[].primary[]' \
     | grep '"all_config_vars.' | grep -v '"all_config_vars.#' \
     | perl -ane 'if(/"([^"]+)":\s*"([^"]+)"/){$k=$1;$v=$2;$k=~s/all_config_vars.//;print "$k = \"$v\"\n";}' \
     | sort

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (63d)