演習 - GitHub Actions を使用して CI/CD 作業の一環として ARM テンプレートをデプロイする
ここでは、GitHub Actions ワークフローから Azure Resource Manager (ARM) テンプレートをデプロイします。
重要
この演習は、Microsoft Learn 環境の外部で実行します。 この演習では、独自の Azure サブスクリプションが必要であり、料金が発生する可能性があります。 これは、サンドボックス サブスクリプションではサポート されていない サービス プリンシパルを作成する必要があるために必要です。 Azure サブスクリプションをまだお持ちでない場合は、開始する前に 無料アカウント を作成してください。
GitHub アカウントとリポジトリを作成する
まず、GitHub アカウントを持っていない場合は、 GitHub アカウントの作成ページで今すぐ作成します。 (無料です。)
アカウントを作成したら、サインインして新しいリポジトリを作成します。このリポジトリでは、テンプレートをコードとしてのインフラストラクチャ (IaC) モデルの一部として保持できます。 リポジトリ (業界では一般に リポジトリ と呼ばれます) を作成するには、次の手順に従います。
GitHub サイト上の任意のページの右上隅にある + ドロップダウン メニューを使用し、[ 新しいリポジトリ] を選択します。 または、緑色の [ リポジトリの作成 ] ボタン (存在する場合) を選択します。
リポジトリの短い覚えやすい名前を入力します。 たとえば、 Deploy-ARM-Template を使用します。 必要に応じて、リポジトリの説明を追加します。 たとえば、 GitHub Actions で初めての ARM テンプレートのデプロイを使用します。
リポジトリの可視性設定を選択します。 パブリック リポジトリには、インターネット上の誰でもアクセスできます。 プライベート リポジトリには、ユーザーと明示的にアクセスを共有しているユーザーのみがアクセスできます。 どちらでもこの演習に使えます。
[ 次を使用してこのリポジトリを初期化する] で、[ README ファイルの追加] を選択します。
[Create repository] (リポジトリの作成) を選択します。
リポジトリを作成し、README ファイルで初期化しました。 テンプレートとテンプレート パラメーター ファイルをリポジトリにコミットします。
注
README ファイルは、プロジェクトの詳細を説明したり、プロジェクトのインストール方法や使用方法などのドキュメントを追加したりするのに最適な場所です。 README ファイルの内容は、リポジトリのフロント ページに自動的に表示されます。
ARM テンプレート ファイルをリポジトリにコミットする
GitHub で、リポジトリのメイン ページに移動します。
ファイルの一覧の上にある [ ファイルの追加 ] ドロップダウン リストで、[ 新しいファイルの作成] を選択します。
[ファイル名] フィールドに、テンプレートの名前と拡張子を入力します。 この演習では 、azuredeploy.jsonという 名前を使用します。 次のテンプレートをコピーして、新しい GitHub ファイルに貼り付けます。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "VnetName": { "type": "string", "defaultValue": "VNet-001", "metadata": { "description": "Virtual Network Name" } }, "CostCenterIO": { "type": "string", "defaultValue": "12345", "metadata": { "description": "Cost Center IO number for cross billing" } }, "OwnerName": { "type": "string", "defaultValue": "John Smith", "metadata": { "description": "Name of the stakeholder responsible for this resource" } } }, "variables": {}, "resources": [ { "apiVersion": "2018-10-01", "type": "Microsoft.Network/virtualNetworks", "name": "[parameters('VnetName')]", "___location": "[resourceGroup().___location]", "tags": { "CostCenter": "[parameters('CostCenterIO')]", "Owner": "[parameters('OwnerName')]" }, "properties": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/16" ] }, "enableVmProtection": false, "enableDdosProtection": false, "subnets": [ { "name": "subnet001", "properties": { "addressPrefix": "10.0.0.0/24" } }, { "name": "subnet002", "properties": { "addressPrefix": "10.0.1.0/24" } } ] } } ] }
[ 新しいファイルのコミット ] セクションに説明を追加し、[ 新しいファイルのコミット ] を選択してリポジトリに保存します。
GitHub Actions と Azure サブスクリプションの間で認証を構成する
GitHub Actions を使用してリソースを Azure にデプロイするには、Azure サービス プリンシパルを作成し、テンプレートで定義されているリソースを作成するためのアクセス許可を付与する必要があります。 この手順は、サブスクリプションにサインインした後、Azure portal の Azure Cloud Shell セクションで実行します。
サービス プリンシパルを作成する
GitHub Actions ワークフローのプリンシパルが Azure リソースをデプロイするには、適切な組み込み共同作成者が必要です。
次の Azure CLI スクリプトは、Azure リソース グループで共同作成者のアクセス許可を持つ Azure サービス プリンシパルを生成する方法を示しています。 このリソース グループは、ワークフローが ARM テンプレートで定義されているリソースをデプロイする場所です。
projectName="GitHubActionExercise"
___location="eastus"
resourceGroupName="${projectName}-rg"
appName="http://${projectName}"
# Create the resource group
az group create --name $resourceGroupName --___location $___location
# Store the resource group ID in a variable
scope=$(az group list --query "[?contains(name, '$resourceGroupName')].id" -o tsv)
# Create the service principal with contributor rights to the resource group we just created
az ad sp create-for-rbac --name $appName --role Contributor --scopes $scope --sdk-auth
ポータルで、サブスクリプションにサインインしているときに Cloud Shell アイコンを選択して、ページの下部にあるシェルを開きます。
シェルで、前のコードを使用してサービス プリンシパルを作成します。 次の結果が得られます。 GitHub でシークレットを構成するときに必要になるため、結果の JSON 部分 (次のスクリーンショットの赤いボックスの内容) をコピーします。
GITHub で次の手順を実行して、JSON 出力をコピーし、GitHub リポジトリ内に GitHub シークレットとして格納します。GitHub リポジトリから [ 設定] タブを選択します。左側のメニューから[ シークレット ]ドロップダウンを選択し、[ Codespaces]\(コードスペース\) を選択します。
次の値を入力し、[ シークレットの追加] を選択します。
- 名前: AZURE_CREDENTIALSを入力 します。
- シークレット: 先ほどコピーした JSON 出力を貼り付けます。
ワークフローで認証を指定するには、この情報が必要です。
ワークフローを作成する
ワークフロー ファイルは、リポジトリのルートにある .github/workflows フォルダーに格納する必要があります。 ワークフロー ファイル拡張子は、.ymlまたは .yaml のいずれかです。
ワークフロー ファイルを作成し、そのファイルをリポジトリにプッシュ/アップロードできます。 または、次の手順を使用して GitHub インターフェイスで作成することもできます。
GitHub リポジトリから、上部のメニューから [アクション] を選択し、[ 自分でワークフローを設定する] を選択します。
main.ymlの代わりに別の名前を使用する場合は、ワークフロー ファイルの名前を変更します。 たとえば、deployARMTemplate.ymlを使用 します。
.yml ファイルの内容を次のコードに置き換えます。
注
GitHub Marketplace には、ARM テンプレートのデプロイに使用できるカスタムビルドアクションがいくつかあります。 このモジュールでは、 Azure Resource Manager (ARM) テンプレートのデプロイと呼ばれるマーケットプレース プロバイダーを使用します。
name: Deploy ARM Template on: push: branches: - main env: AZURE_SUBSCRIPTION_ID: << Subscription Id >> # set this to your Azure Subscription Id AZURE_RESOURCE_GROUP: GitHubActionExercise-rg # set this to your target resource group jobs: deploy-virtual-network-template: runs-on: ubuntu-latest steps: - name: Checkout source code uses: actions/checkout@main - name: Login to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Deploy ARM Template uses: azure/arm-deploy@v1 with: scope: resourcegroup subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }} resourceGroupName: ${{ env.AZURE_RESOURCE_GROUP }} template: ./azuredeploy.json
ワークフロー ファイルには 3 つのセクションがあります。
name
: ワークフローの名前。on
: ワークフローをトリガーする GitHub イベントの名前。 このワークフローは、プッシュ イベントがメイン ブランチ上にあり、メイン ブランチ上の少なくとも 1 つのファイルを変更するときにトリガーされます。jobs
: ワークフロー実行は、1 つ以上のジョブで構成されます。deploy-virtual-network-template
という名前のジョブが 1 つだけあります。 このジョブには 3 つのステップがあります。- ソース コードを確認してください。
- Azure にサインインします。
- ARM テンプレートをデプロイする。
重要
式
creds: ${{ secrets.AZURE_CREDENTIALS }}
のシークレット名が、リポジトリの設定に保存したシークレットの名前と一致することを確認します。 また、Deploy ARM Template
ステップの ARM テンプレート名template: $GITHUB_WORKSPACE/azuredeploy.json
、前にリポジトリに保存したものと一致することも確認します。注
デプロイ資格情報を構成したときに上記の Azure CLI コードを使用した場合は、リソース グループ名を
GitHubActionExercise-rg
する必要があります。 生成されたリソース グループ名は、プロジェクト名にrg
を付け加えたものです。[ コミットの開始] を選択します。 必要に応じて、コメントと説明を追加します。
[メイン ブランチに直接コミット] が選択されていることを確認し、[新しいファイルのコミット] (または [変更のコミット] を選択します)。
ワークフロー ファイルが作成され、リポジトリのメイン ブランチにコミットされると、ワークフローのトリガーはメイン ブランチへのコミット/プッシュであるため、ワークフローが自動的に開始されます。
on: push: branches: - main
リポジトリに移動し、ワークフローの状態を確認します。
デプロイをチェックする
ワークフローが完了したら、Azure portal に移動してデプロイの状態を確認します。
左側のウィンドウで、 リソース グループ>GitHubActionExercise-rg を選択します。 [ デプロイ ] ウィンドウで、デプロイが成功したことを確認します。