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分、設定変更のつど分単位で待たされるので、効率よくやりたいですね。
テンプレートからのデプロイ方法は、お手軽なところでポータルかを使う手順をご紹介しておきます。
テンプレートデプロイ用のブレードを開く
「Create a Resource」から「Template deployment」で検索するか、以下のURLから直接開けます。開いたら「Create」ボタンを押して進んでください。
「Build your own template in the editor」をクリック
テンプレートを貼り付けて「Save」をクリック
パラメーターを適宜入力
- 「Backend Ip Address1」は実際にはFQDNも入れられます
- 「Cert Data」はサーバー証明書(.pfx)をBase64エンコードしたテキストを貼り付けてください
- 「Cert Password」はサーバー証明書(.pfx)のパスワードを入力してください
- 他のパラメーターは適宜
(参考)Base64への変換
$path="C:\Users\my\Documents\mycert.pfx"
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes($path))
openssl base64 -in mycert.pfx -out mycert.pfx.txt
しばらくお待ちください
ドキュメントによると「プロビジョニングに最大 20 分かかります」とのことでしばらく待ちましょう。
▼Application Gateway のテンプレート(WAF & SSL)
▼HTTPからHTTPSへのリダイレクトはテンプレートに入れてないので、設定したい場合はこちらのPowerShellをどうぞ
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"
これはPostgreSQLがWindows上で動いているのが原因のようで、エンコーディングを「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 AutomationのギャラリーにあるグラフィカルRunbookをサービスプリンシパルに対応させてみる
この記事の続き。 asazure.hatenablog.jp
Automation Account --> Runbooks --> Browse Gallery と辿ったら出てくるこの2つです。
手順
先にAutomation Accountのアセットに、サービスプリンシパルの情報でCredentialを、テナントIDの情報でVariablesを作っておきましょう。前記事にも書きましたが AppIdが「User name」、パスワードは「Password」です。
- Runbookをインポートして作成
- Edit
- エディタ上の「Input and Output」をクリック
- 「AzureConnectionAssetName」は使わないので削除
- 「Add Input」から、サービスプリンシパル用のCredential名を指定するためのInputを定義(String)。
- OKでブレードを閉じながらグラフィカルエディタまで戻る
- 最上段の「Get Run as Connection」を削除
- 左メニューの「CMDLETS」から「Get-AutomationPSCredential」を探して「Add Canvas」。検索するのが早いが階層としては「Orchestrator.AssetManagement.Cmdlets」の中にある
- 「Get-AutomationPSCredential」と下の「Connect to Azure」をドラッグアンドドロップでつなぐ。
- 「Get-AutomationPSCredential」をクリックし、「Parameters」を開く
- 「NAME」を開き、「Runbook input」から先に作ったサービスプリンシパル用Credential名のInputを選択 --> OK
- 「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を選択
修正は以上です。保存時にエラーが出たときには、戻ってみると指定したはずの項目が指定されていなかったりしますので、改めて指定するか、何度やってもダメならブラウザをリロードしたり、コマンドレットを消して置き直すなどしてみましょう。
サービスプリンシパル(パスワード)でAzure AutomationのRunbookを実行する
「仮想マシンの定期的な起動・停止」みたいな定期作業をAzure AutomationのRunbookで実行したいという話は良くあると思います。 が、サービスプリンシパル(パスワードの方)を使ったブログ記事やサンプルが意外と見つからなかったので書いておきます。
※ 証明書を使う方法は公式ドキュメントにあったはず
サービスプリンシパルについて
そもそも何?という話は真壁先生のスライドをどうぞ。
www.slideshare.net
簡単な作りは他はこちらの記事を。作成にはAzure ADにしかるべき権限が必要なので、無い場合は作ってもらいましょう。
Automation Accountの作成
公式ドキュメントをどうぞ。こちらも「Azure実行アカウントの作成」を行うにはAzure ADに権限が必要です。
アセットの登録
スクリプト内で使う資格情報やテナントIDなどはAutomation Accountのアセットとして登録します。今回のスクリプトでは、サービスプリンシパルを「Credentials」に、テナントIDを「Variables」に登録しました。
サービスプリンシパルのAppIdをCredentialの「User name」に、パスワードを「Password」に登録します。テナントIDはVariableにStringとして登録しましょう。
仮想マシン起動・停止のサンプルスクリプト
こんな感じです。PowerShell WorkflowタイプのRunbookとして使えます。
パラメーターはそれぞれ以下のようになります。実行時やタイマーにセットしておきましょう。
- CredentialName : アセットに登録したサービスプリンシパルのCredential名
- ResourceGroup : 操作対象のリソースグループ名
- Action : 「Stop」もしくは「Start」
workflow Stop-Start-AzureVM { Param ( [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $credentialName, [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $ResourceGroup, [Parameter(Mandatory=$true)][ValidateSet("Start","Stop")] [String] $Action ) $credential = Get-AutomationPSCredential -Name $credentialName $tennantId = Get-AutomationVariable -Name 'tennantId' Login-AzureRmAccount -Credential $credential -Tenantid $tennantId -ServicePrincipal $AzureVMs = Get-AzureRmVM -ResourceGroup $ResourceGroup if($Action -eq "Stop") { Write-Output "Stopping VMs"; foreach -parallel ($AzureVM in $AzureVMs) { $AzureVM | Stop-AzureRmVM -Force } } else { Write-Output "Starting VMs"; foreach -parallel ($AzureVM in $AzureVMs) { $AzureVM | Start-AzureRmVM } } }
Azure Database for MySQL / PostgreSQL がGAしましたね
Azure Database for MySQL / PostgreSQL がGAとのアナウンス。お待ちしてました。
併せて、セキュリティとコンプライアンスのアナウンスも。
Securing Azure Database for MySQL and Azure Database for PostgreSQL | Blog | Microsoft Azure
SLAはSQL Databaseと同じく99.99%。なのですが、SLAのページを見るとMonthly uptime percentageが「< 99.9%」となってます(SQL DBと違う)。
(追記:2018年4月10日) いま見たら99.99%と表記されていました。
SLA for Azure Database for MySQL
GA価格は5月1日から適用、それまでは50%オフとのこと。コア数で比べるとRDS for MySQLのSingle-AZと同じくらいの金額ですかね。ベンチマークを取るとまたちょっと違った特性があるようなので、単純な比較はちょっと難しいかな?という印象でした。
サーバーをデプロイした後にPricing tier変更はまだできないようです。東日本、西日本ともハードウェアはGen4で、Memory Optimizedもまだ選べませんでした。
(追記: 2018年4月10日) こちらも東日本、西日本ともGen5、Memory Optiomizedとも選べるようになっていました。またストレージも最大2TB(6,144 IOPS)まで指定できるようになっていました。
ARMテンプレートのリファレンスはこちら。これも今後の充実に期待ですね。
docs.microsoft.com docs.microsoft.com
基本的なメトリックはAzure Monitorで取得出来ます。
ログはCLIでダウンロードする方式です。
そしてClearDBはMarketplaceから削除されたようです。これまでお世話になりました。
ClearDB removal from the Azure Marketplace
(追記: ARMのテンプレートを作っておきました)