演習 - GitHub Actions を使用して、CI/CD 作業の一部として ARM テンプレートをデプロイする
ここでは、GitHub Actions ワークフローから Azure Resource Manager (ARM) テンプレートをデプロイします。
重要
この演習は、Microsoft Learn 環境外で実行します。 この演習を行うには、独自の Azure サブスクリプションが必要です。また、料金が発生することがあります。 サンドボックス サブスクリプションではサポートされて "いない" サービス プリンシパルを作成する必要があるため、これが必要です。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
GitHub のアカウントとリポジトリを作成する
まず、GitHub アカウントをお持ちでない場合は、GitHub アカウント作成ページ上で今すぐ作成してください。 (無料です)。
アカウントを作成したら、サインインして新しいリポジトリを作成します。ここには、コードとしてのインフラストラクチャ (IaC) モデルの一部として、テンプレートを保持することができます。 リポジトリ (業界内での通称は "リポ") を作成するには、次の手順に従います。
GitHub サイトの任意のページの右上隅にある + ドロップダウン メニューを使用して、[New repository] (新規リポジトリ) を選択します。 または、緑色の [Create repository] (リポジトリの作成) ボタンがあれば、それを選択します。
短くて覚えやすいリポジトリ名を入力します。 たとえば、Deploy-ARM-Template を使用します。 必要に応じて、リポジトリの説明を追加します。 たとえば、[Deploying my first ARM template with GitHub Actions] (GitHub アクションを使用した最初の ARM テンプレートのデプロイ) を使用します。
リポジトリの表示設定を選択します。 パブリック リポジトリには、インターネット上の誰でもアクセスできます。 プライベート リポジトリには、自分と、自分が明示的にアクセスを共有する相手のみがアクセスできます (この演習ではどちらも機能します)。
[次でこのリポジトリを初期化する] で [README ファイルを追加する] を選択します。
[Create repository] (リポジトリの作成) を選択します。
リポジトリを作成し、README ファイルで初期化しました。 次に、テンプレートとテンプレート パラメーター ファイルをリポジトリにコミットします。
Note
README ファイルは、プロジェクトの詳細を説明したり、プロジェクトのインストール方法や使い方などのドキュメントを追加したりするために適した場所です。 README ファイルの内容は、リポジトリのフロント ページに自動的に表示されます。
ARM テンプレート ファイルをリポジトリにコミットする
GitHub で、リポジトリのメイン ページに移動します。
ファイルの一覧の上にある [Add file] (ファイルの追加) ドロップダウン リストで、[Create new file] (ファイルの新規作成) を選択します。
ファイル名フィールドに、テンプレートの名前と拡張子を入力します。 この演習では、名前 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" } } ] } } ] }
[Commit new file] (新しいファイルのコミット) セクションに説明を追加し、[Commit new file] (新しいファイルのコミット) をクリックしてレポジトリに保存します。
GitHub Actions と Azure サブスクリプション間の認証を構成する
GitHub Actions を使用してリソースを Azure にデプロイするには、Azure サービス プリンシパルを作成し、テンプレートで定義されたリソースを作成するためのアクセス許可を付与する必要があります。 この手順は、ご利用のサブスクリプションにサインインした後、Azure portal の Azure Cloud Shell セクション内で実行します。
サービス プリンシパルを作成する
Azure リソースをデプロイする GitHub Actions ワークフローのプリンシパルには、適切な組み込みの共同作成者が必要です。
次の 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
サブスクリプションにサインインした状態で、portal で [Cloud Shell] アイコンをクリックすると、ページの下部にシェルが開きます。
シェルで、前述のコードを使用して、サービス プリンシパルを作成します。 次の結果が得られます。 この結果の JSON の部分 (次のスクリーンショット内で、赤いボックスで囲まれた内容) をコピーします。GitHub 内でシークレットを構成する際にこれが必要になるためです。
この JSON 出力をコピーし、GitHub 内で次の手順を実行して、GitHub リポジトリ内に GitHub シークレットとして保存します。GitHub リポジトリで、[Settings] タブを選択します。左側のメニューで [Secrets] ドロップダウンを選択し、[Codespaces] を選択します。
次の値を入力し、[Add secret] (シークレットの追加) を選択します。
- [名前]: 「AZURE_CREDENTIALS」と入力します。
- シークレット: 先ほどコピーした JSON 出力を貼り付けます。
ワークフロー内で認証を指定するには、この情報が必要です。
ワークフローを作成する
ワークフロー ファイルは、リポジトリのルートにある .github/workflows フォルダーに保存する必要があります。 ワークフロー ファイルの拡張子には、 .yml または .yaml を指定できます。
ワークフロー ファイルは、作成して、そのファイルをリポジトリにプッシュまたはアップロードするか、 次の手順を使用して GitHub インターフェイスで作成することができます。
GitHub リポジトリのトップ メニューから [Actions] を選択し、[Set up a workflow yourself] (ワークフローを自分でセットアップする) を選択します。
main.yml の代わりに別の名前を使用する場合は、ワークフロー ファイルの名前を変更します。 たとえば、deployARMTemplate.yml を使用します。
.yml ファイルの内容を次のコードに置き換えます。
Note
GitHub Marketplace には、ARM テンプレートをデプロイするために使用できるいくつかのカスタムビルド アクションが用意されています。 このモジュールでは、Deploy Azure Resource Manager (ARM) Template というマーケットプレース プロバイダーを使用します。
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
手順のtemplate: $GITHUB_WORKSPACE/azuredeploy.json
の ARM テンプレート名と、先ほどリポジトリに保存したものが一致することを確認してください。Note
デプロイの資格情報を構成したときに上記の Azure CLI コードを使用した場合、リソース グループ名は
GitHubActionExercise-rg
になります。 生成されるリソース グループ名は、プロジェクト名にrg
が追加された名前になります。[Start commit](コミットの開始) を選択します。 必要に応じて、コメントと説明を追加します。
確実に [Commit directly to the main branch](メイン ブランチに直接コミットする) を選択し、[Commit new file](新しいファイルのコミット) (または [Commit changes](変更のコミット)) をクリックします。
ワークフローのトリガーはメイン ブランチへのコミットまたはプッシュであるため、ワークフロー ファイルが作成され、リポジトリのメイン ブランチにコミットされると、ワークフローは自動的に開始されます。
on: push: branches: - main
リポジトリにアクセスして、ワークフローの状態を確認します。
デプロイをチェックする
ワークフローが完了したら、Azure portal に移動して、デプロイの状態を確認します。
左側のウィンドウで、[リソース グループ]>[GitHubActionExercise-rg] を選択します。 [デプロイ] ウィンドウで、デプロイが成功したことを確認します。