Azure Container Apps のMSIを試す
概要
今朝起きたら、ACA[1]の更新が出てると教えもらい。どうやら、MSI(待望の)がサポートされるようになった[2]らしいと聞き、ちょっと試してみた。
コードはgithub:aca-msi01に置いた。
MSI自体は、Azureの他のリソースと違いは無く同じような感じでデプロイできるので、あまり言うことはなく。少し配慮する点があるので、それだけをメモとして残しておく。
デプロイとRole Assignment
MSI(System Managed Identity)は、'Microsoft.App/containerApps
(以下アプリ) と、アクセス対処のリソースを繋ぐ形になる。アプリは、1つもしくは復数のコンテナで構成され[3]、構成の変更や増減は割と頻繁に行なわれることが想定される。どのアプリがどのリソースにアクセスすることを許可するかは、MSIで決めるという位置付けにする。なので、今回は、アプリをデプロイするモジュールcontainer.bicepと、割当て(Role Assignments)を行うモジュールroleAssignment.bicepを分け、デプロイはこの2つをまとめてmain.bicepで行うようにした。
module containerApps 'container.bicep' = {
name: 'containerApps'
params: {
location: location
containerAppName: containerAppName
containerImage: containerImage
....
transport: transport
allowInsecure: allowInsecure
env: env
acrName: acrName
}
}
module roleAssignment 'roleAssignment.bicep' = {
name: 'roleAssignment'
params: {
roleDefinitionResourceId: role.id
containerAppPrincipalId: containerApps.outputs.principalId
containerAppResourceId: containerApps.outputs.id
storageAccountName: storageAccountName
}
}
この書き方だと、異なったリソースへのアクセス権をもったアプリを同じbicepでデプロイ出来ないので、もう少し工夫する必要があるように思うが。とりあえず、こうしておけば、az cli 一発でデプロイできる。
こんな感じ
deploy-apps: ## deploy msi check app
envsubst < web/env.json.template > web/env.json
az deployment group create -g $(RESOURCE_GROUP) -f ./deploy-app/main.bicep \
-p \
containerAppName=msicheck \
environmentName=$(ENVIRONMENT_NAME) \
containerImage=$(ACR_NAME).azurecr.io/msicheck:latest \
containerPort=5000 \
acrName=$(ACR_NAME) \
storageAccountName=$(STORAGE_ACCOUNT_NAME) \
roleDefinitionName=$(STORAGE_ACCOUNT_CONTRIBUTOR_ROLE) \
env=@web/env.json
実行コード側
こちらは普通のMSIのコード。azure go sdk のazure-sdk-for-go/sdk/azidentity
(https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity@v0.14.0) を使っている。DefaultAzureCredentialを使うとデフォルト設定で、フォールバックしながら、認証元を探してく、その中にMSIが入っている。
なかなか便利(だと思う)なのだが、バージョン安定性が低い。今回は、azcore 0.23.0に、azblob が付いてこれてないらしく。(このあたりに事情がかいてある)
とりあえず前のバージョンを使うことにした。[4]
最後に
Azure Container Apps なかなか良さげでお勧めです。もちろん、bicepも。
-
Azure Container Apps を略してACAと呼ぶそうです。 ↩︎
-
https://kogelog.com/2022/04/14/20220414-01/
Public preview: Managed identities support in Azure Container Apps https://azure.microsoft.com/ja-jp/updates/public-preview-managed-identities-support-in-azure-container-apps/ ↩︎ -
アプリは、k8sでいうPODのような位置付けになり、新しいAPIやサービスを作ると増減することを想定している。場合によっては3桁になる場合もあるだろう。 ↩︎
-
これ、Migrate azblob to latest version of azcore #17528が来たら直るんじゃないかと思っている。 ↩︎
Discussion