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

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

ローカルフォルダ配下のファイルを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円/月くらいになりそうな見込みです。
 

 おわりに

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

 

 

クラウドコンピューティングの基礎知識

はじめに

先日、クラウドの基礎とメリットについてお話する機会がありました。
改めて勉強し、今さらながら初めて知るようなこともあったので簡単にまとめました。

 

 

参照サイト様

総務省 ICTスキル総合習得教材

https://www.soumu.go.jp/ict_skill/pdf/ict_skill_2_2.pdf

 

NISTによるクラウドコンピューティングの定義

https://www.ipa.go.jp/files/000025366.pdf

 

クラウドの定義とは

クラウドには多様な形態があり、簡潔な定義が困難であるとされています。
そこで、NIST(米国国立標準技術研究所)が下記の5つの特徴を満たすものをクラウドとすると挙げました。

f:id:mitsunooon:20200411093042j:plain


オンデマンドセルフサービス

いつでもだれでも触れる状態であること。
各サービスの提供者に連絡することなく、利用者が必要に応じて自分の意志で始められる環境であること。

この特徴により、「早く価値を生み出す環境」が実現できます。

 

幅広いネットワークアクセス

どこからでもアクセスができる状態であること。
インターネットがつながる環境であれば、場所は問わず、デバイスも自由となる。

この特徴により、どこでも同じ環境が使えるため、テレワークのような働き方改革にも向いています。

 

リソースの共有

クラウドサービスで提供しているリソースは、マルチテナントモデルとして集積されている。
そのリソースをユーザーの需要によって割り当てる。
ユーザーはリソースが物理的にどこにあるかを意識することはない。

 

スピーディーな拡張性

クラウドのリソースは、ユーザーの要求によって即座に拡張や縮小ができる。
場合によっては割り当てや提供サイズを自動化することもできる。

この特徴により、リソースの確保に対して工数を取らないため
オンデマンドセルフサービス同様、「早く価値を生み出す環境」が実現できます。

 

サービスが測定可能

ユーザーとクラウド提供者の双方にとって重要な、サービスの品質保証にかかわる特徴。
ユーザーは誰が何をどれくらい使用していたか、
クラウド提供者はいかにダウンタイムなくサービスを提供できたか、を知る必要がある。
それを明示するために各サービスに対する正確な測定が必要になる。

SLAの認識は以前からありましたが、
クラウドの特徴(スピーディーな拡張性等)によってさらに意識されるものとなりました。

 

 

クラウドの実装モデル

 クラウドの実装モデルはクラウドサービスの利用機会の開かれ方によって、4種に分類されます。
今回は主に使われることが多い3つのモデルについて記載します。

 

パブリッククラウド

クラウド事業者が所有していて、一般公開されているクラウド
誰でも利用することができる。
インターネットを経由してWebブラウザでアクセスできる。

具体例)Azure、AWSGCPなど


プライベートクラウド

クラウドリソースを使用する組織が所有と運営をする。
ハードウェアの購入、保守、管理が必要になる。
単一の組織に所属する者のみが使用できる。
パブリックアクセスは許可しない。
物理サーバーの設置場所は、利用組織の敷地内に設置するケースもあれば、
クラウド事業者のデータセンターなどに設置するケースもあります。


ハイブリットクラウド

複数のクラウドモデルを組み合わせたもの。
コストや効率面でいいとこどりができる。
部分的な管理が必要。(プライベートクラウド部分)

複雑なカスタマイズが必要な部分はプライベートクラウドで構築し、
定型的なサービスで対応できる部分はパブリッククラウドで構築するケースが考えられます。

Azure+AWSというような、複数のパブリッククラウドの組み合わせはマルチクラウドと言います。

 

 

クラウドのサービスモデル

クラウドにはたくさんのサービスがあります。
各サービスをクラウド事業者とユーザーの間の管理責任ごとに分類したとき
下記の3つのケースが考えられます。

f:id:mitsunooon:20200411093204j:plain

 

IaaS(Infrastructure as a Service)

サービスとして提供されるインフラストラクチャー
ストレージやサーバーといったパソコンの中枢機能を利用できるクラウドサービスです。
従来は、インフラというと大規模な装置や保守人員が必要でしたが、IaaSを利用することでデバイスさえあればすぐに利用可能となります。
スケールアップ/ダウンも迅速にできます。
Azure内のサービス例)Virtual Machines

 

PaaS(Platform as a Service)

サービスとして提供されるプラットフォーム
OS、ネットワーク、フレームワークといったプラットフォームを開発するためのミドルウェアを利用できるクラウドサービスです。
環境設定に工数を取られないので、アプリケーションやサービスの開発に注力することができます。
Azure内のサービス例)Functions、Web Apps、Logic Apps


SaaS(Software as a Service)

サービスとして提供されるソフトウェア
物理的な部分からアプリまで担います。
これらはユーザー側が構築管理することはなく、ブラウザなどで接続して利用するだけになります。
一般的なサービス例)Microsoft Office 365、GmailDropbox

 

コストとカスタマイズの自由度は下記のようなイメージです。
ユーザーが管理する範囲が広いほど、カスタマイズの自由度は上がりますが、
その分コストもかかります。

f:id:mitsunooon:20200411093330j:plain

 

また、これらをわかりやすく例えたのが車の例になります。
IaaS: カーディーラーで車を買うようなもの。車検や駐車場の確保などが必要になる。
PaaS: レンタカーで借りるようなもの。実際には使っていない間もお金がかかる。
SaaS: タクシーを利用するようなもの。乗っている時間にだけ払う。

f:id:mitsunooon:20200411093354j:plain

 

 

スライド資料

www.slideshare.net

 

おわりに

クラウドの本当に最初の部分について改めてまとめてみました。
もう少し先についても機会があったらまとめてみます。

 

Azure Web Apps×Azure Active Direstoryでブログを作る

はじめに

繰り返される組織編成によりすっかり廃れてしまった社内ブログを復活させようと思い、Azureでブログを作ってみることにしました。
社内への情報共有の手段が確立されていないと、
いくら外部の勉強会などで情報を得てきても、あまり活かせないのです…
 

要件

・指定した人しかアクセスできないようにする。
・誰でも参加がしやすいように一般的なブログの形式を選ぶ。
・いいねができる。

 

構成

Azure Web Apps(Freeプラン)(WordPress)
Azure Database for MySQL(Basicプラン)
Azure Active Directory

 

参考サイト様

Azure AD 認証を構成する | Microsoft Docs

GitHub - psignoret/aad-sso-wordpress: Single Sign-on with Azure Active Directory (for WordPress)

 

手順

以下、Azure Active Directoryで同じディレクトリの人だけがアクセスできるブログサイトの作成手順になります。

 

WordPressの新規作成

Azureで新規リソース作成をします。

WordPress」で検索、作成します。

f:id:mitsunooon:20200119134838j:plain

 

パラメータを設定します。

とりあえず一番安いものにします。

利用状況によってスケールアップしていきます。

f:id:mitsunooon:20200119135123j:plain

f:id:mitsunooon:20200119135254j:plain


ちなみに、この時点でのMySQLの見積もりはこのくらい。

f:id:mitsunooon:20200119135350j:plain

 

リソースが作成されると、App ServiceからサイトURLに飛べます。

f:id:mitsunooon:20200119144248j:plain

f:id:mitsunooon:20200119144305j:plain

 

WordPressの初期設定をします。

f:id:mitsunooon:20200119144410j:plain

f:id:mitsunooon:20200119144530j:plain

 

ひとまず、WordPressが使える状態になりました。

f:id:mitsunooon:20200119144551j:plain

 

 

Azure Active Directoryの設定

 Azure Active Directory>[アプリの登録]を開きます。

f:id:mitsunooon:20200119144856j:plain


[新規登録]をクリックし、新規アプリを追加します。

f:id:mitsunooon:20200119145402j:plain

f:id:mitsunooon:20200119145423j:plain


作成したら、[概要]にて各種IDが確認できるので、コピペして控えておきます。

この後の設定でよく使います。

f:id:mitsunooon:20200119145602j:plain


各種設定をしていきます。

まず、[ブランド]で対象のサイトURLを登録します。

f:id:mitsunooon:20200119145710j:plain


[認証]でリダイレクトURIとその他設定をします。

2種類のリダイレクトURIを登録します。

https://サイトURL/.auth/login/aad/callback
https://サイトURL/wp-login.php

f:id:mitsunooon:20200119145939j:plain

 

[暗黙の付与]で[IDトークン]にチェックを入れます。

f:id:mitsunooon:20200119145957j:plain

 

[既定のクライアントの種類]で[任意の組織ディレクトリ内のアカウント]にチェックを入れます。

[保存]します。

f:id:mitsunooon:20200119150015j:plain


[証明書とシークレット]で新しいクライアントシークレットを発行します。
発行した直後しかキーを確認できないので、忘れずにコピーしましょう。
このキーはWordPress側の設定で使います。

f:id:mitsunooon:20200119150228j:plain

f:id:mitsunooon:20200119150253j:plain

f:id:mitsunooon:20200119150309j:plain

 

[APIのアクセス許可]で[アクセス許可の追加]をします。

[Microsoft Graph]>[委任されたアクセス許可]>[Directory.Read.All]を選択します。

f:id:mitsunooon:20200119150626j:plain

f:id:mitsunooon:20200119150641j:plain

f:id:mitsunooon:20200119150654j:plain


追加したら、[既定のディレクトリに管理者の同意を与えます]をクリックします。

f:id:mitsunooon:20200119150817j:plain

 

[所有者]でサイトへのアクセスを許可するユーザーを追加します。

この所有者がアクセスできるユーザーの設定になるかと思ったのですが、そうではなさそうです。同じディレクトリのユーザーであればアクセスできるようになります。

f:id:mitsunooon:20200119150922j:plain

 

AAD認証の設定

App Service側にAAD認証設定をします。

これを設定することで、サイトURLにアクセスすると認証画面がでてくるようになります。

App Serviceの[認証承認]を開きます。

[App Service認証]を[オン]にします。

[要求が認証されない場合に実行するアクション]を[Azure Active Direstoryでのログイン]にします。

f:id:mitsunooon:20200119151106j:plain


認証プロパイダーの[Azure Active Direstory]をクリックします。

[詳細]にAADの概要で表示された各種IDを入力します。

クライアントID:アプリケーション(クライアント)ID

発行者のURL:http://login.microsoftonline.com/ディレクトリ(テナント)ID

許可されるトークン対象ユーザー:api://アプリケーション(クライアント)ID

f:id:mitsunooon:20200119151357j:plain

 

設定ができたら、サイトURLにアクセスしてみます。

アクセス直後にMSのアカウント認証画面が出てきます。

 

WordPress側のAAD設定

WordPress側にもAADの設定を入れることで、記事の投稿のときに必要になるWordPress側のサインインにSingle Sign-Onが適用されて、ログイン情報入力の手間が省けます。

 

下記サイトよりプラグインをダウンロードします。

GitHub - psignoret/aad-sso-wordpress: Single Sign-on with Azure Active Directory (for WordPress)

 

管理者アカウントで作成したサイトにアクセスします。

[ダッシュボード]>[プラグイン]>[新規追加] >[プラグインのアップロード]にて上記でダウンロードしたzipファイルをアップロードします。

f:id:mitsunooon:20200120115245j:plain

 

アップロードおよびインストールが完了したら、

プラグインを有効化します。

f:id:mitsunooon:20200120115312j:plain

 

[設定]>[Azure AD]にてAADの設定を入れていきます。

入力する必要があるのは下記です。

クライアントID

クライアントシークレット

オブジェクトID

 

チェックボックスの項目は必要に応じて有効にします。

f:id:mitsunooon:20200120115351j:plain

f:id:mitsunooon:20200120115400j:plain


以上の設定が完了すると、サイトのサインインにシングルサインオンが適用されます。

 

おわりに

以上の手順で「指定した人しかアクセスできないようにする。」という要件を満たすための設定ができました。

他の要件を満たす、あったらいいなの機能をもう少し追加しているのですが、AzureではなくWordPressのお話なのでおまけ程度に別記事で書きます。
運用開始ができたら、コストについてもちゃんとまとめたいです。

 

 ※2020/02/01追記

Office365アカウントでの認証ができれば、一回のサインイン入力でさえも省けるようなのでもう少し試行錯誤してみる余地がでました。

Translator TextのWPFアプリ作成チュートリアルを触ってみた

QiitaのAzure AI Advent Calendar 2019 15日目の記事です。

 

動機

チーム内に外国籍の方が数名おり、日本語のみでのコミュニケーションに限界があるときがあります。

そこで、Cognitive ServicesのTranslator Textを使って少しでもコミュニケーションに役立つものが作れたらいいなと思い、まずはチュートリアルを触ってみました。

 

触ったもの

docs.microsoft.com

 

GitHubにもサンプルコードがあります。

GitHub - MicrosoftTranslator/Text-Translation-API-V3-C-Sharp-Tutorial

 

触ってみた

下記サイトを参考にAzureポータルでCognitive Servicesリソースを作ります。
マルチサービスリソースにします。

リージョンは米国西部がおすすめらしいので米国西部です。
コードの変更箇所も減ります。

f:id:mitsunooon:20191214171912j:plain

 

リソースができたらキーを取得します。

f:id:mitsunooon:20191214171928j:plain

 

Githubからとってきたコードの[COGNITIVE_SERVICES_KEY]の部分に上記のキーを入れます。

f:id:mitsunooon:20191214172135j:plain


実行します。
できました!

f:id:mitsunooon:20191214173911j:plain

f:id:mitsunooon:20191214173928j:plain

つまづいたところ

最初、Azureで作るリソースを間違えました。
マルチサービスリソースではなく、Translator Textの単一サービスリソースにしていました。

f:id:mitsunooon:20191214172407j:plain

 
これで作るとJSONのデシリアライズでエラーが出ます。

f:id:mitsunooon:20191214172724j:plain

f:id:mitsunooon:20191214172430j:plain

 

おわり

Cognitive Servicesには翻訳系や音声系のサービスがいくつかあるので
うまく組み合わせて、言語の壁を越えてコミュニケーションが取りやすくなるといいなぁと思います。

【レポ】Microsoft Ignite The Tour Tokyo Day2に参加してきました

Microsoft Ignite The Tour Tokyo Day2に参加したレポート記事になります。

 

概要

2019年12月5,6日でMicrosoft Ignite The Tour Tokyoというテクニカルカンファレンスが開催されました。
今回はIgniteの最新情報というよりも入門編が多めの印象でした。

www.microsoft.com

 

目的

コンテナについての情報を得る。
 
今回の参加にあたり、魅力的なセッションが多すぎたため目的を定めました。
現在業務でAzure Container Instancesを利用しています。
その利用方法を見直す必要が生じたため、コンテナについての情報を収集し社内に展開するというのが私の今回の目標のひとつでした。
ということで、参加セッションはコンテナ周りが中心となっています。
 

 参加セッション

1つ目のセッション

「Azure でのコンテナーとオーケストレーションを調べる」
 
ACIやAKSについての概要説明とデモのセッションでした。
 
コンテナについて
 アプリ開発者がコードに専念するためのもの。
 隔離された環境で同じように使うことができる。→生産性の向上につながる。
 特徴として動作が軽い。
 
デモ①
 Dockerfileのデプロイ。
 細かいコマンドとオプションの説明もありました。
 
Azure Container Instancesについて
 シングルコマンドでコンテナ実行ができるお手軽さ。
 一秒単位での課金となり、実行中のみ換算される。
 仮想マシンの管理はAzureがする。
 
どういうとき使うのか?
 バッチ的な処理が向いている。
 LogicAppsを使うようなアプリに向いている。
 AKSの追加リソースとして使える。
 
Azure Container Repositoryについて
 プライベートなレジストリ
 全てのタイプのコンテナイメージの管理ができる。
 地理冗長もできる。
 
デモ②
 ACRの作成。
 Web App for Containersについて
 コンテナ化されたアプリの実行が簡単。
 
Azure Kubernetes Serviceについて
 デモがよかったです。
 実際に動いているAPIとかが確認できました。
 
全体的に入門という感じで分かりやすかったです。
見よう見まねでやっていたことが間違いでなかったことが確認できて安心しました。
ただし、ACIを常時利用の構成にしていたのでこれは見直さなければいけないとわかりました!

 

2つ目のセッション

「Azure Kubernetes Service を活用したマイクロサービス開発」
前日にJazugでもお世話になった原さんのセッションでした。
AKSについて、基礎的なお話から活用方法までのお話でした。
 
AKSを利用するにあたって、本当に必要な現場なのかを考えることが重要とのこと。
本当に今の構成にAKSは必要なのか?
頻繁にアップデートされるサービスか?
どんどん更新を追加していくものか?
⇒上記がYesならばAKS向きだそう。
 
コンテナは揮発性であり、中身は永続化されない。
永続化したいデータは別DBにちゃんと保管しておいて、クラスタ自体はすぐに捨てられるようにしておく。
k8sは流行っていてよく聞くワードではあるが、
難しいのも事実なので、最初はシンプルな構成から挑戦するのがいい。
 
上記以外にも、用語の説明や構成の説明、デモ等が盛りだくさんかつ分かりやすいセッションでした。
資料が公開されると嬉しいです。

会場にはスピーカーQ&Aというブースが設けてあり、
セッションを終えたスピーカーの方々と直接お話ができました。
今の業務の構成について、原さんに直接ご相談させていただき、解決策をご指南いただきました。
今回の参加で最も有益な機会でした。

 

3つ目セッション

「【アイデア次第!】 Microsoft Teams +α をノーコード・ローコードでカンタンに一層便利に利活用!」
Power Platform界隈でお世話になっている太一さんのセッションでした。
TeamsとPower Platformで業務を効率化するお話でした。
 
Teamsについて
 ただのビジネスチャットじゃない。
 ハブとして使ったときに真価が発揮される。
 Teamsだけでも業務が完結するくらいになってきている。
 このTeamsと相性がいいのがPowerPlatform!
 例)
  データ入力:Power Apps
  繋げる:Power Automate
  可視化:Power BI
  bot:Power Virtual Automate

Teams×Power Platformでの業務効率化の一例として
訪問販売のシミュレーションのお話をされていました。
効果を数字で表されると本当に圧倒的でした。
 
弊社でもTeamsはどんどん活用されているので
Power Platformと組み合わせてさらに効果的に使えたらいいなと思いました。
すべてはアイデア次第…

 

4つ目のセッション

失敗させない! Microsoft Teams 利活用促進への道!」
こちらも太一さんのセッションです。
本当は別のセッションを聞きに行く予定だったのですが、
前のセッションがあまりに面白かったので連続で参加することにしました。
 
Teamsを利活用するために必要なのは何か?
 ・Teamsへの愛
 ・ユーザー仲間への愛
 ・会社への愛
 愛のある人が使い倒して、説得することで響くものがある。
 
Teamsの導入とは?
 ・今までの働き方や考え方を変える必要がある。
 (メールの置き換えやコミュニケーションツールの追加ではない
 ・会社を変えるレベルの話
 ・経営層、力のある人を巻き込む必要がある
 ・好きな会社だから変えようという本気の人たちじゃないと成し遂げられない
 
Teamsの活性化に効果的な方法のひとつとしてチャンピオンプログラム(アンバサダー制度)があげられる。
個人のやる気を会社がどれだけ活かしてあげられるかが肝である。

全体的にマーケティング寄りのお話でした。
何かに愛を持って活動されている人は輝いているなと常々思っていたので
愛を持って行動することの重要性を再認識しました。
私もそれくらい愛を持てるものが早く見つかるといいなぁ

 

感想

今回は知りたいことの目標を定めてセッション選びをしたのでかなり満足度の高い参加ができました。
ちゃんと社内に情報共有します。
セッションそのものも有益ですが、スピーカーQ&Aやエキスパートブースがかなり重要だったと思います。
普段ならばなかなか聞くことができない技術的な悩みをその道のエキスパートさんたちに直接伺えるというのは最高に贅沢でした。
大阪にもあるかと思いますので、参加される方は是非ご活用ください。

Azure FunctionsのDialogflow v2 API対応

はじめに

Google Homeで遊ぶときに利用しているDialogflowのv1 APIが2020年3月に完全シャットダウンしてしまいます。
(元々は2019年10月まででしたが延長されてました。

Release Notes  |  Dialogflow Documentation  |  Google Cloud

 
以前の記事で
Dialogflow+Azure Functionsで
Google Homeの設定をしていたので
こちらのv2対応版を書いていきます。

流れ

  • Azure Functionsの設定

  • Dialogflowの設定
 


Azure Functionsの設定

ちょっと変える程度かと思いきや、がらりと変わりました。
v1の時より汎用性のあるすっきりしたコードにできたので個人的には満足度が高いです。
コード自体はGitHubに記載してます。
 

Dialogflowの設定

設定から[API VERSION]の[V2 API]を有効にします。
[SAVE]します。

f:id:mitsunooon:20191120151855j:plain

f:id:mitsunooon:20191120151913j:plain

FulfillmentのURLを新しいものに書き換えます。

f:id:mitsunooon:20191120151933j:plain

以上で設定は終わりです。
 

動作確認

ちゃんと動きました。やったー。
 

f:id:mitsunooon:20191120155324j:plain

 

つまづいたところ

・WindowsAzure.Storageのバージョン

パッケージのバージョンをすべて最新安定版にしていたら以下のエラーが出てきました。

f:id:mitsunooon:20191120152148j:plain

Microsoft.Azure.WebJobs.Extensions.Storage:Can't bind Table to type 'Microsoft.WindowsAzure.Storage.Table.CloudTable'
 
調べたところ、WindowsAzure.Storageのバージョンが影響しているとのことでした。
9.3.3から9.3.1にダウングレードしたところ無事に動きました。

f:id:mitsunooon:20191120152207j:plain

 

・Table Storageの型

今回の例ではすべてstring型なので影響はないですが、
会社の備品管理を同様の構成でしようとしたところ、備品番号がFunctionsで認識できなくてハマりました。
原因としては、備品番号がTable Storage上ではint型で登録されているのに、Functions上ではstring型にしていたというだけの話でした。
Table Storageのほうを変更しました。
 
 

参考サイト様