de:code 2019 のパーソナルスポンサーとして、HashiCorp Terraform Azure Provider チュートリアルのセッションを実施し、サンプルコードをGithubに公開しました。
Application Gateway に Let’s Encrypt 証明書を使用する方法
Application GatewayでLet’s Encrypt証明書を設定しようとして、はまりにはまったので対応方法をメモしておく。
今回は、Application GatewayにカスタムドメインのサブドメインをAzure DNSで割り当てて、DNS-01認証でLet’s Encrypt証明書を取得する。取得には、win-acmeを使用した。
Application GatewayのURL:yyy.xxx.example.com
Azure DNSのDNSゾーン:xxx.example.com
発行したい証明書: yyy.xxx.example.com
- Application Gatewayを立てる
とりあえず自己証明書などでたててしまう。DNS-01認証なのでアクセスできる必要はないと思うけど、まぁHTTPSでたててしまう。 - 今回はAzure DNSを使用して、DNS-01認証をするので、カスタムドメインの向き先をAzure DNSにする。
ちなみに今回は、xxx.example.comをAzure DNSに向けた。
当然、Azure DNSのDNSゾーン登録はxxx.example.comになる。
CNAMEで、「yyy」をApplication GatewayのURLに向ける。 - Azure DNS validationのドキュメントに従って、作業をする。
3-1. LetsEncryptというサービスプリンシパルを作成する。
サービスプリンシパルは、Azure Active Directoryの「アプリの登録」に登録される。表示されない場合は、「すべてのアプリケーションの表示」ボタンが表示されれたらクリック、ない場合はドロップダウンなどでフィルタリング条件を変更するといい。
3-2. Azure DNSでDNS ゾーン(xxx.example.com)に作成したLetsEncryptサービスプリンシパルのアクセス権を付与する。
アクセス制御画面で、「DNSゾーンの共同作成者」ロールで、LetsEncryptを登録する。 - win-acmeをダウンロードする。なお、サブドメインに対して、証明書を発行したい場合、特にAzure DNSに登録しているDNSゾーンが「example.com」ではなく、「xxx.example.com」のようにサブドメインの場合は、win-acmeの問題でDNS-01認証が正常に完了しない。完了させるためにはコードを修正する必要があるので、ソースコードをダウンロードする。
Visual Studioで開いて下記部分を修正して、ビルドして実行する。
修正前
_dnsClient.RecordSets.CreateOrUpdate(_azureDnsOptions.ResourceGroupName,
url.RegistrableDomain,
url.SubDomain,
RecordType.TXT,
recordSetParams);
修正後
_dnsClient.RecordSets.CreateOrUpdate(_azureDnsOptions.ResourceGroupName,
"xxx.example.com",//url.RegistrableDomain,
"_acme-challenge.yyy".//url.SubDomain,
RecordType.TXT,
recordSetParams);
5. ビルドしたletencrypt.exeを起動する。
M: create new certificate with advanced optionsを選択
1: Manually input host names を選択
yyy.xxx.example.com を入力
1: [dns-01] Azure DNS を選択
Tenant Idを入力する。(Get-AzureRmSubscriptions)
Client Idを入力する。(Get-AzureRmADServicePrincipal|where DisplayName -EQ LetsEncrypt のApplication Id)
SecretはService Principalを作成するときに設定したパスワード
DNS Subscription IDは、xxx.example.comのDNSゾーンで表示されるもの
DNS Resource Groupは、xxx.example.comのDNSゾーンで表示されるもの
これで無事に証明書が発行される。
エラー
次のエラーが出るときは、「xxx.example.com」へのアクセス権を付与していることと、ソースコードを修正していることを確認してください。ソースコードを修正していないと、「example.com」DNSゾーンにレコードを作ろうとするので下記エラーが発生します。
The client ‘d38f55be-xxxx-xxxx-xxxx-xxxxx’ with object id ‘d38f55be-xxxx-xxxx-xxxx-xxxxx’ does not have authorization to perform action ‘Microsoft.Network/dnszones/TXT/delete’ over scope
スマホでWeb Appsの管理とか監視しようぜ! Companion Preview
概要
この投稿はMicrosoft Azure Advent Calendar 2016 の22日目です。昨日、21日目は、dz_さんの「Check! コンテナ管理プラットフォーム Rancher を Azure 上で動かしてみよう」でした。
Azure App Service Companion preview
2016年10月19日に、iOS版のAzure App Service Companion previewのリリースが発表されました。
このアプリを使用することで、Azure App Serviceにデプロイしているサイトの性能情報の確認やアラートの確認、サービスの再起動・停止ができます。
現在、iPhoneアプリとAndroidアプリの両方が提供されています。
Web Apps の停止と再起動をしよう
サイトを見てみましょう。
この画面の最下部に不穏なボタンがあります。
「Stop」ボタンを押してみましょう。
はい、止まりましたね…。
止まりましたね。
ボタンを一回押したらさーびすが停止!( ゚Д゚)こえー
とりあえず、起動しときましょう。
ログインしてサブスクリプションを登録しましょう
アプリを起動しましょう。
ログインしましょう。
起動しているWebAppsが一覧表示されるので、管理や監視をしたいサービスを選びます。
概要ページが表示されます。HealthがUnknownなのはびっくりしました。なんででしょう。
普通にプロパティが見えますね。
秒間リクエスト数が見えますね。
まとめ
Azure App Service Companion preview で、簡単な管理や監視はすることができますね。
ここから、インスタンスの増加ができるとか、できることはいろいろ増えてくるとは思うので、利便性がでてくると思います。
でも、サービスの停止ボタンをタップしたときに、確認ダイアログは出てほしいかも。
うっかり停止して障害とかこえぇぇ( ゚Д゚)
Visual Studio Subscriptions 管理が10月にAzureADに対応!
MSアカウントと組織アカウントのメールアドレス重複についての説明を読んで、ボリュームライセンスのアカウントが組織アカウント(AzureAD)に対応する前に何してんだ!!!!て思ってたら、ようやく対応が告知されました。
VLSCにログインすると下記のような案内が来ています。
2016年10月に、Visual Studio Subscriptions (旧 MSDN Subscriptions) をすべて管理する新しい統一管理ポータルが発表されます。
10月に、Visual Studio Subscriptionsの新しいポータルへの移行を開始します。今後数ヶ月で、すべてのお客様が移行されるまで、毎週、一定数のお客様を移行していきます。新しいポータルはAzure Active Directoryを利用してアクセスを管理しますが、Azure Active Directoryにまだ加入されていない顧客組織のために、簡単な研修プログラムを用意しました。
Visual Studio Administrationから、お客様がVisual Studio Subscriptionsの管理を継続するため、今後どうしたらよいのかを説明するEメールが届きますのでご注意ください。
Azure エミュレーターがエラー0x800700b7が発生する場合の対応方法
Visual Studioを使用して、いくつかのAzureプロジェクトを使用していると、Azure エミュレーターがクラッシュしてしまうことがあります。
System.Runtime.InteropServices.COMException (0x800700B7): Cannot create a file when that file already exists. (Exception from HRESULT: 0x800700B7)
「すでにファイルが存在しているため、ファイルを作成できません」とエラーが表示されます。

対処方法
- ファイル名を指定して実行で、「wmimgmt.msc」と入力します。
- 「WMIコントロール(ローカル)」を選択し、「プロパティ」をクリックします。
- 一般タブで、WMIで問題があれば、ボックス内に表示されます。
- 下の画像のケースでは、WMIクラスで問題が発生しています。
Win32_Processor
Win32_WMISetting
- MOFファイルを修復するために、mofcomp.exe <MOFFilename.MOF>を実行します。C:\Windows\System32\wbem フォルダーにmofcomp.exeが配置されています。
- regsvr32 <MOFFilename.dll>でDLLを再登録します。
- 再度、プロパティを確認して問題が発生していないか確認します。
- 再度エミュレーターを起動してみてください。