🩺

Vercel の Environment Variable を terraform import する

2023/10/30に公開

とある、フロントエンドを Vercel にデプロイしている案件で、インフラの再構築をすばやくできるように、terraform import で設定を吸い上げることをしていて気がついたことの共有です。

Project の設定(General)Domains の設定は、スムーズに terraform-provider-vercel の Documentation 通りに吸い取れたのですが、Environment Variables の取得がすんなりとはいけませんでした。

どう進めて Vercel の Environment Variables の terraform import に成功したのかを記述します。

import の失敗から始まった

ドキュメント https://registry.terraform.io/providers/vercel/vercel/latest/docs/resources/project_environment_variable#import

https://registry.terraform.io/providers/vercel/vercel/latest/docs/resources/project_environment_variable#import

に基づいて(たつもりで)、 import ブロックを利用して以下のような指定で HCL 化を試みました。

main.tf
import {
  id = "team_123456789012345678901234/prj_1234567890123456789012345678/NEXT_PUBLIC_ZZZZZZ"
  to = vercel_project_environment_variable.dev_xxxx_yyyyy_NEXT_PUBLIC_ZZZZZZ"
}

結果はこんな感じ。


importブロック利用のHCL化失敗の画面

Project と Domain は快調に取得できていただけに、何がいけないのか全く気づけませんでした。

ChatGPT4 先生に聞きました

https://chat.openai.com/share/0293a273-221a-447b-826c-45882be812aa

こんなときに頼りになるのが先生。しかし、

  • デリミタを間違ってきた( / が正解なのに : だと )
  • 提示してきた API のバージョンが正しくなかった( v6 っていつのですか... )、必要なパラメータが足りなかった(「あなたどこの誰?」的なレスポンスを喰らったw )

という感じに、まあいつもこれくらいはあるよね、くらいのガッカリはしました。

正しい API 指定は何かを探る

terraform import にラッピングされている API はあるはずで、公式ドキュメントに書いてある正解を探してみました。

vercel env ls cli を引き当てた

漠然と、「Vercel environment_variable id 確認」で検索して出てきたそれっぽいのが、vercel env ls cli でした。

https://vercel.com/docs/cli/env

そういえば GitHub Actions で CD を組んでいたので Vercel CLI をインストールしてあったなあと思い、ヒント得られるのを願って Vercel 1年生 な自分、えいやで叩いてみました。

(ディレクトリ変更や login/logout を何度かやってますが省略 )


vercel link できて vercel env ls を得たという状況

ああっ、やっぱり id はわからない・・・
というわけで API に望みを託して改めて捜索。

retrieve-the-environment-variables-(以下略) API

先ほどの検索の次点の結果に、これかな?と思しき API を見つけました。

https://vercel.com/docs/rest-api/endpoints#retrieve-the-environment-variables-of-a-project-by-id-or-name

ほう、今は v9 ですか。ということで v6 は古い情報だったけど、エンドポイントの最後が /env だったので、先生「近しい」答えを教えてくれてたんですね、という感想を持ちました。便利な世の中だ。

API 叩いたら、ついに出ました。id。


こうしてついに id を確認できた

こうして import 成功

ということで、

main.tf
import {
  id = "team_123456789012345678901234/prj_1234567890123456789012345678/${retrieved_id}"
  to = vercel_project_environment_variable.dev_xxxx_yyyyy_NEXT_PUBLIC_ZZZZZZ"
}

に直して import を再び。HCL 化に成功したので、この指定の要領で複数あった Environment Variable の import を1つ1つやり抜きました。


terraform import 成功の例

最後に

最後まで見ていただきありがとうございました。
この記事で言いたかったのは、前にやっていてうまくいったという結果に引きずられて間違いを続けてしまわないように、一定のタイミングで切り替えて仕切り直すこと大事だな、と思ったことです。(ラグビーW杯の決勝見た後にガラッと気分が変わって、得たい結果を得られた。なかなかの幸運と言うか。)


Discussion