Azure Reposに置かれたARMテンプレートをAzure PipelineでAzureにデプロイする
Azure(Piplene)によるAzure(Reposからのデプロイ)のためのAzure(の記事)です。
Azure Repos に ARM テンプレートを置く
今回は一連の流れを確認するために、シンプルなストレージを1つデプロイするARMテンプレートを作成してAzure ReposにPushします。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountsName": {
"defaultValue": "iacteststorage2022",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-06-01",
"name": "[parameters('storageAccountsName')]",
"location": "japaneast",
"sku": {
"name": "Standard_LRS",
"tier": "Standard"
},
"kind": "StorageV2"
}
]
}
Azure Pipeline をセットアップする
Pipelineを新規作成し、コードの場所はARMテンプレートをプッシュしたリポジトリを選択、続いて「Starter pipeline」を選択します
yamlの編集画面が表示されたら画面右側のタスク検索画面に「ARM」と入力し、「ARM template deployment」を選択します。
(タスク検索画面が表示されていない場合は「Show assistant」をクリックして表示できます)
セットアップ画面でAzureとの認証等を行いますが、画面通りに操作すると特に迷うことは無いと思います。「Add」をクリックするとyamlが生成されます。
yamlはこのようになります。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'xxxxxxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxx'
subscriptionId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx'
action: 'Create Or Update Resource Group'
resourceGroupName: 'IaCTest'
location: 'Japan East'
templateLocation: 'Linked artifact'
csmFile: 'template.json'
deploymentMode: 'Incremental'
ここで重要なのは templateLocation
を「Linked artifact」にすることです。これでAzure Reposのファイルを参照できます。
csmFile
でRepos内でのARMテンプレートまでのパスを記載します。(今回の場合はrootにあるためファイル名のみになります)
Azure Pipeline を実行
Pipelineの構成が完了したら「Save & Run」ボタンなどからPipelineを実行します。jobが正常に完了すると以下のような画面になります。
Azure を確認
ARMテンプレートで指定したリソースグループを見ると正常にデプロイできていることが確認できます。
最後に
今回は簡単な例で行って見ましたが、環境等による出し分けは ARM テンプレートのパラメーターファイルや Azure Pipeline の変数などを使用することで実現可能です。
また今回は試していませんが、人間は書きやすい Bicep で書いてPipelineでそれをビルドして生成されたARMテンプレートをデプロイするなども可能です(多分)。
今回使用したARM template deploymentタスクのパラメーターの詳細は以下の公式ドキュメントに詳細な記載があります。
Discussion