Azure App ServiceでカスタムドメインとSSL証明書を使う

 

今回はApp ServiceでカスタムドメインおよびカスタムドメインのSSL化までを試してみました。

実施した内容は以下の通りになります。

      • Azure DNSでのCNAME,TXTレコード登録
      • カスタムドメイン追加
      • SSL証明書の登録

設定作業はマイクロソフト様のサイトを参考に実施しています。

https://docs.microsoft.com/ja-jp/azure/app-service/app-service-web-tutorial-custom-domain#get-domain-verification-id

https://docs.microsoft.com/ja-jp/azure/app-service/configure-ssl-bindings

今回は、事前にLets’Encryptを利用して発行した証明書を利用します。

1.Azure DNSでカスタムドメインのCNAME,TXTレコードを作成する

    • 実施作業
      • App ServiceでAzure DNSのTXTレコードに登録する値を確認
      • Azure DNSでカスタムドメインのCNAME,TXTレコード登録

1)まずカスタムドメイン設定するApp Serviceでカスタムドメインのメニューを選択します。画面に表示される値をコピーします。

      • カスタムドメインの検証ID:TXTレコードの値
      • 割り当てられてカスタムドメインに表示されている”App Service名”.azurewebsites.net:CNAMEレコードの値

2)Azure DNSでレコードセットを追加します。該当のDNSゾーンで+レコードセットを選択。レコードセットの追加画面が表示されるので、レコードを追加します。

今回はサブドメインをwwwとした場合になります。値は先ほどApp Serviceの画面で確認した値を設定します。

    • CNAME
      • 名前:www
      • 種類:CANEM
      • TTL:変更なし(1時間)
      • 値:App Service名”.azurewebsites.net
    • TXT
      • 名前:asuid.www
      • 種類:TXT
      • TTL:変更なし(1時間)
      • 値:カスタムドメインの検証IDに表示される値

これでAzure DNSの設定は完了です。

2.App Serviceへカスタムドメインを追加する

App Serviceでカスタムドメインを追加します。

1)App Serviceでカスタムドメインを選択します。カスタムドメインの追加をクリック。カスタムドメイン名を入力し検証ボタンをクリックします。

2)DNSのレコードの検証が正常に終わると下記画面が表示されます。カスタムドメインの追加をクリックします。

これでApp Serviceへのカスタムドメインの追加が終了です。

3.App Serviceのカスタムドメイン用SSL証明書を登録する

事前にPFX形式の証明書を発行している事を前提に作業を行います。

PFX形式の証明書発行については、下記記事を参照願います。

Azure Web Appsの拡張機能を使わずにLet’s Encryptで証明書を発行してOpenSSLでPFX形式へ変換してみた

1)App Serviceのカスタムドメインのメニューを開きます。先ほど追加したカスタムドメインにバンディングの追加が表示されていますので、選択します。

2)TLS/SSLバインディングの画面が表示されるので、PFX証明書の追加をクリックします。

3)秘密キー証明書の追加画面が表示されますのでPFX証明書をアップロードします。なおPFX証明書はパスワード付き証明書が必要になります。

4)TLS/SSL バインディングの画面が表示されますので、追加した証明書を選択しバインディングを追加します。

これで、SSL化は終了です。

なお、HTTPSのみのアクセスとする場合はカスタムドメインの画面に、HTTPSのみという項目がありますので、こちらをオンにします。

4.【追加】App Serviceのカスタムドメイン用SSL証明書にAzure Key Vaultを利用する

App Serviceのカスタムドメイン用証明書をAzure Key Vaultからインポートして利用する事が出来ます。

Azure Key VaultでのSSL証明書登録については下記記事に記載しています。

Azure Key Vaultで証明書期限切れ前にMail通知する

App ServiceのTLS/SSLの設定メニューで秘密キー証明書(PFX)を選択すると下記画面が表示されます。Key Vault証明書のインポートを選択する事で、Key Vaultに保管しているカスタムドメイン用証明書をインポートする事が出来ます。。

証明書自体がインポートになります。Azure Key Vaultに保管された証明書を参照するのではない点は注意が必要です

App Service PlanをPower Shellでプラン変更

 

App Service Planのプラン変更をPower Shellを使って試してみました。

App Service(Web Apps)は停止しても課金は止まらずApp Service Planの方を停止する必要があります。ですがAzure VMと違いApp Service Planには停止がありません。

課金を止めようとするとApp Service Planを削除するか無償のプランに変更する必要があります。(削除するとWeb Appsも削除されます。)

また、App Service Planですが、Basicレベルでは手動でのスケールアウト、Standardプラン以上は自動のスケールアウトをサポートしています。ただ自動でスケールアップ、ダウンは出来ません。

課金を停止する場合やBasicプランでスケールアウトさせる場合は手動で設定変更する事になります。

今回は、Azure VMの自動シャットダウンと同じ事が出来ないかという事で、App Service Planのプラン変更をPower Shellを使って試してみました。

    • 今回実施した内容
      • App Service Planプラン変更を行うPower Shellを作る
      • AutomationアカウントのRunbookに設定する

1.Set-AzAppServicePlanを使ってApp Service Planプラン変更する

今回、App Service Planの設定変更を以下の方法でやってみました。

      • Get-AzAppServicePlanで現在のApp Service Planの設定を取得
      • 変更するプラン内容の情報を指定
      • Set-AzAppServicePlanでApp Service Planの設定変更

無償プランに変更するだけなら、Set-AzAppServicePlanだけで可能なのですが、スケールアップダウンと一緒にスケールアウト等も出来るようにしたかったのでこういう形にしています。

    • Power Shellで指定する内容
      • 設定変更対象のApp Service Plan
        • リソースグループ名
        • App Service Plan名
      • App Service Planの設定値
        • Name:F1、B1~3、S1~3、P1v2~P3V2等
        • Tier:Free、Basic、Standard、PremiumV2等
        • Family:F、B、S、Pv2等
        • Capacity;インスタンス数(プランにより上限が異なります)

App Service Planの設定値ですが、例えば無料プランの場合は以下のように指定します。

        • Name : F1
        • Tier : Free
        • Size : F1
        • Family : F
        • Capacity : 1

設定値の確認を入れている為、何度か同じコマンドを実行しています。環境に合わせて適時変更して下さい。

今回作成したPower ShellはGitHubにアップロードしてございます。

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/AppServicePlan_Change_20200816

#App Service Plan変更するPower Shell

#設定変更対象のAppServicePlan
$ResourceGroupName = “リソースグループ名”
$AppServicePlanName = “AppServicePlan名”

#AppServicePlan変更後の設定値
$Name = “F1”
$Tier = “Free”
$Size = $Name
$Family = “F”
$Capacity = 1

#現在のAppServicePlanの情報取得
$AppservicePlanConf = Get-AzAppServicePlan -ResourceGroupName $ResourceGroupName -Name $AppServicePlanName

#現在の情報表示
Write-Host “変更前の設定情報: $($AppServicePlanName)”
$AppservicePlanConf
$AppservicePlanConf.Sku

$AppservicePlanConf.Sku.Name = $Name
$AppservicePlanConf.Sku.Tier = $Tier
$AppservicePlanConf.Sku.Size = $Size
$AppservicePlanConf.Sku.Family = $Family
$AppservicePlanConf.Sku.Capacity = $Capacity

$AppservicePlanConf | Set-AzAppServicePlan

#設定変更後AppServicePlanの情報取得
$AppservicePlanConfAfter = Get-AzAppServicePlan -ResourceGroupName $ResourceGroupName -Name $AppServicePlanName

#設定変更後の情報表示
Write-Host “変更後の設定情報: $($AppServicePlanName)”
$AppservicePlanConfAfter
$AppservicePlanConfAfter.Sku

 

2.AutomationアカウントのRunbookを使って、App Service(Web Apps) の自動シャットダウンっぽい事をやってみる

Freeプランへの変更をAutomationアカウントのRunbookを使って実施します。

AutomationアカウントでRunbookを選択します。下記画面が表示されますので、Runbookの作成を選択します。

Runbookの作成画面が表示されるので、Runbookの種類はPower Shellを選択して作成します。

Power Shell Runbookの編集画面が表示されます。

先ほどのPower ShellでFreeプランとして貼り付けます。(Runbook用に認証部分のみ追加しています。)保存をクリックした後に、テストウィンドウを選択します。

#App Service Plan変更するPower Shell

#認証
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID `
-ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

#設定変更対象のAppServicePlan
$ResourceGroupName = “リソースグループ名”
$AppServicePlanName = “AppServicePlan名”

#AppServicePlan変更後の設定値
$Name = “F1”
$Tier = “Free”
$Size = $Name
$Family = “F”
$Capacity = 1

—以下は先ほどのPower Shellと同じなので省略—

テストの画面が表示されますので、開始をクリックします。

しばらくすると開始します。正しく動作して完了すると、下記画面が表示されます。Freeプランへの変更が出来ている事が確認できます。

編集画面に戻り公開をクリックします。Runbookの発行が表示されますのではいを選択します。(Runbookを実際に利用する為には保存ではなく公開する必要があります。。)

 

 これで、Runbookが作成され利用できる状態になりました。。

後はスケジュールと関連づけすれば、定時にAppServicePlanの変更(自動シャットダウン)が出来ます。

なお、Automationアカウントの作成やスケジュール作成はこちらで試しております。

Automationアカウント初期作成時のモジュール

Azure Automation Runbookで実行時間制限

 

3.App Service Plan変更時の注意点。

プラン変更できないパターンもあります。

例えばカスタムドメイン等を利用していると、Freeプランへの変更がエラーになります。

プラン変更時にはそのTierでしか使えないサービスを利用しているかどうか確認が必要になります。

今回のPower Shellを使った場合は、同じTierで一番安価なプランを選択する等の設定が必要そうです。

Azure Web Appsのリソース監視を設定してみた

 

Azure Web Appsのリソース(CPU使用率やメモリ使用率)を見ようと確認してみた所、Azure Web Appsのメトリックにはありませんでした。

何故?という事で調べてみた結果、マイクロソフト様のサイトに答えがありました。

https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-monitor

サイトの記載を見ると、CPU使用率等のリソースについては、App Service プランのメトリックにあると記載がありました。

今回は、CPU使用率等のAzure Web Appsリソースを見てみる事から、監視設定まで実際に触って確認してみました。

1 .Azure Web AppsのメトリックにはCPU使用率がありません

最初にAzure PortalでAzure Web Appsのメトリックを見てみました。

それらしい、CPU Timeはありますが、CPU使用率のようなものはありません。

という事で、Azure App Service プランを見てみます。

2 .Azure App Service プランのメトリックにWeb Appsのリソースはあります

Azure PortalでApp Service プランのメトリックを見てみました。

ちゃんと、CPU使用率やメモリ使用率がありました。

Azure Web Appsのリソースを指定しているのはApp Serviceプランになります。

リソースについてはリソース指定しているもので見るのが正解!!

という事でCPU使用率などのメトリックもApp Serviceプランにあるという事に気づきました。(当たり前な話なんでしょうけど。。。)

.Azure Web Appsのリソース拡張もApp Serviceプランで設定

Azure Web Appsですが料金プランによっては、自動リソース拡張が設定できます。

ではこの設定自体はどこにあるというと、こちらも、App Serviceプランの設定になります。

Web Appsのスケールアウトの設定にありますが、実際はApp Serviceプランの設定となっています。(App Serviceプラン側のメニューでも全く同じ事ができます)

.Azure Web Appsのリソース監視(App Serviceプランのリソース監視)

最後に、Azure Web Appsのリソース監視を確認してみます。これはApp Service プランのリソース監視を行う事になります。実際に見てみます。

 1)モニターのアラートを選択すると下記画面が表示されますので、新しいアラートルールを選択します。

 

 2)リソースの選択をします。

 

 3)リソースの種類でフィルターでプルダウンを選択すると、App Serviceプランがありますのでこちらを選択します。

 

 4)Web Appsに紐づいているApp Serviceプラン名を指定します。

 

 5)監視の条件を選択します。

 

 6)シグナルロジックの選択をします。今回はCPU使用率ですので、CPU Percentageを選択します。

 

7)シグナルロジックの構成が表示されますので設定を行います。設定が終わったら完了をクリックします。

 例えば80%より大きい場合はアラートといった場合は、アラートロジックは下記の通りのようにします。

        • しきい値:Static
        • 演算子:次の値より大きい
        • 集計の種類:平均
      • しきい値:80

 

8)アクショングループの設定で通知方法の設定を行います。

9)アラートルールの設定でアラートルール名の設定等を行います。

これですべての設定が終了ですので、アラートルールの作成をクリックします。

アラートルールが作成され、しばらくすると監視が開始されます。

ARMテンプレートを使ってAzure Web Apps(Linux)をデプロイしてみた

 

Linux のWeb Apps のデプロイをAzure PortalとAzure Resource Manager(ARM)テンプレートの2つパターンで実施してみました。

ARMテンプレート利用時には、以下の点に対応してみました。

      • 既存のApp Serviceプランを利用するか、新規に作成するかを選べるようにしてみました。
      • Power Shellを使ってデプロイする場合に、ARMテンプレートのパラメータをCSVから読み込むようにして再利用しやすいようにしています。

※ARMテンプレートをWindowsと共通にしたかったのですが、linuxFxVersionという項目があり無理でした。

ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。

      • Web Apps(Linux用) を定義するARMテンプレート(JSONファイル)
      • Web Apps(Linux用) プランのパラメータを指定するCSV
      • ARMテンプレートをデプロイするPower Shell

作成したものは GitHub上にも公開しております。

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/WebApps_Linux_Template_20200528

App Serviceプラン単体での作成は、前回実施していますのでこちらの記事も併せて参考にして頂ければと。

ARMテンプレートを使ってAzure App Service プランをデプロイ

 

1 .Azure Portal上でLinuxのWeb Appsを新規作成する

Azure Portalを利用して、Linux のApp Service を作成します。

Azure Portal上のすべてのサービスでApp Serviceと入力すると、App Serviceのメニューが表示されれますのでこれを選択します。

+追加をクリックします。

一般的な使い方で指定するのは、以下の内容になるかと思います。実際に利用するリソースに合わせて設定します。

      • リソースグループ
      • 名前
      • 公開(Dockerコンテナを利用するか(今回はコードを選択))
      • ランタイムスタック(使用する開発言語(これを選ぶとオペレーティングシステムも自動選択されます)
      • オペレーティングシステム
      • 地域(ロケーション)
      • AppServiceプラン名
      • Application Insightsの利用可否(利用できる組み合わせには制限があり、LinuxとPHPの構成では利用不可です。)
      • タグ

リソースグループ、Web Apps名、公開(コンテナの利用等)、ランタイムスタック、地域(ロケーション)やApp Serviceプラン名を選択し、次へクリックします。オペレーティングシステムはWeb Apps利用時に選択されるランタイムスタックにより自動的に選択されます。

次に監視の設定を実施します。利用できる組み合わせには制限があり、LinuxとPHPの構成では利用不可な為、”いいえ”のままにします。

次にタグの設定を実施します。必要に応じて適時付与します。

設定したら、確認および作成をクリックします。確認画面が表示されますので、作成をクリックします。

完了するとLinuxのWeb Apps が作成されます。

2 .LinuxのWeb AppsのAzure Resource Manager(ARM)テンプレート

マイクロソフト様が公開されているサイトを参考にし、Web AppsのARMテンプレートを作成してみました。

https://github.com/Azure/azure-quickstart-templates/tree/master/101-webapp-basic-linux

以下の点を修正しています。

      • Conditionを利用して既存のApp Serviceプランを利用するかどうかを選ぶようにしてみました。パラメータにnewOrExistingを追加しています。newを指定した場合は新規にApp Serviceプランが作成され、existingを指定すると既存のものを利用します。
      • App Serviceプラン部分は前回記事で作成のものを利用しています。

結果、Web AppsのARMテンプレートはこういう形になりました。Linux用のARMテンプレートなので、Kind(linux)やreserved(true)を固定値で設定する事も可能です。

{

  “$schema”: “https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#”,
  “contentVersion”: “1.0.0.0”,
  “parameters”: {
    “webAppName”: {
        “type”: “string”,
        “defaultValue” : “AzureLinuxApp”,
        “metadata”: {},
        “minLength”: 2
    },
    “appServicePlanName”:{
        “type”: “string”,
        “defaultValue” :”[concat(‘AppServicePlan-‘, parameters(‘webAppName’))]”,
        “metadata”: {}
    },
    “sku”: {
        “defaultValue”: “Basic”,
        “type”: “string”,
        “allowedValues”: [
            “Basic”,
            “Standard”,
            “PremiumV2”
        ]
    },
    “skucode”: {
        “defaultValue”: “B1”,
        “type”: “string”,
        “allowedValues”: [
            “B1″,”B2″,”B3”,
            “S1″,”S2″,”S3”,
            “P1v2″,”P2v2″,”P3v2”
        ]
    },
    “reserved”: {
            “defaultValue”: “true”,
            “type”: “bool”,
            “metadata”: {}
    },
    “kind”: {
            “type”: “string”,
            “allowedValues”: [
                “linux”,
                “app”
                ]
     },
    “linuxFxVersion” : {
        “type”: “string”,
        “defaultValue” : “PHP|7.3”,
        “metadata”: {}
    },
    “location”: {
      “type”: “string”,
      “defaultValue”: “[resourceGroup().location]”,
      “metadata”: {
      }
    },
    “newOrExisting”: {
        “type”: “string”,
        “allowedValues”: [
            “new”,
            “existing”
            ]
    }
  },
  “variables”: {},
   “resources”: [
        {
    “condition”: “[equals(parameters(‘newOrExisting’), ‘new’)]”,
    “apiVersion”: “2018-11-01”,
            “type”: “Microsoft.Web/serverfarms”,
            “name”: “[parameters(‘AppServicePlanName’)]”,
            “location”: “[parameters(‘location’)]”,
            “kind”: “[parameters(‘kind’)]”,
            “tags”: {},
            “properties”: {
                “name”: “[parameters(‘AppServicePlanName’)]”,
                “reserved”: “[parameters(‘reserved’)]”
            },
            “sku”: {
                “Tier”: “[parameters(‘sku’)]”,
                “Name”: “[parameters(‘skuCode’)]”
            }
        },
        {
      “type”: “Microsoft.Web/sites”,
      “apiVersion”: “2018-11-01”,
      “name”: “[parameters(‘webAppName’)]”,
      “location”: “[parameters(‘location’)]”,
      “kind”: “linux,app”,
      “dependsOn”: [
        “[resourceId(‘Microsoft.Web/serverfarms’, parameters(‘appServicePlanName’))]”
      ],
      “properties”: {
        “serverFarmId”: “[resourceId(‘Microsoft.Web/serverfarms’, parameters(‘appServicePlanName’))]”,
        “siteConfig”: {
            “linuxFxVersion”: “[parameters(‘linuxFxVersion’)]”
          }
      }
    }
  ]
}

3.LinuxのWeb Appsのパラメータ設定CSV作成する

Web Apps を作成する為にCSVから読み込むパラメータは以下の通りになります。リソースグループ名はデプロイ先のリソースグループ名になります。

      • リソースグループ(ResourceGroupName)
      • Web Apps名(webAppName)
      • App Serviceプラン名(AppServicePlanName)
      • オペレーティングシステム(reserved,Kind)
      • 地域(location)
      • App Serviceプランの価格レベル(sku,skucode)
      • ランタイムスタック(RuntimeStackVersion)
      • 新規作成か既存利用か(newOrExisting)

上記を踏まえてCSVをサンプルで作成以下のようになります。(RuntimeStackVersionで改行を入れてますので実施に利用時は抜いてください。)

#新規作成の場合
ResourceGroupName,location,webAppName,AppServicePlanName,sku,skucode,reserved,kind,
RuntimeStackVersion,newOrExisting

RG1,japaneast,wbapps-01,app-service-plan-001,Basic,B1,true,linux,PHP|7.3,new
 
#既存作成の場合(事前に作成した、app-service-plan-001を利用する場合)
ResourceGroupName,location,webAppName,AppServicePlanName,sku,skucode,reserved,kind,
RuntimeStackVersion,newOrExisting

RG1,japaneast,wbapps-01,app-service-plan-001,Basic,B1,true,linux,PHP|7.3,existing

4.LinuxのWeb AppsをARMテンプレート+Power Shellでデプロイする

ARMテンプレートのパス、CSVのパスを指定してARMテンプレートをデプロイするPower Shellを実行します。

ARMテンプレートをデプロイするPower Shellは下記のようになりました。

#Web Apps Template For Linux Deploy
#基本設定
#webAppName Web Apps名
#AppServicePlanName AppServicePlan名
#location リージョン名
#sku プラン名(Basic,Standard,PremiumV2)、
#skucode インスタンス名(B1等)
#kind (linux)
#linuxFxVersion(RuntimeStackVersion)(ランタイムスタック)
#newOrExisting(新規作成 Or 既存利用)

$TemplateFilePath = “ARMテンプレートのパス”
$ImportCSVPath = “CSVファイルのパス”

# Inclued Configure Entries
$csv = Import-Csv -path $ImportCSVPath 

# Template Deploy
foreach( $c in $csv ){

# Bool Value
[Bool]$boolValue = [System.Convert]::ToBoolean($c.reserved)

New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -webAppName $c.webAppName `
  -AppServicePlanName $c.AppServicePlanName `
  -location $c.location `
  -sku $c.sku `
  -skucode $c.skucode `
  -reserved $boolValue `
  -kind $c.kind `
  -linuxFxVersion $c.RuntimeStackVersion `
  -newOrExisting $c.newOrExisting `
}

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にPortal上で確認すると設定通り出来ている事が確認できます。

 

ARMテンプレートを使ってAzure App Service プランをデプロイ

 

App Service プランの作成をやってみました。Azure Portalで作成した後、ARMテンプレートでもやってみました。

App Service プラン自体は、App Service作成時にも作れますが、今回は勉強を兼ねて事前に作成してみました。

App Service プランは、App Service利用する為のリソース利用料になります。

https://azure.microsoft.com/ja-jp/pricing/details/app-service/plans/

App Serviceを作成時にリソースとして指定されるもので、機能やリソースによって価格が決まります。

https://azure.microsoft.com/ja-jp/pricing/details/app-service/windows/

ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。ARMテンプレートを使った場合は、複数のコンテナーを一括でデプロイできるようにパラメータをCSVから読み込むようにしています。

      • App Service プランを定義するARMテンプレート(JSONファイル)
      • App Service プランのパラメータを指定するCSV
      • ARMテンプレートをデプロイするPower Shell

作成したものは GitHub上にも公開しております。

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/AppServicePlan_Template_20200524

1 .Azure Portal上でApp Service プランを新規作成する

Azure Portalを利用して、App Service プランを作成します。

Azure Portal上のすべてのサービスでApp Service Planと入力すると、App Service プランのメニューが表示されれますのでこれを選択します。

App Service プランに移動しますので、+追加をクリックします。

一般的な使い方で指定するのは、以下の内容になるかと思います。実際に利用するリソースに合わせて設定します。

      • リソースグループ
      • 名前
      • オペレーティングシステム
      • 地域(ロケーション)
      • 価格レベル
      • タグ

まず、リソースグループ、名前、オペレーティングシステム、価格レベルを選択し、次へクリックします。オペレーティングシステムはApp Service利用時に選択するフレームワークにより選択します。.Net環境を利用するのであればWindows、PHPならばLinuxという感じです。現時点ではコンテナの場合はLinuxの方が選べるロケーションが多いようです。

次にタグの設定を必要に応じて実施します。

設定したら、確認および作成をクリックします。確認画面が表示されますので、作成をクリックします。App Service プランが作成されます。

.App Service プランのAzure Resource Manager(ARM)テンプレート

マイクロソフト様が公開されているサイトを参考にし、App ServiceプランのARMテンプレートを作成してみました。

https://docs.microsoft.com/ja-jp/azure/templates/microsoft.web/serverfarms

以下の点を修正しています。

      • skuやskucodeのデフォルト値はBasic前提にしてます。Isolatedも使わなかったので抜いてます。利用環境に合わせて適時修正下さい。
      • reservedとkindはパラメータで指定するようにしています。

結果、App ServiceプランのARMテンプレートはこういう形になりました。

{
    “$schema”: “http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
    “contentVersion”: “1.0.0.0”,
    “parameters”: {
        “AppServicePlanName”: {
            “type”: “string”
        },
        “location”: {
            “defaultValue”: “[resourceGroup().location]”,
            “type”: “string”
        },
        “sku”: {
            “defaultValue”: “Basic”,
            “type”: “string”,
            “allowedValues”: [
                “Basic”,
                “Standard”,
                “PremiumV2”
                ]
        },
        “skucode”: {
            “defaultValue”: “B1”,
            “type”: “string”,
            “allowedValues”: [
                “B1″,”B2″,”B3”,
                “S1″,”S2″,”S3”,
                “P1v2″,”P2v2″,”P3v2”
                ]
        },
        “reserved”: {
            “defaultValue”: “true”,
            “type”: “bool”,
            “metadata”: {}
        },
        “kind”: {
            “type”: “string”,
            “allowedValues”: [
                “linux”,
                “app”
                ]
        }
     },
    “variables”: {},
    “resources”: [
        {
            “apiVersion”: “2018-11-01”,
            “type”: “Microsoft.Web/serverfarms”,
            “name”: “[parameters(‘AppServicePlanName’)]”,
            “location”: “[parameters(‘location’)]”,
            “kind”: “[parameters(‘kind’)]”,
            “tags”: {},
            “properties”: {
                “name”: “[parameters(‘AppServicePlanName’)]”,
                “reserved”: “[parameters(‘reserved’)]”
            },
            “sku”: {
                “Tier”: “[parameters(‘sku’)]”,
                “Name”: “[parameters(‘skuCode’)]”
            }
        }
    ]
}

3.App Serviceプランのパラメータ設定CSV作成する

App Serviceプランを作成する為にCSVから読み込むパラメータは以下の通りになります。リソースグループ名はデプロイ先のリソースグループ名になります。

      • リソースグループ(ResourceGroupName)
      • 名前(AppServicePlanName)
      • オペレーティングシステム(reserved,Kind)
      • 地域(location)
      • 価格レベル(sku,skucode)
      • タグ(今回は未指定)

オペレーティングシステムの組み合わせは下記の通りになります。Windowsの場合は指定がappになります。また同じリソースグループにWindowsとLinuxのデプロイはエラーになります。(現時点でのAzureでの仕様になります。)

      • Linuxの場合は、reservedをtrue、kindをlinuxに指定します。
      • Windowsの場合は、reservedをfalse、kindをappに指定します。

上記を踏まえてCSVをサンプルで作成以下のようになります。

RG1にLinux(B1)、RG2にWindows(S1)でデプロイする想定にしています。

ResourceGroupName,location,AppServicePlanName,sku,skucode,reserved,kind,
RG1,japaneast,app-service-plan-001,Basic,B1,true,linux,
RG2,japaneast,app-service-plan-002,Standard,S1,false,app,

4.App ServiceプランをARMテンプレート+Power Shellでデプロイする

ARMテンプレートのパス、CSVのパスを指定してデプロイを実施します。

reservedについては、bool形式である為StriingからBoolに変換ししています。

#AppServicePlan Template Deploy

#基本設定
#Name AppServicePlan名
#location リージョン名
#sku プラン名(Basic,Standard,PremiumV2)、
#skucode インスタンス名(B1等)
#kind (linux or Win)(Winの場合はappと指定する)

$TemplateFilePath = “ARMテンプレートのパス”
$ImportCSVPath = “CSVファイルのパス”

# Inclued Configure Entries
$csv = Import-Csv -path $ImportCSVPath 

# Template Deploy
foreach( $c in $csv ){

# Bool Value
[Bool]$boolValue = [System.Convert]::ToBoolean($c.reserved)

New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -location $c.location `
  -AppServicePlanName $c.AppServicePlanName `
  -sku $c.sku `
  -skucode $c.skucode `
  -reserved $boolValue `
  -kind $c.kind
}
 

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にPortal上で確認すると設定通り出来ている事が確認できます。

Azure Web Appsの拡張機能を使わずにLet’s Encryptで証明書を発行してOpenSSLでPFX形式へ変換してみた

 

Let’s EncryptのSSL証明書作成をWeb Appsで試してみようとして調べてみた所、Web Appsの拡張機能を使う方法が多く紹介されていました。

しかし、Web AppsをLinux+PHPの構成で試していたのですが、Web Appsの拡張機能が有効になってませんでした。

どうしようか?と途方に暮れていたのですが、よく考えたらWeb AppsってUbuntuだから普通にできるのでは?と気づき試してみました。

結果、普通にUbuntuで実施する手順で証明書の作成できました。作業内容をメモとして記しておきます。

Azure Key Vaultの証明書期限切れ前のメール通知についてはこちらで試しております。

Azure Key Vaultで証明書期限切れ前にMail通知する

————————-

1 .Lets Encryptの証明書発行を行う

最初にAzure Portal上で自分のWeb AppsへSSHで接続します。

サーバ上でLets Encrypt証明書発行の為に、実施する手順は以下の通りです。

    • aptアップデート
    • certbotのインストール
    • certbotコマンドで証明書の発行

なお、最初にapt updateしてからでないとcertbotインストール時にエラーになりました。なおオプションを使わずcertbot certonlyコマンドでも同様の事が可能です。

#updateを実施する

[root@ホスト名 tmp]# apt -y update

#certbotをインストールします

[root@ホスト名 tmp]# apt -y install certbot

#証明書を発行する(ドメインは自分のサイトに合わせて設定します。)

[root@ホスト名 tmp]# certbot certonly –webroot -w /home/site/wwwroot -d ドメイン名

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel):メールアドレスを入力

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(A)gree/(C)ancel: A    (承諾の確認です。Aを選択します)

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(Y)es/(N)o: N    (案内メール送信の確認です。必要ならYを選択します)

作成されたメッセージが表示されます

 

Let’s Encryptで発行された証明書は/etc/letsencrypt/live/ドメイン名/ 配下に生成されます。

.OpenSSLを使ってpem形式からpfx形式へ変換する

Azure 上では独自ドメインの証明書をpfx形式で扱います。そこでopensslコマンドで変換を行います。

opensslはデフォルトで入っていた為、インストールの必要はありませんでした。

#証明書が作成されているディレクトリに移動します

[root@ホスト名 tmp]# cd /etc/letsencrypt/live/ドメイン名/

#opensslコマンドでpem形式からpfx形式に変換する

[root@ホスト名 tmp]# openssl pkcs12 -export -inkey privkey.pem -in cert.pem -out 証明書名.pfx

Enter Export Password:パスワード
Verifying – Enter Export Password:パスワード

pfx形式の証明書が作成されたメッセージが表示されます

最後にできた証明書ファイルを/home配下にファイル移動し、FTPS等でサーバからダウンロードすれば作業完了です。

念のため/etc/letsencrypt/live配下やサーバ上の証明書は削除しておきましょう。

Web Appsの再起動等を実施するとcertbotのパッケージがなくなりますので、インストールから再度実施する必要があります。

App ServiceでのSSL証明書設定についてはこちらで試しております。

Azure App ServiceでカスタムドメインとSSL証明書を使う