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
オプションで表示形式を指定することもできます。
デフォルトはJSON形式表示。yaml、tableなどが選べます。
オプション:--output
コマンド:az account list --output table
2.現在の規定のサブスクリプションを確認する
確認方法①
上記コマンド結果から判断します。
IsDefaultがtrueになっているものが今のデフォルトのサブスクリプションです。
確認方法②
下記コマンドを実行して、表示されたサブスクリプションが現在のデフォルトです。
コマンド:az account show
3.デフォルトで使用するサブスクリプションを設定する
下記コマンドでデフォルトで使用するサブスクリプションの名前を指定して設定します。
コマンド:az account set --subscription 'my-subscription-name'
コマンドが成功しても特に何も返ってこないので、2の確認方法で指定したサブスクリプションがデフォルトになったか確認します。
おまけ:リソース作成の時だけサブスクリプションを指定したいとき
サブスクリプション指定のオプションを付けます。
例:az vm create --subscription "My Demos" --resource-group MyGroup --name NewVM --image Ubuntu
APIの動作確認でよく使うツール3選
はじめに
Web APIを作ったときに動作確認のために使っているツール3種類についてのお話です。
各ツールで同じGETリクエストをするとそれぞれどんな風に結果を確認できるのか、
個人的に感じた使い勝手と使い方をメモ程度にという感じです。
使用するAPI
お天気情報APIのOpen Weather Mapを使います。
登録するだけでAPIキーが手に入り、無償で使えます。
今回はGETまたはPOSTで指定した郵便番号の天気を教えてくれる機能を使います。
Сurrent weather and forecast - OpenWeatherMap
リクエスト例)
http://api.openweathermap.org/data/2.5/weather?zip=100-0005,jp&units=metric&lang=ja&APPID=<個人のAPIキー>
Postman
GUIでAPIテストができるツールです。
かなりメジャーな部類なので、詳しい使い方の情報はたくさんあります。
GETリクエストをするとこんな感じです。
返ってくるJSON形式も整形されていて分かりやすいです。
今回の題材では不要ですが、
もしCookieの情報が必要だったり、POSTの時に引数を渡す必要があるときもGUIなので直感的に設定できます。
ひとつのAPIを手軽に確認したいときやCrome DevToolsに近い形で情報が見たいときなどに使ってます。
Visual Studio CodeのREST Client機能
Visual Studio Codeの拡張機能のひとつであるREST Clientを使います。
詳細は下記サイト様がわかりやすいです。
VS Code上でHTTPリクエストを送信し、VS Code上でレスポンスを確認できる「REST Client」拡張の紹介 - Qiita
使い方としては、httpファイルをVS Codeで開きます。
[Send Request]ボタンをクリックすると、VS Code上でレスポンスが確認できます。
こちらもJSONが整形されていて見やすいですね。
###で区切ることができるので、 複数のリクエストをひとつのファイルにまとめることができます。
当然コメントも入れられます。変数設定もできます。引数も渡せます。
複数のAPIをテンポよく確認したいときやチームメンバー複数人でテストするときに使っています。
ただ、VS Code REST Client上だとエラーになるけどPostmanだと動く、というようなことがたまーにあるので、念のため Postmanも使えるようにはしています。
今回の題材のお天気APIを使う 簡単なhttpファイルはgithubにあげてます。
GitHub - kgnk-hkr/WeatherAPI_HTTPTest_http
curlコマンド
黒い画面好きとしては一番馴染み深くとっつきやすいです。
レスポンスによっては文字化け対策をする必要があります。
結果がUTF-8で返ってくるなら下記のコマンドを先に実行しておきます。
>chcp 65001
上記のままだと整形されていなくて非常に見づらいです。
これを避けるためにjqを使えるようにします。
https://stedolan.github.io/jq/
上記よりjq-win64.exeをダウンロードしてきたらファイル名をjq.exeに変更して「C:\windows\system32」に格納します。
コマンド実行時に、末尾に「| jq」を付けます。
ただし、オプション-i、-Iとの併用はできないのでHTTPレスポンスヘッダーの取得結果も欲しい場合は工夫が必要です。
Cookieの情報が必要な時はオプション-bを付けます。
参考サイト様
curl の -b, -c (--cookie, --cookie-jar) オプションが便利 - ryota-ka's blog
例) curl -I -b test=AAAA -X GET "https://localhost:5000/api"
その他の細々したオプションは下記サイト様がまとまっています。
問題はPOSTです。
引数をJSON形式で渡してリクエストを送ろうとするとBad Request地獄に落ちました。
文法は間違っていないのになぜなぜとなっていたところ、
下記サイト様で解決しました。本当にありがとうございました。
Windows版curlでJSONをPOSTする際に困った話 - Qiita
私はWindows環境だったので、-dオプションの後ろの「"」を「¥"」に変更したらうまくいきました。
例) curl -i -X POST https://localhost:5000/api/ -H "Content-Type: application/json" -H "Accept: application/json" -d "{¥"test1¥":[{¥"test1¥": 0}], ¥"test2¥":1, ¥"test3¥":¥"aaa¥"}"
さらに、curlを使えば複数のAPIテストをbatファイルでまとめて実行できるしログもとれる! 素晴らしい。
(Postman、VSCodeでのログの取り方を知らないだけです。すみません。
今回の題材のお天気APIを使う簡単なbatファイルはgithubにあげてます。 (例外処理的なものは含んでいないのでお試し程度に…
GitHub - kgnk-hkr/WeatherAPI_HTTPtest_bat
おわりに
今回は普段私がAPI開発の時に動作確認に使っているツールのお話でした。
本当はそれぞれの使い方をもう少し掘り下げて3本立てにしたかったのですが、そこまでの理解度に至らず…
もう少し使いこなせるようになったらまた掘り下げます。
マイクラサーバーのアップデートとバックアップ
はじめに
以前、マイクラサーバーを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コマンドで止めます。
固有設定が入ってる必要そうなファイルをコピーしておきます。
初めてのアップデートの時は怖かったので、念のためマイクラ関係のファイルは全部コピーしました。
wgetコマンドで最新のデータをダウンロードします。
unzipで展開します。
All上書きします。
コピーしておいた下記ファイルを戻します。
この時点でのファイル一覧はこんな感じです。
screenコマンドでマイクラサーバー起動用の画面に入ります。
実行コマンドで起動させます。
ちゃんとバージョンが変わっていますね。
ログイン確認してみても、ちゃんと同じワールドになっています。
マイクラのアップデート自体の手順は以上になります。
バックアップ手順
今回せっかくマイクラサーバーをAzure上に立てているので、Azure Backupを設定してみたいと思います。
参考サイト様
Recovery Services コンテナーに Azure VM をバックアップする - Azure Backup | Microsoft Docs
Azure Backupの設定
Azure Backupを初めて使うのでコスト感が怖いのですが、下記を参考に控えめなバックアップ設定にしたいと思います。
料金 - クラウド バックアップ | Microsoft Azure
[仮想マシン]>[バックアップ]でバックアップを作成します。
デフォルトはDailyですが、そこまでまめじゃなくていいので、Weeklyくらいにします。
バックアップポリシーは自分で作成し、後から変更することもできます。
データの保持期間が短いバージョンとか
バックアップ設定が作られるとリソースグループに[Recovery Services コンテナー]というのも同時に作られます。(新規作成を選択している場合)
早速バックアップを取得してみます。
[仮想マシン]>[バックアップ]>[今すぐバックアップ]を実行します。
バックアップジョブから現在のステータスを確認することができます。
仮想マシンを起動したままのバックアップは時間がかかると思います。
設定してからしばらくの期間、きちんとバックアップポリシーが動いていればこんな感じに表示されます。
ちなみに、バックアップ取得時の仮想マシンの状態によって取得されるデータの種類が異なるようです。
私が実際にバックアップを取ってみて確認できたのは、仮想マシンをシャットダウンしている時のバックアップはクラッシュコンシステント、仮想マシンが起動している時のバックアップはファイルシステム整合性でした。
参考
Azure Backup で取得される Azure 仮想マシン バックアップの一貫性について | 焦げlog
幸いまだ復元しなければならないような事態には陥っていないですが、
テストで[VMの復元]をしたところ、VM自体は丸々復元されていたので大丈夫でないかと思っています。
復元の際の参考
Azure portal を使用して VM を復元する - Azure Backup | Microsoft Docs
おわりに
全体的にふわっとした検証結果で申し訳ないですが、上記手順で今のところ問題なく遊べているので、何かの参考になれば幸いです。
Bot Framework ComposerでLINEボットを作ったときにつまづいたところ
はじめに
Bot Framework ComposerというGUIでBot Frameworkベースのチャットボットが作れるツールがあります。
これの公式チュートリアルで、郵便番号を送るとお天気を教えてくれるチャットボットが作れるようなので触ってみたいと思います。
せっかくチャットボットならば、ローカルで動かすだけではつまらないのでLINEで動くボットにします。
参考サイト様
上記を日本語でわかりやすく書いてくださっている記事
LINEボットにするときに参考にさせていただいた記事
作成方法(つまづいたところ)
作成方法といっても、上記参考サイト様の通りにやれば作れてしまうので、
ここでは私が詰まったところについて書いていきます。
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>
しかしこれがこのままではうまくいかず…
下記のようなエラーが出ます。
参考サイト様をたどった結果、上記のコマンドに--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>
CosmosDBの無料プラン化
上記のコマンドでAzureリソースを作成すると、こんなラインナップのリソースが作られます。
CosmosDBがありますね。
実はこのCosmosDBは有料プランです。恐ろしい!
しかも今は作成した後にプラン変更というものができないようです。
なので、無料プランにするには、上記のコマンドを実行する前に、設定ファイルにパラメータを一つ追加します。
参考資料:Create a free-tier Azure Cosmos DB account
Composerで作成したbotのスクリプトの中に[template-with-preexisting-rg.json]というファイルがあります。
この中の下記の部分に一行追加します。
"enableFreeTier": true
Functionsは使わないつもりでいますが、念のため[function-template-with-preexisting-rg.json]のファイルにも同様のパラメータを入れておきます。
これでAzureのリソース作成のコマンドを実行すれば、CosmosDBは無料プランになっています。
App Serviceなど他のリソースも無償プランにしておけばかなり低コストでbotを使うことができます。
ボットの更新
ボットを作った後も、機能の追加や修正で更新することがあると思います。
いざ更新後に公開しようとすると、アクセストークンが期限切れしていて、Publishに失敗することがあります。
その場合には、下記のコマンドでアクセストークンを再発行します。
az account get-access-token
参考資料:Publish a bot to Azure - Bot Composer | Microsoft Docs
再発行したアクセストークンをpublish profileに書き直して保存すればOKです。
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]>[インストルメンテーション キー]の部分になります。
●Application Insights API キーの取得
[リソースグループ]>[Application Insights]>[APIアクセス]>[APIキーの作成]
表示名を記入し、[利用統計情報の読み取り]にチェックを入れてキーを生成します。
このAPIキーは生成直後しか確認できないのでしっかりコピーしておきます。
●Application Insights アプリケーション ID
[リソースグループ]>[Application Insights]>[APIアクセス]>[アプリケーションID]の部分になります。
上記3つを下記に設定します。
[ボット チャンネル登録]>[設定]>[分析]
保存が終わり、しばらくすると[分析]のところでボットの利用状況が確認できます。
完成品
作ったLINEボットのQRコードです。
「天気」と送ると郵便番号からお天気を教えてくれます。
ぜひ触ってみてください。
おわりに
ComposerはGUIなので、直感的に作りやすいと思います。
Azure Bot Serviceとの連携もしやすいので、いろんなチャンネルで使えそうなのも魅力です。
LUISやQnAmakerなどの自然言語処理系との連携も簡単そうなので、挑戦してみたいです。
ちなみに、今回の内容は下記勉強会でお話した内容になります。
くらでべさんのYouTubeチャンネルにアーカイブが上がると思いますので
ぜひそちらも見てみてください。
Composerだけでなく、TypeScriptやC#でのBot Frameworkの使い方が見れます!
デモがたくさんなのでおすすめです!
その時の資料です
AZ-900を2回受験した話
はじめに
先日AZ-900を取得しました。
1回目は落ちて、2回目で取得しました。
そんなに難易度の高くない、入門編といわれている資格なので落ちた話をするのは大変恥ずかしいのですが、
どなたかの励ましになれば幸いです。
1回目と2回目でどういう勉強をしたのかを中心に書いていきます。
AZ-900とは
MCP試験(マイクロソフト認定プロフェッショナル試験)のひとつです。
その中でも、AZ-900はMicrosoft Azureの基礎編となる位置付けです。
Exam AZ-900: Microsoft Azure Fundamentals - Learn | Microsoft Docs
前提Azureスペック
・業務でAzureを触った経験は少しある。
・興味の向くまま自由に触ることがほとんど。
1回目の受験
勉強方法
Microsoftが提供している無料のFundamentals向けウェビナーを受講しました。
スケジュールが合わず、2日間のうち後半1日のみ受講しました。
MS Learnの下記モジュールをさらっと一周しました。
点数
667点/(合格700点)
全然惜しくない
普通に落ちてますね。
この時の習熟度としては、ワードを聞いたことがある、どのジャンルか、くらいのものでした。
上記レベルの理解度では全然ダメで、ちゃんと各サービスや機能がどういう特徴でどんな目的に合ったものなのかというのを理解していないといけませんでした。
2回目の受験
1回目の試験から日がたたないほうが良いと思い、2週間後に再受験しました。
再受験ポリシー的には24時間後には受けられたようです。
certification-exam-policies | Microsoft Docs
勉強方法
己の頭の足らなさは課金で補う主義なので、1回目の試験直後に下記テキストを買いました。
MS Learnの内容がより分かりやすくかみ砕かれているような感じで、とても良かったです。
これを毎晩寝る前に1章ずつ読みました。
4章くらいしかないので、何周か出来ました。
試験当日に巻末の模擬試験をやりました。
1回目の試験の問題で正解が気になったものや書籍で解説されている機能の動きが知りたいときは実機を触って確認しました。
点数
780点/(合格700点)
めっちゃぎりぎりです。
2回目の受験で、出題形式もわかっているのにぎりぎりって…恥ずかしい!!
それでも2回目で何とか合格できてよかったです。。。
感想
確かに内容の難易度はそこまで高くない印象でしたが、
Azureのコアサービスについて網羅的に把握しておく必要がありました。
業務でAzureを触っていても、全く関わらない分野の内容は特に確認しておいたほうがよさそうです。
本来であれば、無料のウェビナーをしっかり受講しておけば、それだけでも十分合格できると思います。
試験対策用に勉強をして初めて知ることも多く、今までよりもAzure関連のドキュメントが読みやすくなったような気がします。
ようやくAzureに入門できたような気持ちです。
Microsoft認定資格としてはまだまだ上がありますので、入門編でこんなに躓いていては先が思いやられるのですが、機会があったら頑張ってみようと思います。
ローカルフォルダ配下のファイルをBLOBに一括アップロードするbatファイルを作る
はじめに
BLOBストレージにファイルを一括アップロードできるbatファイルが必要になったので、作りました。
今回作るもの
特定のローカルフォルダ配下にある複数のファイルを、一括でBLOBストレージにアップロードするPowerShellスクリプトを作ります。
また、それを起動させるbatファイルまで作ります。
用意するもの
アップロード先のBLOBストレージ
Azure CLIが使用できるWindows環境
参照サイト様
Windows での Azure CLI のインストール | Microsoft Docs
az storage blob | Microsoft Docs
PowerShell のエラーコード処理 | netplanetes log
作成
ログインスクリプト
Azureにアクセスするためのログインスクリプトを作ります。
PowerShellからのログイン自体は下記コマンドでできます。
az login -u ユーザー名 -p パスワード
このコマンドを.ps1ファイルに記載します。
また、ユーザ名とパスワードは入力形式にしたいので変数化します。
パスワードは入力しているときに平文を表示したくないので、[-AsSecureString]のオプションを付けます。
$username = Read-Host "Azureアカウント"
$password = Read-Host "パスワード" -AsSecureStringaz login -u $username -p $password
これにより、スクリプト実行時には下記のような表示になります。
以上でログイン用のスクリプトはできました。
最終的なスクリプトの形は下記のGitHubを参照ください。
blob_upload_bat/login.ps1 at master · kgnk-hkr/blob_upload_bat · GitHub
アップロードのためのスクリプト
次に指定したファイルを指定したBLOBストレージにアップロードするスクリプトを作ります。
BLOBへのアップロード自体は下記コマンドでできます。
az storage blob upload-batch --account-name ストレージアカウント名 -d アップロード先のコンテナ名 --destination-path アップロード先のパス -s アップロード元のローカルフォルダパス
[アップロード元のローカルフォルダパス]を指定すると、そのフォルダ配下のファイルすべてがアップロードされます。
ログインスクリプト同様、アップロードに必要な情報は変数化します。
今回は、デフォルト値も利用したいため、デフォルト値のオプションも利用します。
Read-Hostを付けることで、対話的になるためよりユーザーに分かりやすくできます。
$defaultaccountname = 'defaultaccountname' ←これがデフォルト値
$accountname = Read-Host "ストレージアカウント名[デフォルト値:$($defaultaccountname)]"
$accountname = ($defaultaccountname,$accountname)[[bool]$accountname]$defaultcontainername = '$web' ←これがデフォルト値
$containername = Read-Host "コンテナ名[デフォルト値:$($defaultcontainername)]"
$containername = ($defaultcontainername,$containername)[[bool]$containername]$defaultdestinationpath = '/images/' ←これがデフォルト値
$destinationpath = Read-Host "アップロード先のパス[デフォルト値:$($defaultdestinationpath)]"
$destinationpath = ($defaultdestinationpath,$destinationpath)[[bool]$destinationpath]$sourcepath = Read-Host "アップロード元のフォルダーパス"
az storage blob upload-batch --account-name $accountname -d $containername --destination-path $destinationpath -s $sourcepath
このスクリプトを実行すると下記のようになります。
アップロードに最低限必要なのは以上ですが、
きちんとアップロードされたかを実行の前後で確認できるようにアップロード先のファイル一覧を取得するコマンドも追加します。
$date = (Get-Date -F G).Replace('/','').Replace(' ','_').Replace(':','');
$destbefore = $date + "_before_upload_list.txt"
$destafter = $date + "_after_upload_list.txt"az storage blob list --account-name $accountname --container-name $containername --output table --prefix $destinationpath > $destbefore
az storage blob list --account-name $accountname --container-name $containername --output table --prefix $destinationpath > $destafter
以上でファイルアップロード用のスクリプトはできました。
最終的なスクリプトの形は下記のGitHubを参照ください。
blob_upload_bat/FileUpload.ps1 at master · kgnk-hkr/blob_upload_bat · GitHub
2つのスクリプトを実行するためのbatファイル
上記2つのPowerShellスクリプトを実行するためのbatファイルを作ります。
2つのPowerShellスクリプトはbatファイルと同じ階層のフォルダに格納されていることとします。
スクリプトが失敗したときにはエラーメッセージを返すようにします。
少し長くなるので、コード自体はGitHubにて参照ください。
blob_upload_bat/Upload.bat at master · kgnk-hkr/blob_upload_bat · GitHub
このbatファイルを実行し、すべてのスクリプトが成功すると下記のようになります。
ちなみに、スクリプトが失敗すると下記のようになります。
Azureへのログインが失敗した場合
アップロード情報が間違っていてアップロードに失敗した場合
詰まったところ
スクリプトのエラー検出
上記で説明したようなコマンドをそのままスクリプトにした状態では、アップロードスクリプトが失敗していても、エラーとして検出されずに終えられてしまいました。
下記記事を参考にして、1処理ごとにデータが返されているかを確認するようにしました。
Using Azure CLI with PowerShell: error handling explained
フォルダ名に記号が入っている場合
コマンドでアップロードする場合に、アップロード先のコンテナ名に記号($など)が入っていると、ダブルクォーテーションで囲うとコマンドが通らない事象がありました。
下記の記事を参考に、シングルクォーテーションで囲ったらうまくいきました。
おわりに
エラー処理の部分などは結構苦労したのですが、細かなところは端折ってしまったので、完成形のものをご覧いただければと思います。
気力があればちゃんと書き起こします。
作成したスクリプトとbatファイルはGitHubにまとめてアップしています。
Azureでマイクラサーバーをたてる
はじめに
ずっとマイクラPEで一人で遊んでいたのですが、
マルチプレイもしてみたくなったので
Azureの勉強がてら、マイクラサーバーをAzureにたててみようと思います。
今回作るもの
準備するもの
参考サイト様
作り方
テンプレートから仮想マシンを作る
足りなくなったら拡張します。
難易度とかシード値とかですね。
ここはサーバーを立てた後でも修正できます。
ポートを設定する
ソフトウェアを展開する
sudo su -
サーバの起動方法や設定などの使い方が書いてあります。
zipファイルの中にあった、[server.properties]を編集して、アクセスするポートを設定します。
ここで設定するポートはAzureの仮想マシン上で設定したポートです。
デフォルト19132を使う場合は変更はいらないはずです。
vi server.properties
サーバーを起動させる
コンソールを分けておくことで、マイクラサーバーを起動しっぱなしにすることができて便利です。
screen
解凍したzipの中身があるところで下記のコマンドを実行し、サーバーを起動します。
LD_LIBRARY_PATH=. ./bedrock_server
[Server started.]が表示されたらOKです。
アクセスする
私はスマフォで遊んでいるのでPE版です。
コスト
起動させっぱなしとして、大体3000円/月くらいになりそうな見込みです。
おわりに