terraform import でS3バケットをインポートした時の備忘 - koudenpaのブログ
でTerraform Cloud + AWSは少し試した。今回はAzureを試した。これはその感想記事です。
先日 Azure Static Web Appsの環境毎にE2Eテストしてみる - koudenpaのブログ した時には、IaCせずAzure Portal上でStatic Web Appsを作った。これは、ARMテンプレート書くよりPortalで操作したほうが手っ取り早いだろう、というものぐさな理由のほかに、TerraformはまぁまぁマイブームなのでどうせIaCするならTerraformだろうって感じだったからだ。作業した当時はStatic Web AppsのプロバイダはPR中だったのだけれど、先ごろリリースされたので、Terrraformの大きな魅力の一つであるインポート機能で既存のStatic Web AppsをTerraform管理下に置いてみた。
触感
Terraform で Azure のリソースを管理することの触感はとてもよいと思った。
正直今回は全然大したものを書いていない*1のだけれど、それでもHCL、Terraformの世界観でリソースを宣言していけるのは便利だ。
もちろん、それぞれのプロバイダがどのようなAPIで管理対象を操作しているのかは知っているに越したことはないのだろうけれど、それにしたって人とツールのインタフェースが統一されているのは嬉しすぎる。
Terraform Cloudも便利。IaCは典型的にはGitリポジトリでPRを作ったら変更をプレビューできて、その後適用できればいい。そのための必要十分な設定を簡単に行えるのはとても体験がいい。
こんなの好きになっちゃうだろ?
クラウドプロバイダネイティブなIaC管理で似たようなことできる?
いや、できるのかも。知らんだけで。
Terraformに与える権限よく分からん
AZコマンドでARMテンプレートをデプロイする時には、共同管理者権限をリソースグループにつけたプリンシパルで実行していたのだけれど、Terraformに同じ権限を与えたらなんか失敗した。
その時のエラーはこんなものだった。
Original Error: Cannnot register providers: Microsoft.DevSpaces. Errors were: Cannot register provider Microsoft.DevSpaces with Azure Resource Manager: resources.ProvidersClient#Register: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationFailed" Message="The client 'x-x-x-x-x' with object id 'x-x-x-x-x' does not have authorization to perform action 'Microsoft.DevSpaces/register/action' over scope '/subscriptions/x-x-x-x-x' or the scope is invalid. If access was recently granted, please refresh your credentials.".
要するにサブスクリプションの権限が必要なのだろうけれど、リソースグループの作成とかではなくて、依存してるつもりはない Microsoft.DevSpaces
でエラーしてるのがどうにも腑に落ちない。
権限周りはすぐに深みにはまって面倒くさいので、スコープをサブスクリプションにしてプリンシパルを作り直してしまった*2けれど、権限を絞った状態でTerraformのAzureプロバイダを使う手法はあるんだろうか。
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
Terraform、Azureの権限両面でちゃんと調べていない。それじゃぁ分かるわけないな。
そんな感じ。
terraform import について何も書いてないな。
新規に追加された Static Web Apps も当たり前にインポートできたのですごいけれど特別な感想がない。
でも、そうやって何事もなく動くのが一番すごいことではある。
すごい!!