オンプレ系インフラエンジニアがAzureを勉強する

いつか誰かの何かの役に立つと嬉しいな

Azure SQL DatabaseのAzureAD認証周りのメモ

細かいエラーが続いたのでメモです。

前提条件

環境

AADにあるグループ
グループ名:test-admin-group
所有者:blogtest
メンバー:blogtest2

グループ名:app-group
所有者:なし
メンバー:WebAppいくつか

目的

app-groupグループをSQL Serverのユーザーにして、ロールを割り当てたい。

やったこと

app-groupグループをSQL Serverのユーザーにして、ロールを割り当てるためのコマンドをSSMSで実行しようと思う。
SSMSに、SQL Server認証でサインインする。
コマンドを実行する。
⇒エラーになる。

エラーをみると、

Principal 'app-group' could not be created.Only connections established with Active Directory accounts can create other Active Directory users.

Active Directory アカウントで確立された接続のみが、他の Active Directory ユーザーを作成できます。」
そりゃそうだ。

AD認証でサインインするため、blogtestアカウントでサインインする。
⇒サインインができない。
SQL ServerにAzure Active Directory管理者の設定をしていなかった。
test-admin-groupグループを管理者に設定する。

blogtestアカウントでSSMSでサインインする。
⇒サインインができない。

blogtest2アカウントでSSMSでサインインする。
⇒サインインできた。コマンドの実行もできた。
blogtestアカウントをtest-admin-groupグループのメンバーにしたところ、サインインできた。
(メンバーに追加してから反映まで少し時間がかかる。)

グループの所有者であればメンバーと同じだけの権限があるかと思いきや、そうではなかったということが今回一番メモしておきたいことです。

参考

下記に細かい躓きポイントの解決が色々詰まってました。
Add Azure Active Directory User to Azure SQL Database - Stack Overflow

Azure ストレージサービスのレプリケーションオプションについて

はじめに

ストレージのレプリケーションオプションの違いを整理するためにメモします。

レプリケーションオプションとは

レプリケーション=レプリカ(複製)を作ること。
物理的なディスクの故障などによりデータが失われないようにデータの複製を行う。
レプリケーションの範囲にも種類があり、それをレプリケーションオプションとして指定することができる。

ローカル冗長ストレージ(LRS)

LRSはLocal Redundant Storageの略。
プライマリリージョンの1つのデータセンター内でデータが3つのディスクに同期される。
1つor2つのディスクが壊れてしまってもデータが使用できる。
レプリカはすべて同時に書き込みを行い、すべてに書き込みが終わったときに完了のデータが返る。

持続性
年間99.999999999% (9が11個) 
オプションの中で1番低い。

特徴
データセンター自体が災害に合うとすべてのデータを失う可能性がある。
データの損失が発生した場合に再構築が簡単なデータを格納する場合などに使用する。

サポートされるストレージアカウント

  • Standard 汎用 v2
  • Premium ブロック BLOB
  • Premium ファイル共有

ゾーン冗長ストレージ(ZRS)

ZRSはZone Redundancy Storageの略。
プライマリリージョンの3つのAzure可用性ゾーン間でデータが同期される。
Azure可用性ゾーンは、電源、冷却装置、ネットワークを備えたリージョン内の独立した物理的な場所。
いずれかのデータセンターで災害が起きてもデータが使用できる。
レプリカはすべて同時に書き込みを行い、すべてに書き込みが終わったときに完了のデータが返る。

持続性
年間99.9999999999% (9が12個) 
オプションの中で2番目に低い。

特徴
東日本では使用できるが、西日本では使用できない。
リージョン自体が影響を受ける場合(大規模災害)にデータの保護ができない。

サポートされるストレージアカウント

  • Standard 汎用 v2
  • Premium ブロック BLOB
  • Premium ファイル共有

geo冗長ストレージ(GRS)

GRSはGeo Redundant Storageの略。geoは「地理」を意味する。
プライマリリージョンの1つのデータセンター内でデータが3つのディスクに同期される。
その後、セカンダリリージョンの1つのデータセンター内でデータが3つのディスクに非同期コピーされる。
結果的に6つのディスクにデータが保持される。

持続性
年間99.99999999999999% (9が16個) 
オプションの中で1番高い。

特徴
リージョン自体が影響を受ける大規模災害でもデータが使用できる。
セカンダリリージョンのデータが読み取れるのは、意図的にフェールオーバーを開始した場合だけのため、平常時はアクセスできない。

サポートされるストレージアカウント

  • Standard 汎用 v2

読み取りアクセスgeo冗長ストレージ(RA-GRS)

RA-GRSはRead Access Geo-Redundant Storageの略。
GRSと同様のデータ保持方法。

持続性
年間99.99999999999999% (9が16個) 
オプションの中で1番高い。

特徴
平常時でも読み取りのみアクセス可能。
サービスによってはサポートされていないオプション(例:Azure Files)

サポートされるストレージアカウント

  • Standard 汎用 v2

geoゾーン冗長ストレージ(GZRS)

GZRSはGeo-Zone Redundancy Storageの略。
ゾーン冗長ストレージとgeo冗長ストレージを組み合わせたようなオプション。
プライマリリージョンの3つのAzure可用性ゾーン間でデータが同期される。
その後、セカンダリリージョンの1つのデータセンター内でデータが3つのディスクに非同期コピーされる。
結果的に6つのディスクにデータが保持される。
物理的な場所としては4か所にデータが保持される。

持続性
年間99.99999999999999% (9が16個) 
オプションの中で1番高い。

特徴
最大限の一貫性、持続性、高可用性、優れたパフォーマンス、リカバリーのための回復性を必要とするアプリケーションに対しておすすめ。

サポートされるストレージアカウント

  • Standard 汎用 v2

読み取りアクセスgeoゾーン冗長ストレージ(RA-GZRS)

RA-GZRSはRead Access Geo-Zone Redundancy Storageの略。
GZRSと同様のデータ保持方法。

持続性
年間99.99999999999999% (9が16個) 
オプションの中で1番高い。

特徴
平常時でも読み取りのみアクセス可能。
サービスによってはサポートされていないオプション(例:Azure Files)

サポートされるストレージアカウント

  • Standard 汎用 v2

コスト比較

下記サイトを使用して比較してみました。
Azure Storage Blob の価格 | Microsoft Azure

LRS
ZRS
GRS
RA-GRS
GZRS
RA-GZRS

Exception with an error code: 0xe (SPXERR_MIC_NOT_AVAILABLE) について

下記のMSLearnをやっているときに出てきたエラーです。
音声サービスを使用して音声対応アプリを作成する - Learn | Microsoft Docs
AI-102-AIEngineer


演習の最後で実行したところ、下記のようなエラーが出ました。

Exception with an error code: 0xe (SPXERR_MIC_NOT_AVAILABLE) 

調べたところ、どうやらマイクが使えない状況なのではないかということ。
半信半疑でマイク設定を見てみると確かに…
f:id:mitsunooon:20220115232154j:plain

マイクが使えるPCで実行しなおしたところ、無事に実行できました。
音声通話もしたことのあるPCだったので、マイクが使えないとは全く疑わなかったのでしばらく時間がかかりました。
特定のアプリを使用してリモートで接続していたので、その影響のようでした。

AI-900に向けた試験対策

はじめに

先日AI-900を受験してきました。
ぎりぎりの合格でしたが、試験対策でやったことを書いておきます。

AI-900とは

MCP試験(マイクロソフト認定プロフェッショナル試験)のひとつです。
入門編の位置づけで、AI-900は機械学習人工知能の概念、それに関連する Microsoft Azure サービスの基礎知識が問われます。
Exam AI-900: Microsoft Azure AI Fundamentals - Learn | Microsoft Docs

事前スペック

・Cognitive Servicesの一部サービスを触ったことがある(Custom Vision,QnA Maker,Form Recognizer,Bot Framework Composer等)
機械学習に関する知識はほぼ皆無。

試験対策にやったこと

Microsoft Learn
試験ページにあるラーニングパスを一通りやりました。
Exam AI-900: Microsoft Azure AI Fundamentals - Learn | Microsoft Docs

特に大事な部分については後述で紹介する記事を参照いただくと良いです。
私は機械学習そのものの基礎知識が欠けているので、Azure Machine Learningのモジュール内容がよくわからずMS Learnを進めることすら困難でしたが、やっておいて良かったです。

追加で下記2つのラーニングパスもやりました。
大事な部分の理解が深められた気がします。
ニーズに最適な AI サービスを選択する (AZ-900) - Learn | Microsoft Docs
責任ある AI の基本原則を特定する - Learn | Microsoft Docs


受験レポを参考にする
AI-900の受験を決めてからすぐに参考にさせていただきました。
試験で大事な部分についてわかりやすくしっかりと書かれているので、試験勉強の指標にさせていただきました。
Microsoft 資格 AI-900 / DP-100 勉強法 - Qiita

試験の直前くらいにお見掛けして、参考にさせていただきました。
Microsoft Azure AI Fundamentals (AI-900)チャレンジ_4日目~試験当日 - よしなしごとをかきつくれば


Cogbotコミュニティに参加する
機械学習については知識ゼロですが、Cognitive Servicesには興味があったので、Cogbotコミュニティに定期的に参加しています。
Cognitive Servicesに関する最新のアップデート情報が聞けるのはもちろん、それぞれのサービスの具体的な使い方なども聞けるのでそれが試験にとても役立った気がします。
勉強会の開催情報はconnpassやFacebookで発信されていますので見てみてください。

connpass
Cogbot コミュニティ - connpass

Facebook
Cogbot コミュニティ!

おわりに

いつも試験関係は過去問に頼りきりなのですが、今回はMS Learnだけで済んだので良かったです。
練習で作ったリソースは削除を忘れないようにしましょう!(結構高いので…

Azure CLIで使用するサブスクリプションを変更する方法

はじめに

Azure CLIでリソースを作成するときに、使用するサブスクリプションを選択する方法をメモ程度に。
下記の公式サイトを自分用に整理したような感じです。

 

参考サイト

Azure CLI を使用して Azure サブスクリプションを管理する | Microsoft Docs

Azure Cloud Shell のクイックスタート - Bash | Microsoft Docs

Output formats for Azure CLI | Microsoft Docs

 

手順

1.自分が利用できるサブスクリプションを確認する

下記コマンドで自分が利用できるサブスクリプションが確認できます。

コマンド:az account list

f:id:mitsunooon:20200915153816j:plain

 

オプションで表示形式を指定することもできます。
デフォルトはJSON形式表示。yaml、tableなどが選べます。

オプション:--output

コマンド:az account list --output table

f:id:mitsunooon:20200915154109j:plain

 

2.現在の規定のサブスクリプションを確認する

確認方法①

上記コマンド結果から判断します。

IsDefaultがtrueになっているものが今のデフォルトのサブスクリプションです。

f:id:mitsunooon:20200915154125j:plain

 

確認方法②

下記コマンドを実行して、表示されたサブスクリプションが現在のデフォルトです。

コマンド:az account show

f:id:mitsunooon:20200915154147j:plain

 

3.デフォルトで使用するサブスクリプションを設定する

下記コマンドでデフォルトで使用するサブスクリプションの名前を指定して設定します。

コマンド:az account set --subscription 'my-subscription-name'

f:id:mitsunooon:20200915154216j:plain

コマンドが成功しても特に何も返ってこないので、2の確認方法で指定したサブスクリプションがデフォルトになったか確認します。

 

おまけ:リソース作成の時だけサブスクリプションを指定したいとき

サブスクリプション指定のオプションを付けます。

例:az vm create --subscription "My Demos" --resource-group MyGroup --name NewVM --image Ubuntu

 

マイクラサーバーのアップデートとバックアップ

はじめに

以前、マイクラサーバーをAzure上に立てました。

Azureでマイクラサーバーをたてる - オンプレ系インフラエンジニアがAzureを勉強する

 

Minecraftというゲームはアップデートが頻繁にあり、
サーバー側もちゃんと最新版を適用しないと遊べなくなってしまいます。
(サーバーの期限が切れているなどのエラーが出ます。

今回は、マイクラサーバーのアップデートについて書いていきます。

さらにアップデートに失敗したときに復元できるようにしたいので、Azure Backupを使ったバックアップもやってみます。

先にアップデートについて書いてますが、本来であればバックアップ作業のほうが先です。
また、本当は詳しいパラメータや設定ファイルの説明などができたらよいのですが、

未だそこまで理解が及んでいないので、実際にアップデート作業をしてうまくいった例をふわっと紹介します。

 

参考サイト様

マイクラアップデート bedrock-server-1.11.0.23 | 大人の自由研究


アップデート対象

OS:Ubuntu 18.04
Minecraft:Bedrock Edition 1.16.1.02

 

用意するもの

アップデート資材

https://minecraft.azureedge.net/bin-linux/bedrock-server-1.16.20.03.zip

 

アップデート手順

イクラサーバーにSSHで接続し、stopコマンドで止めます。

f:id:mitsunooon:20200814220410p:plain

 

固有設定が入ってる必要そうなファイルをコピーしておきます。

初めてのアップデートの時は怖かったので、念のためマイクラ関係のファイルは全部コピーしました。

  • permissions.json
  • server.properties
  • whitelist.json

f:id:mitsunooon:20200814220446p:plain


wgetコマンドで最新のデータをダウンロードします。

f:id:mitsunooon:20200814224140p:plain

 

unzipで展開します。
All上書きします。

f:id:mitsunooon:20200814220745p:plain

 

コピーしておいた下記ファイルを戻します。

  • permissions.json
  • server.properties
  • whitelist.json

この時点でのファイル一覧はこんな感じです。

f:id:mitsunooon:20200814220846p:plain

 

screenコマンドでマイクラサーバー起動用の画面に入ります。

実行コマンドで起動させます。

f:id:mitsunooon:20200814220940p:plain

ちゃんとバージョンが変わっていますね。
ログイン確認してみても、ちゃんと同じワールドになっています。

 

イクラのアップデート自体の手順は以上になります。

 

バックアップ手順

今回せっかくマイクラサーバーをAzure上に立てているので、Azure Backupを設定してみたいと思います。

 

参考サイト様

Recovery Services コンテナーに Azure VM をバックアップする - Azure Backup | Microsoft Docs

  

Azure Backupの設定

Azure Backupを初めて使うのでコスト感が怖いのですが、下記を参考に控えめなバックアップ設定にしたいと思います。

料金 - クラウド バックアップ | Microsoft Azure


[仮想マシン]>[バックアップ]でバックアップを作成します。

f:id:mitsunooon:20200814222109j:plain

 

デフォルトはDailyですが、そこまでまめじゃなくていいので、Weeklyくらいにします。
バックアップポリシーは自分で作成し、後から変更することもできます。

データの保持期間が短いバージョンとか

f:id:mitsunooon:20200814222212j:plain

f:id:mitsunooon:20200814222228j:plain

バックアップ設定が作られるとリソースグループに[Recovery Services コンテナー]というのも同時に作られます。(新規作成を選択している場合)

 

早速バックアップを取得してみます。

[仮想マシン]>[バックアップ]>[今すぐバックアップ]を実行します。

f:id:mitsunooon:20200814222654j:plain

 

バックアップジョブから現在のステータスを確認することができます。

仮想マシンを起動したままのバックアップは時間がかかると思います。

f:id:mitsunooon:20200814222839p:plain


設定してからしばらくの期間、きちんとバックアップポリシーが動いていればこんな感じに表示されます。

f:id:mitsunooon:20200814222935p:plain

ちなみに、バックアップ取得時の仮想マシンの状態によって取得されるデータの種類が異なるようです。

私が実際にバックアップを取ってみて確認できたのは、仮想マシンをシャットダウンしている時のバックアップはクラッシュコンシステント、仮想マシンが起動している時のバックアップはファイルシステム整合性でした。

参考

Azure Backup で取得される Azure 仮想マシン バックアップの一貫性について | 焦げlog

 

幸いまだ復元しなければならないような事態には陥っていないですが、
テストで[VMの復元]をしたところ、VM自体は丸々復元されていたので大丈夫でないかと思っています。
復元の際の参考

Azure portal を使用して VM を復元する - Azure Backup | Microsoft Docs

 

おわりに

全体的にふわっとした検証結果で申し訳ないですが、上記手順で今のところ問題なく遊べているので、何かの参考になれば幸いです。

 

 

Bot Framework ComposerでLINEボットを作ったときにつまづいたところ

はじめに

Bot Framework ComposerというGUIBot Frameworkベースのチャットボットが作れるツールがあります。
これの公式チュートリアルで、郵便番号を送るとお天気を教えてくれるチャットボットが作れるようなので触ってみたいと思います。

せっかくチャットボットならば、ローカルで動かすだけではつまらないのでLINEで動くボットにします。

 

参考サイト様

Microsoft公式サイト チュートリアル

docs.microsoft.com

 

上記を日本語でわかりやすく書いてくださっている記事

qiita.com

 

LINEボットにするときに参考にさせていただいた記事

qiita.com

 

作成方法(つまづいたところ)

作成方法といっても、上記参考サイト様の通りにやれば作れてしまうので、
ここでは私が詰まったところについて書いていきます。

 

Azureのリソース作成

Composerで作ったチャットボットをLINEなどで使えるようにするにはAzure Bot Serviceを使う必要があります。
そのために必要なAzureのリソースは下記のコマンド一つで作成することができます。
参考資料:Publish a bot to Azure - Bot Composer | Microsoft Docs

node provisionComposer.js --subscriptionId=<YOUR AZURE SUBSCRIPTION ID> --name=<NAME OF YOUR RESOURCE GROUP> --appPassword=<APP PASSWORD> --environment=<NAME FOR ENVIRONMENT DEFAULT to dev>

 

しかしこれがこのままではうまくいかず…
下記のようなエラーが出ます。

f:id:mitsunooon:20200715220358j:plain

 

参考サイト様をたどった結果、上記のコマンドに--tenantIdのオプションを追加することで解決しました。
--tenantIdにはディレクトリIDをいれます。

node provisionComposer.js --subscriptionId=<YOUR AZURE SUBSCRIPTION ID> --name=<NAME OF YOUR RESOURCE GROUP> --appPassword=<APP PASSWORD> --environment=<NAME FOR ENVIRONMENT DEFAULT to dev> --tenantId=<ディレクトリID>

f:id:mitsunooon:20200715220640j:plain

f:id:mitsunooon:20200715220438j:plain

 

CosmosDBの無料プラン化

上記のコマンドでAzureリソースを作成すると、こんなラインナップのリソースが作られます。

f:id:mitsunooon:20200715220517j:plain

 

CosmosDBがありますね。
実はこのCosmosDBは有料プランです。恐ろしい!
しかも今は作成した後にプラン変更というものができないようです。
なので、無料プランにするには、上記のコマンドを実行する前に、設定ファイルにパラメータを一つ追加します。

参考資料:Create a free-tier Azure Cosmos DB account


Composerで作成したbotスクリプトの中に[template-with-preexisting-rg.json]というファイルがあります。
この中の下記の部分に一行追加します。

"enableFreeTier": true

f:id:mitsunooon:20200715220852j:plain

Functionsは使わないつもりでいますが、念のため[function-template-with-preexisting-rg.json]のファイルにも同様のパラメータを入れておきます。

これでAzureのリソース作成のコマンドを実行すれば、CosmosDBは無料プランになっています。
App Serviceなど他のリソースも無償プランにしておけばかなり低コストでbotを使うことができます。

 

ボットの更新

ボットを作った後も、機能の追加や修正で更新することがあると思います。
いざ更新後に公開しようとすると、アクセストークンが期限切れしていて、Publishに失敗することがあります。

f:id:mitsunooon:20200715221245j:plain

 

その場合には、下記のコマンドでアクセストークンを再発行します。

az account get-access-token

参考資料:Publish a bot to Azure - Bot Composer | Microsoft Docs

 

再発行したアクセストークンをpublish profileに書き直して保存すればOKです。

f:id:mitsunooon:20200715221350j:plain

f:id:mitsunooon:20200715221400j:plain

 

Bot analyticsを使う

せっかく作ったボットなので、アナリティクスが見たいです。
下記の項目を設定するだけで簡単に確認ができます。

  • Application Insights インストルメンテーション キー
  • Application Insights API キー
  • Application Insights アプリケーション ID

参考資料:

Bot analytics - Bot Service - Bot Service | Microsoft Docs

Application Insights keys - Bot Service - Bot Service | Microsoft Docs

 

●Application Insights インストルメンテーション キーの取得

[リソースグループ]>[Application Insights]>[インストルメンテーション キー]の部分になります。

f:id:mitsunooon:20200715221554j:plain


●Application Insights API キーの取得

[リソースグループ]>[Application Insights]>[APIアクセス]>[APIキーの作成]

f:id:mitsunooon:20200715221716j:plain

 

表示名を記入し、[利用統計情報の読み取り]にチェックを入れてキーを生成します。

f:id:mitsunooon:20200715221833j:plain
このAPIキーは生成直後しか確認できないのでしっかりコピーしておきます。

f:id:mitsunooon:20200715221846j:plain


●Application Insights アプリケーション ID

[リソースグループ]>[Application Insights]>[APIアクセス]>[アプリケーションID]の部分になります。

f:id:mitsunooon:20200715221631j:plain

 

上記3つを下記に設定します。
[ボット チャンネル登録]>[設定]>[分析]

f:id:mitsunooon:20200715221938j:plain

 

保存が終わり、しばらくすると[分析]のところでボットの利用状況が確認できます。

f:id:mitsunooon:20200715221951j:plain

完成品

作ったLINEボットのQRコードです。

「天気」と送ると郵便番号からお天気を教えてくれます。

ぜひ触ってみてください。

f:id:mitsunooon:20200715222344j:plain


おわりに

ComposerはGUIなので、直感的に作りやすいと思います。

Azure Bot Serviceとの連携もしやすいので、いろんなチャンネルで使えそうなのも魅力です。

LUISやQnAmakerなどの自然言語処理系との連携も簡単そうなので、挑戦してみたいです。

 

ちなみに、今回の内容は下記勉強会でお話した内容になります。

cogbot.connpass.com

くらでべさんのYouTubeチャンネルにアーカイブが上がると思いますので
ぜひそちらも見てみてください。
Composerだけでなく、TypeScriptやC#でのBot Frameworkの使い方が見れます!
デモがたくさんなのでおすすめです!

その時の資料です

www.slideshare.net