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

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

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

 

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

GUIAPIテストができるツールです。
かなりメジャーな部類なので、詳しい使い方の情報はたくさんあります。

GETリクエストをするとこんな感じです。

返ってくるJSON形式も整形されていて分かりやすいです。

f:id:mitsunooon:20200828220017j:plain

 

今回の題材では不要ですが、

もしCookieの情報が必要だったり、POSTの時に引数を渡す必要があるときもGUIなので直感的に設定できます。

f:id:mitsunooon:20200828220816j:plain

f:id:mitsunooon:20200828220828j:plain

 

ひとつのAPIを手軽に確認したいときやCrome DevToolsに近い形で情報が見たいときなどに使ってます。

 

Visual Studio CodeのREST Client機能

Visual Studio Code拡張機能のひとつであるREST Clientを使います。

詳細は下記サイト様がわかりやすいです。

VS Code上でHTTPリクエストを送信し、VS Code上でレスポンスを確認できる「REST Client」拡張の紹介 - Qiita

f:id:mitsunooon:20200828220923j:plain

 

使い方としては、httpファイルをVS Codeで開きます。

[Send Request]ボタンをクリックすると、VS Code上でレスポンスが確認できます。

こちらもJSONが整形されていて見やすいですね。

f:id:mitsunooon:20200828221333j:plain

f:id:mitsunooon:20200828221342j:plain

 

###で区切ることができるので、 複数のリクエストをひとつのファイルにまとめることができます。

当然コメントも入れられます。変数設定もできます。引数も渡せます。

 

複数のAPIをテンポよく確認したいときやチームメンバー複数人でテストするときに使っています。

ただ、VS Code REST Client上だとエラーになるけどPostmanだと動く、というようなことがたまーにあるので、念のため Postmanも使えるようにはしています。

今回の題材のお天気APIを使う 簡単なhttpファイルはgithubにあげてます。

GitHub - kgnk-hkr/WeatherAPI_HTTPTest_http

 

curlコマンド

コマンドプロンプトで手軽に試せるcurlコマンドです。

黒い画面好きとしては一番馴染み深くとっつきやすいです。

f:id:mitsunooon:20200828221749j:plain

 

レスポンスによっては文字化け対策をする必要があります。

結果がUTF-8で返ってくるなら下記のコマンドを先に実行しておきます。

>chcp 65001

 

上記のままだと整形されていなくて非常に見づらいです。

これを避けるためにjqを使えるようにします。 

https://stedolan.github.io/jq/

 

上記よりjq-win64.exeをダウンロードしてきたらファイル名をjq.exeに変更して「C:\windows\system32」に格納します。

コマンド実行時に、末尾に「| jq」を付けます。

ただし、オプション-i、-Iとの併用はできないのでHTTPレスポンスヘッダーの取得結果も欲しい場合は工夫が必要です。

f:id:mitsunooon:20200828222140j:plain

 

Cookieの情報が必要な時はオプション-bを付けます。

参考サイト様

curl の -b, -c (--cookie, --cookie-jar) オプションが便利 - ryota-ka's blog

 例) curl -I -b test=AAAA -X GET  "https://localhost:5000/api"

 

その他の細々したオプションは下記サイト様がまとまっています。 

よく使うcurlコマンドのオプション - Qiita

 

問題は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コマンドで止めます。

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

 

 

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の下記モジュールをさらっと一周しました。

docs.microsoft.com

 

点数

667点/(合格700点)

 

全然惜しくない
普通に落ちてますね。
この時の習熟度としては、ワードを聞いたことがある、どのジャンルか、くらいのものでした。
上記レベルの理解度では全然ダメで、ちゃんと各サービスや機能がどういう特徴でどんな目的に合ったものなのかというのを理解していないといけませんでした。


2回目の受験

1回目の試験から日がたたないほうが良いと思い、2週間後に再受験しました。
再受験ポリシー的には24時間後には受けられたようです。

certification-exam-policies | Microsoft Docs

 

勉強方法

己の頭の足らなさは課金で補う主義なので、1回目の試験直後に下記テキストを買いました。

MS Learnの内容がより分かりやすくかみ砕かれているような感じで、とても良かったです。
これを毎晩寝る前に1章ずつ読みました。

4章くらいしかないので、何周か出来ました。
試験当日に巻末の模擬試験をやりました。

www.amazon.co.jp

 

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 "パスワード" -AsSecureString

az login -u $username -p $password

 

これにより、スクリプト実行時には下記のような表示になります。

f:id:mitsunooon:20200628121727j:plain


以上でログイン用のスクリプトはできました。
最終的なスクリプトの形は下記の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

 

このスクリプトを実行すると下記のようになります。

f:id:mitsunooon:20200628121909j:plain

 

アップロードに最低限必要なのは以上ですが、
きちんとアップロードされたかを実行の前後で確認できるようにアップロード先のファイル一覧を取得するコマンドも追加します。

$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ファイルを実行し、すべてのスクリプトが成功すると下記のようになります。

f:id:mitsunooon:20200628122103j:plain


ちなみに、スクリプトが失敗すると下記のようになります。

Azureへのログインが失敗した場合

f:id:mitsunooon:20200628122134j:plain


アップロード情報が間違っていてアップロードに失敗した場合

f:id:mitsunooon:20200628122337j:plain

 

詰まったところ

スクリプトのエラー検出

上記で説明したようなコマンドをそのままスクリプトにした状態では、アップロードスクリプトが失敗していても、エラーとして検出されずに終えられてしまいました。
下記記事を参考にして、1処理ごとにデータが返されているかを確認するようにしました。

Using Azure CLI with PowerShell: error handling explained


フォルダ名に記号が入っている場合

コマンドでアップロードする場合に、アップロード先のコンテナ名に記号($など)が入っていると、ダブルクォーテーションで囲うとコマンドが通らない事象がありました。
下記の記事を参考に、シングルクォーテーションで囲ったらうまくいきました。

storage blob upload-batch fails with InvalidQueryParameterValue on Ubuntu · Issue #10131 · Azure/azure-cli · GitHub

 

f:id:mitsunooon:20200628123324j:plain

 

f:id:mitsunooon:20200628123341j:plain

 

おわりに

エラー処理の部分などは結構苦労したのですが、細かなところは端折ってしまったので、完成形のものをご覧いただければと思います。

気力があればちゃんと書き起こします。

作成したスクリプトとbatファイルはGitHubにまとめてアップしています。

github.com

 

 

Azureでマイクラサーバーをたてる

はじめに

ずっとマイクラPEで一人で遊んでいたのですが、
マルチプレイもしてみたくなったので
Azureの勉強がてら、マイクラサーバーをAzureにたててみようと思います。

 

今回作るもの

マルチプレイができるマイクラサーバー

 

準備するもの

Azureアカウント
Minecraft用サーバーソフトウェア
Minecraftソフト(今回はスマフォアプリ)
 

参考サイト様

 

作り方

テンプレートから仮想マシンを作る

 Azureポータルにログインします。
リソースの新規作成で「minecraft」と検索します。
minecraft関連のものがいくつか出てきます。

f:id:mitsunooon:20200606232521j:plain

 

とりあえず今回は一番オーソドックスそうな「Minecraft server(Java) on Ubuntu」を選択しました。Linuxが好きなので。
(後から気づいたのですが、今回の対象のPE版はMinecraft Bedrockに統合?改名?されたらしく、「Minecraft Bedrock Game Server for Ubuntu 18.04 LTS」の方を選択するべきだったかもしれないです。

f:id:mitsunooon:20200606232641j:plain

 
リソースグループやパスワードなどを設定します。

f:id:mitsunooon:20200606232716j:plain

 
次に仮想マシンの設定をします。
ここのDomain name labelがマイクラサーバーにアクセスするときのサーバーアドレスになります。
サイズは、お遊びなのでできるだけコストは押さえるために一番安いのにしたいのですが、マイクラサーバはメモリに最低2GB必要と見たような気がするので、とりあえずB1msにします。
足りなくなったら拡張します。

f:id:mitsunooon:20200606232951j:plain 

次にマイクラの設定をします。
難易度とかシード値とかですね。
ここはサーバーを立てた後でも修正できます。
設定したら、確認作成します。

f:id:mitsunooon:20200606233240j:plain

 

デプロイが終わったリソースグループを開くといろいろできてます。

f:id:mitsunooon:20200607110250j:plain


ポートを設定する

作成したマイクラサーバーにアクセスするためのポートの設定をします。
仮想マシンをクリックします。
[ネットワーク]>[受信ポートの規則を追加する]をクリックします。

f:id:mitsunooon:20200607110446j:plain

 

[宛先ポート範囲]と[名前]だけ設定します。
イクラのデフォルトは19132です。
そのままでもいいのですが、せめてものセキュリティの意味でデフォルトじゃないポートにすることもできます。

f:id:mitsunooon:20200607110603j:plain 

ソフトウェアを展開する

Minecraft用サーバーソフトウェアをサーバー上に展開します。
cloud shellでサーバの中に入ります。
sshでアクセスします。
ユーザー、ドメイン、パスワードは仮想マシン作成時に設定したものを使います。

f:id:mitsunooon:20200607112205j:plain

 

下記コマンドでroot権限に移動します。

 

sudo su -

f:id:mitsunooon:20200606234506j:plain

 
公式からMinecraft用サーバーソフトウェアをダウンロードしてきます。
今回はUbuntu用です。
wgetコマンドで直接ダウンロードします。

f:id:mitsunooon:20200607112432j:plain

 

zipファイルがダウンロードされます。

f:id:mitsunooon:20200607112507j:plain

 
zipファイルを解凍すると、[bedrock_server_how_to.html]というファイルがあり、
サーバの起動方法や設定などの使い方が書いてあります。

f:id:mitsunooon:20200607112542j:plain

f:id:mitsunooon:20200606234911j:plain


zipファイルの中にあった、[server.properties]を編集して、アクセスするポートを設定します。

ここで設定するポートはAzureの仮想マシン上で設定したポートです。

デフォルト19132を使う場合は変更はいらないはずです。

vi server.properties

f:id:mitsunooon:20200606235050j:plain

サーバーを起動させる

screenモードを起動します。
コンソールを分けておくことで、マイクラサーバーを起動しっぱなしにすることができて便利です。
たぶん入ってないと思うのでインストールからします。

apt-get install screen

 

screen起動

screen

 


解凍したzipの中身があるところで下記のコマンドを実行し、サーバーを起動します。

LD_LIBRARY_PATH=. ./bedrock_server

f:id:mitsunooon:20200607112807j:plain

[Server started.]が表示されたらOKです。

 

アクセスする

マインクラフトのソフトを起動します。
私はスマフォで遊んでいるのでPE版です。
[サーバー]>[サーバーを追加]をクリックします。
下記を設定します。

[サーバー名]:自分が認識できるものならなんでも良いようです。
[サーバーアドレス]:Azureの仮想マシンDNS名をいれます。
[ポート]:サーバ上で設定したポートにします。

 

[保存]をクリックします。

f:id:mitsunooon:20200607100845p:plain

 
追加したサーバーが一覧に下記のように緑のアンテナが表示されたらログインができます!
アクセスできないときは赤い丸が付きます。

f:id:mitsunooon:20200607101108p:plain

 

ログインすると、サーバーの方にはログインしたユーザーの情報が表示されます。

f:id:mitsunooon:20200607112825j:plain

 

 遊べる状態になりました!やったー!
 

コスト

どれくらい遊ぶかによるとは思うのですが、
起動させっぱなしとして、大体3000円/月くらいになりそうな見込みです。
 

 おわりに

ひとまず、ログインして遊べる状態にはなりましたが、好みの遊び方をするにはここから細かな設定が必要になります。(この仮想マシンのテンプレートの使い方も合っているのか少し疑問もありますが…
イクラサーバーをスクリプト自動起動させるところまでできたらもっと快適だと思うので、そこはもう少し頑張ります。
どんなメンテナンスやバックアップが必要になるかも気になるので、しばらく実際に遊びながら運用していこうと思います。