しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Terraform

Terraform Provider for AzureRM を v4 系にアップグレードする

Terraform Provider for AzureRM のウォッチャーであれば v4 のリリースが近いことを知っていたと思いますが、v3 のリリースノートで v4 での変更点の Opt-in が紹介されてから意外に早くリリースされました。正直なところ目立った新機能とかはなく Provider…

Azure App Service に追加された Unique Default Hostname (Preview) を Bicep / Terraform でも試した

ほぼ Build 2024 直後に公開された機能で、割と今更という感じはあるのですが App Service の Unique Default Hostname がプレビューとなったので試しました。挙動としては Container Apps や Front Door のホスト名に近く、ランダムな文字列 + リージョンが…

非推奨となった Terraform リソースからのマイグレーションを安全に行いたい

Azure Provider に限った話ではないと思うのですが、正直 Azure Provider はリソースの非推奨化が多い気がするので書いています。きっかけとしては直近の Azure Provider の更新で azurerm_static_site は非推奨になって azurerm_static_web_app が追加され…

Terraform と Azure DNS を使って Azure Front Door への Apex ドメイン割り当てを自動化する

Azure Front Door は Azure DNS のような Alias record set に対応したサービスと組み合わせると、Apex ドメインを割り当てて利用することが可能です。もちろん Managed Certificate として必要な証明書も自動で発行されるので HTTPS を無料で有効化できます…

Terraform Cloud に追加された Dynamic Provider Credentials を Azure Provider で試した

今朝に発表された Terraform Cloud のアップデートで OpenID Connect を利用した認証情報の取得に対応したようです。Dynamic Provider Credentials という名前で紹介されています。GitHub Actions ではほぼ OIDC のみを使うようになりましたが、一番強い権限…

複数の Azure AD テナントに対応した Service Principal を作成して Terraform から利用する

App Service と Azure AD B2C というように Azure AD テナントが分かれている場合には、いつも通りの Service Principal を使った方法だと、当然ながらどちらかのテナントしか操作できません。以前書いたように Azure AD B2C 側のアプリケーションを管理しつ…

GitHub Actions の OpenID Connect と Azure AD を利用して Client Secret の管理を不要にする

激しく今更ですが、GitHub Actions の OpenID Connect 対応を利用して Azure リソースや Azure AD 自身へのアクセスを Client Secret 無しで行ってみます。ぶっちゃけ全ては watahani さんのブログを読んでもらえれば良いのですが、少し時間が経過したことも…

Azure AD B2C のカスタムポリシー利用に必要なアプリケーションを Terraform を使って登録する

最近の Azure AD B2C は組み込みユーザーフローの機能がかなり増えているので、ある程度のことなら Azure Portal からの設定で実現できますが、結局は IEF を使ったカスタムポリシーが必要になるケースも多いです。Azure AD B2C のカスタムポリシーは触った…

Terraform Provider for Azure AD を使って Azure AD B2C で利用するアプリケーションを管理する

未だ個人的な Terraform Provider for Azure AD ブームが続いているので、今回は Azure AD B2C の管理を目的に利用してみます。Azure サブスクリプションが紐づく Azure AD テナントとは異なり、サブスクリプションは持たず独立したテナントとなるので、扱い…

Azure AD と App Service Authentication を使って Web App と Web API を保護する

Azure AD 認証と App Service Authentication を組み合わせて、Web App へのログインを行いつつ同時に発行されるアクセストークンを利用して、別に用意された API を実行したいというシナリオが存在します。Microsoft Graph API を呼び出す場合はアプリケー…

Azure AD における Client Secret の期限切れ問題を Terraform でスマートに解決する

Azure AD にアプリケーションや Service Principal を作成すると大体必要になる Client Secret ですが、有効期限を持っているので期限が切れる前に新しい Client Secret を生成する必要があります。昔は無期限で作成することも出来ましたが、今はセキュリテ…

Managed Identity への Microsoft Graph アクセス権の付与を Terraform Azure AD Provider で行う

前回は Terraform Provider for Azure AD を使って Azure AD アプリケーションの登録を行って、App Service Authentication への設定まで全て自動化してみましたが、今回は App Service で有効化された Managed Identity に対して特定の API アクセス権を追…

Terraform Azure AD Provider を使って App Service の作成と同時に Azure AD 認証を有効化する

個人的に App Service / Azure Functions で頻繁に使う機能 1,2 位を争うのが App Service Authentication で、Azure サブスクリプションが紐づいている Azure AD テナントのユーザーのみアクセス許可したい場合には、コードの修正なしで Azure Portal から…

Terraform Provider for Azure の開発環境を VS Code Dev Container で構築する

Azure 環境での IaC には Terraform をメインで使っていますが、ARM Template や Bicep と異なり Terraform は ARM REST API ベースで構築されているので、新しい機能の場合は Azure SDK を更新しつつ Provider に機能を追加というステップを踏む必要があり…

Azure Pipelines を使った Terraform 1.0 移行時の注意点

先日ついに Terraform が 1.0 に到達して GA したというニュースが飛び込んできましたね。個人的には Terraform は 1.0 にならない系のプロダクトだと思っていましたが違っていたようです。Today we are announcing the GA release of #Terraform 1.0. This …

Terraform Cloud を使った Azure リソースの管理を試した

今後も Terraform を使っていくことが多そうですが、状態ファイルの意識した CI / CD パイプラインの作成は地味に手間です。その辺りを簡単にするために Terraform Cloud を試してみました。正直 GitHub Actions や Azure Pipelines で良いと思っていました…

Windows と Ubuntu (WSL 2) で VS Code Terraform 拡張の入力補完を使えるようにする

Terraform 定義を書く量が増えてきたので、快適な環境のために Terraform 定義の入力補完が動くように整えることにしました。激しく今更感がありますが、これまで真面目にセットアップせずに使っていました。ARM Template の DSL である Bicep が微妙に注目…

Azure Pipelines だけ使っているプロジェクトを GitHub Actions に移行している話

最近は Azure Pipelines だけを使っている GitHub 上のプロジェクトを、徐々に GItHub Actions に移行しています。Azure Pipelines は Approvals や Gates などが便利ですが、OSS で一人開発しているような場合は GitHub Actions に寄せておいた方が都合が良…

Terraform の Multiple Provider を利用して複数の Azure Subscription に対する構築を行う

Azure の Subscription は割と気軽に作れるので、メータリングを分ける目的などで Subscription を複数使っているケースもあると思います。そういった時には Multiple Provider を使うといい感じに解決できます。公式のサンプルだと AWS のリージョン毎に Pr…

Terraform Provider for Azure v2.3.0 で Service Tags の Data Source が追加されたので試した

今日 Azure Resource Manager 向けの Terraform Provider の新バージョンがリリースされていたので、リリースノートを眺めていたら Service Tags を取るための Data Source が追加されていました。Service Tags を取るには巨大な JSON を読み取るしかないと…

Terraform Provider for Azure を 2.0 へアップグレードする

少し前に Terraform Provider for Azure を 2.0 へアップグレードしようとして、軽い気持ちでバージョンを上げたらいきなりエラーが出たり、terraform plan で予期しない変更が大量に出て心が折れました。即オチ 2 コマみたいなツイートをしてしまうぐらいで…

Terraform と Azure Pipelines を使って複数の環境を管理する

以前に Terraform と Azure Pipelines を使ってシンプルに App Service を作るのを試しましたが、現実的にはあんな単純な定義で済むはずはなく、開発環境や本番環境といった複数の環境への対応が必要になってきます。実際に Terraform でインフラ周りの管理…

既存の Azure Resource を Terraform での管理に切り替える

最初から Terraform を使って Azure のリソースを作成できれば問題ないですが、多かれ少なかれ既に手動で作成済みのリソースがあって、それを Terraform 管理下に入れたいケースが多いと思います。既に Azure と Azure Pipelines での Terraform の利用につ…

Terraform と Azure Pipelines を使って App Service / Azure Functions をコード化して管理する

ぼちぼち ARM Template を JSON で書くのが限界と思い始めてきたので、Terraform を使って Azure リソースの管理をやっていこうという気持ちになりました。Terraform で使われている HCL は JSON で書く ARM Template よりも読み書きがしやすいのと、CI/CD …