チュートリアル: ARM テンプレートを使用して Azure 静的 Web アプリを発行する

この記事では、Azure Resource Manager テンプレート (ARM テンプレート) を使用して Azure Static Web Apps をデプロイする方法を示します。

このチュートリアルで学習する内容は次のとおりです。

  • Azure Static Web Apps 用の ARM テンプレートを作成する
  • Azure Static Web Apps インスタンスを作成するために ARM テンプレートをデプロイする

前提条件

GitHub 個人用アクセス トークンを作成する

repositoryToken は ARM テンプレートのパラメーターの 1 つで、これにより ARM デプロイ プロセスが、静的サイトのソース コードを保持している GitHub リポジトリとやりとりできるようになります。

  1. GitHub アカウント プロファイル (右上隅) で、 [Settings](設定) を選択します。

  2. [Developer Settings](開発者設定) を選択します。

  3. [Personal Access Tokens](個人用アクセス トークン) を選択します。

  4. [Generate New Token](新しいトークンの生成) を選択します。

  5. このトークンの名前を [名前] フィールドに指定します (例: myfirstswadeployment)。

  6. トークンの [有効期限] を選択します。既定値は 30 日です。

  7. 次の "スコープ" を指定します: repo、workflow、write:packages

  8. [Generate token](トークンの生成) を選択します。

  9. 後で使用するために、トークンの値をコピーしてテキスト エディターに貼り付けます。

重要

このトークンは必ずコピーし、安全な場所に格納してください。 このトークンを Azure Key Vault に格納し、自分の ARM テンプレートからアクセスすることを検討してください。

GitHub リポジトリを作成する

この記事では、簡単に作業を開始できるように、GitHub テンプレート リポジトリを使用します。 このテンプレートには、Azure Static Web Apps を使用してデプロイするために使用されるスターター アプリが含まれます。

  1. 新しいリポジトリを作成するために、次の場所に移動します。

    1. https://github.com/staticwebdev/vanilla-basic/generate
  2. リポジトリに myfirstswadeployment という名前を付けます。

    Note

    Azure Static Web Apps で Web アプリを作成するには、少なくとも 1 つの HTML ファイルが必要です。 このステップで作成するリポジトリには、1 つの index.html ファイルが含まれます。

  3. [Create repository] (リポジトリの作成) を選択します。

    screenshot of the Create repository button.

ARM テンプレートを作成する

前提条件を満たしたら、次の手順として、ARM デプロイ テンプレート ファイルを定義します。

  1. ARM テンプレートを保持するための新しいフォルダーを作成します。

  2. 新しいファイルを作成し、azuredeploy.json という名前を付けます。

  3. 次の ARM テンプレート スニペットを azuredeploy.json に貼り付けます。

        {
            "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
            "contentVersion": "1.0.0.0",
            "parameters": {
                "name": {
                    "type": "string"
                },
                "location": {
                    "type": "string"
                },
                "sku": {
                    "type": "string"
                },
                "skucode": {
                    "type": "string"
                },
                "repositoryUrl": {
                    "type": "string"
                },
                "branch": {
                    "type": "string"
                },
                "repositoryToken": {
                    "type": "securestring"
                },
                "appLocation": {
                    "type": "string"
                },
                "apiLocation": {
                    "type": "string"
                },
                "appArtifactLocation": {
                    "type": "string"
                },
                "resourceTags": {
                    "type": "object"
                },
                "appSettings": {
                    "type": "object"
                }
            },
            "resources": [
                {
                    "apiVersion": "2021-01-15",
                    "name": "[parameters('name')]",
                    "type": "Microsoft.Web/staticSites",
                    "location": "[parameters('location')]",
                    "tags": "[parameters('resourceTags')]",
                    "properties": {
                        "repositoryUrl": "[parameters('repositoryUrl')]",
                        "branch": "[parameters('branch')]",
                        "repositoryToken": "[parameters('repositoryToken')]",
                        "buildProperties": {
                            "appLocation": "[parameters('appLocation')]",
                            "apiLocation": "[parameters('apiLocation')]",
                            "appArtifactLocation": "[parameters('appArtifactLocation')]"
                        }
                    },
                    "sku": {
                        "Tier": "[parameters('sku')]",
                        "Name": "[parameters('skuCode')]"
                    },
                    "resources":[
                        {
                            "apiVersion": "2021-01-15",
                            "name": "appsettings",
                            "type": "config",
                            "location": "[parameters('location')]",
                            "properties": "[parameters('appSettings')]",
                            "dependsOn": [
                                "[resourceId('Microsoft.Web/staticSites', parameters('name'))]"
                            ]
                        }
                    ]
                }
            ]
        }
    
    
  4. 新しいファイルを作成し、azuredeploy.parameters.json という名前を付けます。

  5. 次の ARM テンプレート スニペットを azuredeploy.parameters.json に貼り付けます。

        {
            "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
            "contentVersion": "1.0.0.0",
            "parameters": {
                "name": {
                    "value": "myfirstswadeployment"
                },
                "location": { 
                    "value": "Central US"
                },   
                "sku": {
                    "value": "Free"
                },
                "skucode": {
                    "value": "Free"
                },
                "repositoryUrl": {
                    "value": "https://github.com/<YOUR-GITHUB-USER-NAME>/<YOUR-GITHUB-REPOSITORY-NAME>"
                },
                "branch": {
                    "value": "main"
                },
                "repositoryToken": {
                    "value": "<YOUR-GITHUB-PAT>" 
                },
                "appLocation": {
                    "value": "/"
                },
                "apiLocation": {
                    "value": ""
                },
                "appArtifactLocation": {
                    "value": "src"
                },
                "resourceTags": {
                    "value": {
                        "Environment": "Development",
                        "Project": "Testing SWA with ARM",
                        "ApplicationName": "myfirstswadeployment"
                    }
                },
                "appSettings": {
                    "value": {
                        "MY_APP_SETTING1": "value 1",
                        "MY_APP_SETTING2": "value 2"
                    }
                }
            }
        }
    
  6. 次のパラメーターを更新します。

    パラメーター 必要な値
    repositoryUrl 自分の静的 Web アプリ用 GitHub リポジトリの URL を指定します。
    repositoryToken GitHub の PAT トークンを指定します。
  7. 次の手順でデプロイを実行する前に、更新を保存します。

デプロイを実行する

テンプレートをデプロイするには、Azure CLI または Azure PowerShell が必要です。

Azure へのサインイン

テンプレートをデプロイするには、Azure CLI と Azure PowerShell のいずれかにサインインします。

az login

複数の Azure サブスクリプションがある場合は、使用するサブスクリプションを選択します。 <SUBSCRIPTION-ID> を自分のサブスクリプション情報で置き換えます。

az account set --subscription <SUBSCRIPTION-ID>

リソース グループを作成する

テンプレートをデプロイするときは、関連リソースを格納するリソース グループを指定します。 デプロイ コマンドを実行する前に、Azure CLI または Azure PowerShell を使用してリソース グループを作成します。

Note

この記事の CLI の例は、Bash シェルを対象として記述されています。

resourceGroupName="myfirstswadeployRG"

az group create \
  --name $resourceGroupName \
  --location "Central US"

テンプレートのデプロイ

いずれかのデプロイ オプションを使用してテンプレートをデプロイします。


az deployment group create \
  --name DeployLocalTemplate \
  --resource-group $resourceGroupName \
  --template-file <PATH-TO-AZUREDEPLOY.JSON> \
  --parameters <PATH-TO-AZUREDEPLOY.PARAMETERS.JSON> \
  --verbose

Azure CLI を使用してテンプレートをデプロイする方法の詳細については、「ARM テンプレートと Azure CLI でリソースをデプロイする」を参照してください。

Web サイトを表示する

静的アプリのデプロイには 2 つの側面があります。 まず、アプリを構成する基になる Azure リソースをプロビジョニングします。 2 つ目は、アプリケーションをビルドして発行する GitHub Actions ワークフローです。

新しい静的サイトに移動する前にまず、デプロイ ビルドの実行が完了している必要があります。

Static Web Apps の概要ウィンドウには、Web アプリとの対話に役立つ一連のリンクが表示されます。

Overview window

  1. "Click here to check the status of your GitHub Actions runs (こちらをクリックして、GitHub Actions の実行の状態を確認してください) " というバナーをクリックすると、リポジトリに対して実行されている GitHub アクションが表示されます。 デプロイ ジョブが完了したことを確認したら、生成された URL を使用して Web サイトに移動できます。

  2. GitHub Actions ワークフローが完了したら、 [URL] リンクをクリックして、新しいタブで Web サイトを開くことができます。

リソースをクリーンアップする

リソース グループを削除して、デプロイしたリソースをクリーンアップします。

  1. Azure portal で、左側のメニューから [リソース グループ] を選択します。
  2. [名前でフィルター] フィールドに、リソース グループ名を入力します。
  3. リソース グループ名を選択します。
  4. トップ メニューから [リソース グループの削除] を選択します。

次のステップ