やること
GitHub Actions から Bicep で定義した Azure リソースをデプロイします。とりあえずシンプルに App Service Plan だけデプロイしてみます。なんとなく全部コマンドだけでやります。
バージョン情報
> gh --version
gh version 2.2.0 (2021-10-25)
> az --version
azure-cli 2.29.2
> $PSVersionTable.PSVersion.ToString()
7.1.5
> code --version
1.61.2
構築
PowerShell から以下のコマンドを実行していきます。
# Azure にログイン
az login
# GitHub にログイン
gh auth login
# デプロイ用リソースグループの作成
$resourceGroupName = "BicepTestRG"
$resourceGroup = az group create --name $resourceGroupName --location japaneast
# デプロイ実行用サービスプリンシパルの作成
$servicePrincipalName = "BicepTestApp"
$resourceGroupId = ($resourceGroup | ConvertFrom-Json).id
$servicePrincipal = az ad sp create-for-rbac --name $servicePrincipalName --scopes $resourceGroupId --role Contributor --sdk-auth
# GitHub Secret に登録するための情報を取得
$secretBody = ($servicePrincipal | ConvertFrom-Json) | select clientId,clientSecret,subscriptionId,tenantId | ConvertTo-Json
# Repository をクローンするフォルダに移動
cd "C:\GitHub"
# GitHub Repository 作成 & クローン
$repositoryName = "BicepTest"
gh repo create $repositoryName --private --confirm
# Repository フォルダに移動
cd $repositoryName
# GitHub Secret を追加
$secretBody | gh secret set AZURE_CREDENTIALS
# Visual Studio Code で開く
code .
VSCode で main.bicep
を作成します。
BicepTest/main.bicep
resource appServicePlan 'Microsoft.Web/serverfarms@2021-02-01' = {
name: 'BicepTestAppServicePlan'
location: 'japaneast'
sku: {
name: 'F1'
}
}
.github
フォルダとその配下に workflows
フォルダを作成します。workflows
フォルダ配下に workflow.yml
を作成します。
BicepTest/.github/workflows/workflow.yml
name: deploy-bicep-test
on: [workflow_dispatch]
env:
AZURE_RESOURCEGROUP_NAME: BicepTestRG
jobs:
deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/arm-deploy@v1
with:
deploymentName: ${{ github.run_number }}
resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
template: ./main.bicep
コミットしてプッシュしておきます。
実行
再び PowerShell で以下のコマンドを実行します。
# ワークフロー実行
gh workflow run workflow.yml
# 実行状況確認
gh run list --workflow=workflow.yml
# リソース確認
az appservice plan list