本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「タグ付け自動化で管理コスト削減!」を再編集したものです。
今回はAzure Functionsを使用してリソースの作成者名を自動でタグ付けしていこうと思います。
この記事は、Using Event Grid/Azure Functions to automatically assign tag:owner to Azure resourcesを参考にしたものとなります。
それでは早速作成していきましょう。
Azure PortalからAzure Functionsを作成する
まずはPortalからAzure Functionsを作成していきます。
ランタイムスタックをPowerShell Coreとして、そのほかはデフォルトのままで作成します。
作成できたら、作成したリソースへ移動し左ブレードのIDからシステム割り当てマネージドIDを有効にします。
マネージドIDを有効にできたらロールを割り当てます。
ここまでできたらPortalでのAzure Functionsの設定は完了です。
VSCodeから関数を作成する
Azure FunctionsではPortalやVSCodeから関数を作成できます。
今回使用するEvent Grid TriggerはPortalからの作成ができないため、VSCodeを使用して作成していきます。
VSCodeでAzure Toolsの拡張機能をインストールしておきます。
拡張機能のAzureからWORKSPACEにあるAzure FunctionsのアイコンをクリックしCreate Function...をクリックします。
保存先のフォルダを選択したら言語はPowerShellを選択し、テンプレートはAzure Event Grid triggerを選択します。
名前は何でもよいですがわかりやすい名前にしておきましょう、私はAutoAssignCreatorにします。
最後にファイルを開く場所を選択すると作成されたファイルが開かれます。
作成されたファイルの編集
まずはrun.ps1の中身を編集していきます。
run.ps1に以下のコードを記述します。
param($eventGridEvent, $TriggerMetadata) # Managed Identityを使用してログイン Connect-AzAccount -Identity # リソース作成者の名前を取得 $caller = "{0} ({1})" -f $eventGridEvent.data.claims.name, $eventGridEvent.data.claims."http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" Write-Host "Caller: $caller" $resourceId = $eventGridEvent.data.resourceUri Write-Host "ResourceId: $resourceId" # リソース作成者名またはリソースIDがnullの場合実行を中止 if (($null -eq $caller) -or ($null -eq $resourceId)) { Write-Error "ResourceId or Caller is null" } $ignore = @("providers/Microsoft.Resources/deployments", "providers/Microsoft.Resources/tags") # トリガー内容が$ignoreに指定されたケースの場合実行を中止 foreach ($case in $ignore) { if ($resourceId -match $case) { Write-Error "Skipping event as resourceId contains: $case" } } $tags = (Get-AzTag -ResourceId $resourceId).Properties # リソース作成者名のタグがない場合にタグを追加 if (($null -eq $tags) -or ($null -eq $tags.TagsProperty) -or (!($tags.TagsProperty.ContainsKey('Creator')))) { $tag = @{ 'Creator' = $caller } Update-AzTag -ResourceId $resourceId -Operation Merge -Tag $tag Write-Host "Added creator tag with user: $caller" } else { Write-Host "Tag already exists" }
次に、requirements.psd1ファイルを編集し実行に必要となるPowerShell モジュールをインストールします(既存で記述されているコメントアウト部分は削除した状態で載せてます。あっても無くてもいいです)。
@{ 'Az.Accounts' = '2.*' 'Az.Resources' = '4.*' }
ここまでで一通りファイルの編集が終わりました。
最後に作成した関数をAzure Functionsにデプロイし、Azure Portalから設定を加えると完了です。
関数のデプロイ
それでは、作成した関数をAzure Functionsにデプロイしていきます
拡張機能のAzureからWORKSPACEにあるAzure FunctionsのアイコンをクリックしDeploy to Function App...をクリックします。
サブスクリプションの選択タブが出てくるので対象のサブスクリプションを選択し、デプロイ先のリソースを選択します。
最終確認が出てくるのでDeployをクリックするとデプロイが始まります。
デプロイが完了したらPortalからAzure Functionsに移動します。
Azure Functionsの概要画面の関数にデプロイした関数があればOKです。
実行前の最終準備
最後にイベントサブスクリプションを作成していきます。
先ほどのAzure Functionsの概要画面の関数からデプロイした関数に移動します。
左ブレードの統合からトリガーのEvent Grid Triggerをクリックすると右側にトリガーの編集タブが出てくるのでEvent Grid サブスクリプションの作成をクリックします。
以下のように設定します。
イベントサブスクリプションが作成できたら動作確認をしていきましょう。
動作確認
それでは動作確認のために適当なリソースを作成していきます。
私はリソースグループを作成しました。
タグが追加されるまで数分待つと、画像のように作成したリソースグループのタグに名前が追加されました!
これで動作確認は終了です。
まとめ
今回はAzure Functionsを使用してリソースに作成者の名前を自動でタグ付けしてみました。
テスト用の環境などは誰が作ったリソースなのか管理が面倒くさくなってしまいがちなのでなかなか便利なのではないでしょうか。
リソース管理に困っている方は是非参考にしていただければと思います。
久保颯涼/FIXER
プロフ画像は猫です。誰が何と言おうと猫です。猫が好きです。
この連載の記事
-
TECH
メタバースのメリットは? 実際の活用事例から考えてみる -
TECH
法人向け「Microsoft Entra ID P2ライセンス」を個人で購入する方法 -
TECH
環境ごとに異なるTerraformのバックエンド設定を効率化、override.tfの使い方 -
TECH
Azure FunctionsとAzureのサービスを連携させる方法 -
TECH
PlaywrightをAzure Functionsにデプロイして動かす方法 -
TECH
Windows Admin Centerとは? ― 2020年代の新しい運用管理のカタチ -
TECH
Logic Appsでリソースのサブスクリプションを移動させる方法+注意点 -
TECH
生成AIで大注目のOpen InterpreterとAzure CLIを使ってリソースを自動作成してみた -
TECH
AzureのvCpuクォータ制限解除、爆速に改善されていて草 -
TECH
AzureのApplication Insightsでお手軽にお安く? HTTP監視しよう - この連載の一覧へ