浅草橋青空市場

Microsoft Azure のニュースや情報を中心にあれこれと

GAしたQnA Makerをちょっと試してみた

build のタイミングでQnA MakerがGAしましたね。

blog.botframework.com

簡単に試したのでTwitterのログをまとめておきます。

Azure上のLinux VMにAzure AD認証でログインする

Linux VM用に「Azure AD login VM extension」というVM機能拡張が用意されたおかげで、Azure AD認証でログインできるようになりました。詳しくはこちらのドキュメントを。

docs.microsoft.com

対象のディストリビューションとバージョンはこんな感じ。

Distribution Version
CentOS CentOS 6.9 and CentOS 7.4
RedHat Enterprise Linux RHEL 7
Ubuntu Server Ubuntu 14.04 LTS, Ubuntu Server 16.04 and Ubuntu Server 17.10

準備

既にLinux VMがある場合はextensionを導入するだけです。実質1行。

az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory.LinuxSSH \
    --name AADLoginForLinux \
    --resource-group [VMのリソースグループ名] \
    --vm-name [VM名]

インストールが終わったら、VMに対してRBACの権限を割り当てます。

OSに対して管理者権限でログインしたい場合は「Virtual Machine Administrator Login」を、一般ユーザーの場合は「Virtual Machine User Login」を選びます。

f:id:yhara90:20180511190837p:plain

VMsshする

「-l」オプションを付けてsshでログインします。

ssh -l azureuser@contoso.onmicrosoft.com [VMのIPアドレス/FQDN] -p 22

URLとコードが表示されるので、URLをブラウザで開いてコードを入力しましょう。デバイスログインの仕組みですね。最近はCloud Shellばかり使っていたので久々に見ました。

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code [コード] to authenticate. Press ENTER when ready.

ここでコードを入力して、

f:id:yhara90:20180511191716p:plain f:id:yhara90:20180511192023p:plain

ここまで来たらターミナルの方でEnterを押せばログイン完了です。無事にログインできました。

f:id:yhara90:20180511192516p:plain

元のユーザー情報が消えたり制限されたりするわけではないので安心です。逆に制限したい場合は各自でケアするということですね。

Azure Database for MySQLのFirewallルールをAzure CLIから設定する

メモ代わりに。 Azure CLIからAzure Database for MySQLのFirewallルールを設定する方法です。

az mysql server firewall-rule create --resource-group <リソースグループ名> --server <サーバー名> --name AllowAzureIP --start-ip-address <開始IPアドレス> --end-ip-address <終了アドレス>

Azureサービスからのアクセスを許可したい場合はこれ(0.0.0.0)で良いようです。

az mysql server firewall-rule create --resource-group <リソースグループ名> --server <サーバー名> --name AllowAzureIP --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

WAF & SSLのApplication GatewayをARM Templateでデプロイする

ロードバランサーSSLを終端してついでにWAFも」というご要望で登場するのがAzureのApplication Gatewayです。よくある構成なのでARM Templateにしておきました。プロビジョニングで20分、設定変更のつど分単位で待たされるので、効率よくやりたいですね。

テンプレートからのデプロイ方法は、お手軽なところでポータルかを使う手順をご紹介しておきます。

  1. テンプレートデプロイ用のブレードを開く

    「Create a Resource」から「Template deployment」で検索するか、以下のURLから直接開けます。開いたら「Create」ボタンを押して進んでください。

    https://portal.azure.com/#create/Microsoft.Template

  2. 「Build your own template in the editor」をクリック

    f:id:yhara90:20180413210352p:plain

  3. テンプレートを貼り付けて「Save」をクリック

    f:id:yhara90:20180413210434p:plain

  4. パラメーターを適宜入力

    f:id:yhara90:20180413210524p:plain

    (参考)Base64への変換

    PowerShell

    $path="C:\Users\my\Documents\mycert.pfx"

    [Convert]::ToBase64String([System.IO.File]::ReadAllBytes($path))

    Linux / macOS

    openssl base64 -in mycert.pfx -out mycert.pfx.txt

  5. しばらくお待ちください

    ドキュメントによると「プロビジョニングに最大 20 分かかります」とのことでしばらく待ちましょう。

    Azure Application Gateway に関してよく寄せられる質問 | Microsoft Docs

▼Application Gateway のテンプレート(WAF & SSL)

gist.github.com

▼HTTPからHTTPSへのリダイレクトはテンプレートに入れてないので、設定したい場合はこちらのPowerShellをどうぞ

gist.github.com

Azure Database for PostgreSQLでCollation(照合順序)を指定してCREATE DATABASEしたい

というお困り状態を見かけたので。
これまで使っていたCREATE DATABASEをAzureのPostgreSQLに発行すると「ERROR: invalid locale name: "ja_JP.utf8"」となってしまう場合があるようです。

postgres=> CREATE DATABASE my_new_database ENCODING='UTF8' LC_COLLATE='ja_JP.utf8' LC_CTYPE='ja_JP.utf8';
ERROR:  invalid locale name: "ja_JP.utf8"

これはPostgreSQLWindows上で動いているのが原因のようで、エンコーディングを「UTF8」とする場合、COLLATIONの日本語ロケールは「Japanese_Japan.932」を指定すると良いようです。

ロケール(国際化と地域化) | Let's Postgres

Windows で UTF8 エンコーディングを使う場合のみ、ロケールエンコーディングにコードページ 932 (SJIS) を使うことができます。これは Windows の C ライブラリが UTF8 でのロケール処理をサポートしていないためで、PostgreSQL 側で専用の対応を行っています。

だそうです。SQLで書くとこんな感じです。

postgres=> CREATE DATABASE my_new_database ENCODING='UTF8' LC_COLLATE='Japanese_Japan.932' LC_CTYPE='Japanese_Japan.932' TEMPLATE='template0';

ちなみに、ロケールを指定しない場合のデフォルトは「English_United States.1252」となってました。

せっかくなので、Azure Database for PostgreSQL 上でいくつかの照合順序を指定して、実際にどのような並びになるのか簡単に試してみました。

Japanese_Japan.932 English_United States.1252 C
う゛
う゛ う゛

#これだけ見るとデフォルト(English_United States.1252)でいいんじゃ?って気にならなくもない。

Azureポータル上でディスク(Disks)リソースから仮想マシンが作れるようになっていました

表紙で言い切った感はありますが、Managed Disksに「Create VM」ボタンが付きました。これで、可用性セットを出し入れするのに仮想マシンを作り直すときや、テスト用にスナップショットを取って仮想マシンを複製、みたいな作業がポータルのみで完結できますね。だいぶ楽になります。

VMにアタッチ中のディスクはボタンがグレーアウトしますので、スナップショットを取ってからManaged Disksを作成 --> VMを作成、ですね。

f:id:yhara90:20180408002936p:plain

クラシックのディスクリソースにも「Create VM」ボタンが付いていますね(前から?)。

f:id:yhara90:20180408003531p:plain

Azure AutomationのギャラリーにあるグラフィカルRunbookをサービスプリンシパルに対応させてみる

この記事の続き。 asazure.hatenablog.jp

Automation Account --> Runbooks --> Browse Gallery と辿ったら出てくるこの2つです。

f:id:yhara90:20180407230624p:plain

手順

先にAutomation Accountのアセットに、サービスプリンシパルの情報でCredentialを、テナントIDの情報でVariablesを作っておきましょう。前記事にも書きましたが AppIdが「User name」、パスワードは「Password」です。

  1. Runbookをインポートして作成
  2. Edit
  3. エディタ上の「Input and Output」をクリック
  4. 「AzureConnectionAssetName」は使わないので削除
  5. 「Add Input」から、サービスプリンシパル用のCredential名を指定するためのInputを定義(String)。
  6. OKでブレードを閉じながらグラフィカルエディタまで戻る
  7. 最上段の「Get Run as Connection」を削除
  8. 左メニューの「CMDLETS」から「Get-AutomationPSCredential」を探して「Add Canvas」。検索するのが早いが階層としては「Orchestrator.AssetManagement.Cmdlets」の中にある
  9. 「Get-AutomationPSCredential」と下の「Connect to Azure」をドラッグアンドドロップでつなぐ。
  10. 「Get-AutomationPSCredential」をクリックし、「Parameters」を開く
  11. 「NAME」を開き、「Runbook input」から先に作ったサービスプリンシパル用Credential名のInputを選択 --> OK
  12. 「Connect to Azure」をクリック、「Parameters」を開いて以下のように編集
    • 「Parameter Sets」から「ServicePrincipal」を選択
    • 「Credential」は「Data Source」に「Activity Output」を選択、下のボックスで「Get-AutomationPSCredential」
    • 「Serviceprincipal」は「Data Sourceに「Constant value」を指定して「True」を選択
    • 「Tenantid」は「Variable asset」を選択してテナントIDの入ったVariablesを選択

修正は以上です。保存時にエラーが出たときには、戻ってみると指定したはずの項目が指定されていなかったりしますので、改めて指定するか、何度やってもダメならブラウザをリロードしたり、コマンドレットを消して置き直すなどしてみましょう。