AzureでWordPress環境を作成する話 ~ARM Templateを添えて~

はじめに

本ブログは正式リリース前にクローズ環境で運用していたのですが、そのクローズ環境はAzure上にWordPressを構築して作っていました。その時のメモです。

作り方

Azureでリソース作成しようとするとWordPressがたくさん出てくるのですが、一番ベーシックと思われる、Web Apps + Azure Database for MySQLのものを使っています。

が、こちらのWordPress環境、以前に自分だけでテスト用に作成した際には、Web Appsや Azure Database for MySQL のプランを選べていたのですが、アップデートがあったのか、プランなどが選べなくなってしまいました。(2021/10/22時点でプレビューになっているようです)

そのまま作ると、Web AppsはPremium V2、 Azure Database for MySQL は汎用になってしまいます。

本番運用ならともかく、限定テストでこのスペックはやや過剰ですし、どちらかというコストを優先したい段階です。
デプロイ後にスケールダウンさせることも考えたのですが、Web Appsの方はスケールダウン可能なものの、 Azure Database for MySQLの方は汎用目的からBasicに下げる事が出来ませんでした。

とはいえ、Web Appsと Azure Database for MySQL を個別に作成してWordPressをインストールするのも手間なのでどうしようか悩んでいた所、テンプレートをカスタマイズして使えばいい事に気づきました。

というわけで、実際の作成は行わず、Autoimationのテンプレートをダウンロードします

ダウンロードしたtemplateとparameterのjsonファイルを見て、それっぽいところのパラメーターを自分好みにカスタマイズしていきます。パラメーターの名前だけだとWeb Apps側の設定なのかMySQL側の設定なのかわかりにくい部分も多かったので、テンプレート内で使われている所を探しながら調整しました。

参考:パラメーター

以下は、パラメーター内で主に変更した箇所にメモを入れたものです。そのまま使えるものではないので参考までに。
今回はついでに、MySQL側のパスワードをべた書きではなく、Key Vaultから読み込むように変更しました。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "subscriptionId": {
            "value": "サブスクリプションの名前"
        },
        "name": {
            "value": "Web Appsの名前"
        },
        "location": {
            "value": "ロケーション"
        },
        "hostingPlanName": {
            "value": "App Serviceの名前"
        },
        "serverFarmResourceGroup": {
            "value": "リソースグループの名前"
        },
        "sku": {
            "value": "App Serviceのレベル(Basic, Standardなど)"
        },
        "skuCode": {
            "value": "App Serviceのインスタンス(B1,B2,S1など)"
        },
        "workerSize": {
            "value": "1"
        },
        "workerSizeId": {
            "value": "1"
        },
        "numberOfWorkers": {
            "value": "1"
        },
        "storageSizeMB": {
            "value": 5120
        },
        "backupRetentionDays": {
            "value": 7
        },
        "geoRedundantBackup": {
            "value": "Disabled"
        },
        "vmName": {
            "value": "B_Gen5_1"
        },
        "vCores": {
            "value": 1
        },
        "sslEnforcement": {
            "value": "Disabled"
        },
        "charset": {
            "value": "utf8"
        },
        "collation": {
            "value": "utf8_general_ci"
        },
        "databaseName": {
            "value": "Azure Database for MySQLのデータベースの名前"
        },
        "skuSizeMB": {
            "value": 5120
        },
        "skuFamily": {
            "value": "Gen5"
        },
        "serverName": {
            "value": "Azure Database for MySQLの名前"
        },
        "serverUsername": {
            "value": "Azure Database for MySQLのユーザー名"
        },
        "serverPassword": {
            "reference": {
                "keyVault": {
                "id": "/subscriptions/サブスクリプションのID/resourceGroups/keyVaultのリソースグループ/providers/Microsoft.KeyVault/vaults/keyVaultの名前"
                },
                "secretName": "keyVaultに保存したシークレットの名前"
            }
        },
        "serverEdition": {
            "value": "Azure Database for MySQLのレベル(Basicなど)"
        }
    }
}

後は、パラメーターを変更したもので上書きして、デプロイすれば出来上がりです。

おわりに

ということで、GUIで思った通りに作成出来ない場合でも、ARM Templateでなんとかなりました、という話でした。

投稿者プロフィール
舟越 匠

舟越 匠

人材戦略部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。Power AutomateやLogic Appsで楽をするのが好きです。

執筆記事一覧