Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

[2020/03/24 版] Private Azure Kubernetes Service cluster を構築する方法

内容を簡潔に。

  • 2020/03/09 に General Availability (GA) になった Private Azure Kubernetes Service (AKS) cluster を公式ドキュメントに沿って構築してみましたが出来ませんでした。
  • GitHub の Issue で解決方法が議論されていたので、それを参考に Private AKS cluster を構築することが出来ました。

ドキュメント

  • 公式ドキュメント

docs.microsoft.com

  • Bug 報告 Issue

github.com

重要なこと

このポストは公式ドキュメント及び Azure を責めるものではありません。

GA しているとはいえバグは付きものです。

皆でそれを積極的に報告し、GitHub 上で議論・解決策を模索している方々に助けられました。

とても感謝しているので記事に残しておこうと思いました。 (-人-)感謝

実際のコマンド

  • 必須条件
The Azure CLI version 2.2.0 or later
  • 変数の設定
export myclsname='my-private-aks-cluster'
export myrg='my-private-aks-cluster-resource-group'
export spname='my-private-aks-cluster-service-principal-name'
  • Resource Group の作成
az group create --location japaneast --name ${myrg}
  • Service Principal の作成
az ad sp create-for-rbac --name ${spname}
### ex

# az ad sp create-for-rbac --name ${spname}
Changing "my-private-aks-cluster-service-principal-name" to a valid URI of "http://my-private-aks-cluster-service-principal-name", which is the required format used for service principal names
Creating a role assignment under the scope of "/subscriptions/wwwwwwwwwwwwwwwwwwwwwwwwwwww"
  Retrying role assignment creation: 1/36
  Retrying role assignment creation: 2/36
{
  "appId": "xxxxxxxxxxxxxxxxxxxxxxxxx",
  "displayName": "my-private-aks-cluster-service-principal-name",
  "name": "http://my-private-aks-cluster-service-principal-name",
  "password": "yyyyyyyyyyyyy-yyyy-yyyy-yyyyyyyyyyyy",
  "tenant": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
}

---> appIdpassword を使用します。

  • 変数の設定
export spid='xxxxxxxxxxxxxxxxxxxxxxxxx'
export sppass='yyyyyyyyyyyyy-yyyy-yyyy-yyyyyyyyyyyy'
  • Private AKS cluster を作成
az aks create \
    --name ${myclsname} \
    --resource-group ${myrg} \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --service-principal ${spid} \
    --client-secret ${sppass}

Azure ポータルで確認

  • Private AKS cluster

f:id:nari_kyu:20200324061320p:plain

  • 通常の AKS cluster

f:id:nari_kyu:20200324061332p:plain

---> 詳しくは省きますが、Private AKS cluster を構築すると、通常の AKS cluster に比べ、上記のコンポーネントが増えるようです!!

まとめ

Bug 報告 Issue にて報告されてる方法、すなわち、

Service Principal を自分で作成して、az aks create 時に指定してあげることで、

無事に Private AKS cluster を構築することが出来るました。

この記事は Private AKS cluster を構築するところまでしかしていませんが、是非アプリを動かすところまでやってみて下さい。

Have fun !! :)

Azure Media Services を使って、ストリーミング動画に日本語・英語字幕を付けてみる📹 〜前編〜

何をする記事ですか?

Azure Media Services を使って日本語の動画に日本語・英語の字幕を付けていきます :)

Azure Media Services

azure.microsoft.com

記事が長くなったので、前編と後編に分かれています。

流れ

前回までにやったこと

前回 -> Video Indexer を使って、映像から音声を抽出してみた!! 📹

  1. 動画を用意する
  2. inver でテキストにする
  3. テキストをローカルに落とす(前回はここまで)

今回やること

  1. Azure Media Services に動画をアップロードする
  2. Azure 上で、動画をストリーミング用にエンコードする
  3. Azure の Static Website を利用して、動画を公開する

前回の作業のおさらい

  • Video Indexer を使うことで、映像から簡単に文字起こしが出来ました。
    • また、その文字起こしのデータもダウンロード行っておきます。

azure.microsoft.com

また、今回使用している動画は Serverless Meetup Tokyo #16 の主催者さまから頂いた動画データを用いています。

多謝 (-人-)

serverless.connpass.com

www.youtube.com

参考資料

くらでべ (クラウドデベロッパーちゃんねる)

www.youtube.com

Azure | Azure Media Services 基礎 (前編)

www.youtube.com

Azure | Azure Media Services基礎 (後編)

www.youtube.com

Azure Media Services に動画をアップロードする

上記の参考資料の公式動画を見ながら、Azure Media Services に手もとの動画をアップロードし、Azure 上でエンコードします。

  • Azure のポータルを開きます。

f:id:nari_kyu:20200314182018p:plain

  • 検索から Media Services を探します。

f:id:nari_kyu:20200314182030p:plain

  • 下記のような画面に遷移します。

f:id:nari_kyu:20200314182040p:plain

  • Add から新規作成し、以下のように埋めて作成します。

f:id:nari_kyu:20200314182933p:plain

  • 無事に作成出来ました :)
    • (適当に名前をつけた結果、これじゃない感が…みなさんは適切な名前をつけましょう

f:id:nari_kyu:20200314183204p:plain

  • 早速、Media Services を開きます。

f:id:nari_kyu:20200314183748p:plain

  • まずは動画をアップロードするために Assets を開き、 Upload をクリックします。

f:id:nari_kyu:20200314183835p:plain

f:id:nari_kyu:20200314183957p:plain

  • 下記のような画面になるので、ローカルに保存している動画をアップロードします。
    • 今回は Serverless-Meetup-Tokyo-16.mp4 という名前の動画をアップロードしました。

f:id:nari_kyu:20200314184031p:plain

f:id:nari_kyu:20200314184126p:plain

  • Upload 中

f:id:nari_kyu:20200314184159p:plain

  • Upload が終ると Assets の中に登録されます。

f:id:nari_kyu:20200314184247p:plain

Azure 上で、動画をストリーミング用にエンコードする

  • 引き続き、Assets の中で Encode をクリックします。

f:id:nari_kyu:20200314184939p:plain

  • 下記のような画面に遷移します。
    • ここで、Encoding presetAdaptive Streaming に指定しましょう。

f:id:nari_kyu:20200314185040p:plain

  • そうすると、Encode が始まります。

f:id:nari_kyu:20200314185110p:plain

f:id:nari_kyu:20200314185121p:plain

  • しばらく待ちましょう :)

f:id:nari_kyu:20200314185154p:plain

  • Encode が終わった後に、Assets に戻ると、先程作成したストリーミング用の動画が出来上がっているのでこちらをクリックします。

f:id:nari_kyu:20200314185722p:plain

  • ストリーミング用の動画のページにて Publish をクリックします。

f:id:nari_kyu:20200314234505p:plain

  • 下記の様な公開期間の設定が出来るので、任意に設定しましょう。
    • デフォルトは 100 年間になっています。

f:id:nari_kyu:20200315145027p:plain

  • Publish の設定を行うと、 Play がクリック出来るようになります。

f:id:nari_kyu:20200315145302p:plain

  • 動画の Player が立ち上がるので、 Playback URL をコピーしておきます。

f:id:nari_kyu:20200315145842p:plain

  • ブラウザの別タブにて、Azure Media Player を起動し、先程コピーした Playback URL を入力して、 Updatae Player にて反映させます。
    • この時、 Playback URLhttp なので、 https に変換しましょう。( s を入れるだけです)

ampdemo.azureedge.net

f:id:nari_kyu:20200315150112p:plain

  • Azure Media Player でも再生出来ることが分かりました。

f:id:nari_kyu:20200315150353p:plain

  • Azure Media Player の Code をクリックし、 Get Player code をクリックします。

f:id:nari_kyu:20200315151019p:plain

  • 下記のように、html ファイルに記載すべき情報を掲示してくれるので、ローカルに作成した index.html にそれぞれを記載していきます

f:id:nari_kyu:20200315151222p:plain

  • index.html

gist.github.com

  • 実際の例
<!DOCTYPE HTML>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title> Serverless Meetup #16  </title>

  <link href="//amp.azure.net/libs/amp/2.3.4/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet">
  <script src="//amp.azure.net/libs/amp/2.3.4/azuremediaplayer.min.js"></script>

</head>
<body>
  <video id="azuremediaplayer" class="azuremediaplayer amp-default-skin amp-big-play-centered" tabindex="0"></video>

<script>
  var myOptions = {
    "nativeControlsForTouch": false,
    controls: true,
    autoplay: true,
    width: "640",
    height: "400",
  }
  myPlayer = amp("azuremediaplayer", myOptions);
  myPlayer.src([
          {
                  "src": "https://iganari-jpea.streaming.media.azure.net/eff92941-9aa5-4ad0-9232-35886fa43952/Serverless-Meetup-Tokyo-16.ism/manifest",
                  "type": "application/vnd.ms-sstr+xml"
          }
  ]);
</script>

</body>
</html>

Azure の Static Website を利用する

  • Azure のポータルに戻り、Static website 用の Storage account を新規で作成します。

f:id:nari_kyu:20200315154802p:plain

f:id:nari_kyu:20200315154812p:plain

  • 新規作成した Storage account を開き、Settings の中の Static website を開きます。

f:id:nari_kyu:20200315155114p:plain

  • DisabledEnabled に変更し、設定項目を入れて Save します。
    • ここ表示される、 Primary endpoint をコピーしておきましょう。

f:id:nari_kyu:20200315155231p:plain

f:id:nari_kyu:20200315155240p:plain

f:id:nari_kyu:20200315155250p:plain

  • 次に、 Storage account の中の Blob service 項の Containers をクリックし、$web をクリックします。

f:id:nari_kyu:20200315155930p:plain

f:id:nari_kyu:20200315155951p:plain

  • 遷移先で、先程作成した index.html をアップロードします。

f:id:nari_kyu:20200315155940p:plain

f:id:nari_kyu:20200315160108p:plain

  • 先程コピーした Primary endpoint にアクセスして、動画が再生出来るか確認しましょう。

f:id:nari_kyu:20200315160639p:plain

まとめ

Azure Media Services と、 Azure Static website を用いることで簡単に動画を公開することが出来ました!!

次回は日本語と英語の字幕を付けていきます!!

Have fan! :)

DevRel Meetup in Tokyo #50 〜クラウドサービスとOSS〜 にて、今後のオンライン勉強会のあり方について聞いてきました👀

2020 年 03 月 04 日に行われた、DevRel Meetup in Tokyo #50 〜クラウドサービスとOSS〜 にオンライン参加しました。

そして、学びが多かったので、忘れる前に書き留めて置こうと思います。

🙇 本セッションも大変有意義でしたが、本記事では本セッション後のスタッフさんたちによるオンライン勉強会の感想になります 🙇

リンク

  • connpass

devrel.connpass.com

twitter.com

  • togetter

togetter.com

  • スタッフさん (@beajourneyman) によるまとめ

note.com

配信場所の話

  • 場所に縛られることが無くなったので、基本は各個人の家が中心になっていく。
  • 家にお子さんがいる場合、起こしてしまう可能性や、起きてても「なんで構ってくれないの?」という熱い視線があるとか。
  • リモートワークが増えることにより会社でオンライン勉強会に参加出来るようなった方もいれば、そもそも業務以外で会社の会議室を使うことは出来ない人も依然としている。

開始時間の話

  • リモートワークの場合、開始時間が早いと参加しやすくなる(会場までの移動時間を考慮する必要が無い人も多い。
  • 一方で配信場所で取り上げた問題も同様にあるし、開始時間の問題は引き続き起こりそう。

アバターの問題

  • YouTube Live のような一方通行な配信ではなく、Zoom を使った双方向のオンライン meetup などで起きそうな問題。
  • 家の中を映したくない場合はバーチャル壁紙や映っても問題無い場所を探すかで対処可能。問題は顔出しについて。
  • 様々な理由で顔出ししたくない人がいること自体はいいけど、アバターを使い出すと本人が特定しずらい上にアバター被りも起きうる
    • 時にはアバターが他の参加者に不快感を与えることもありうる?
    • 本人を想起できる特徴やアイテムがあればよい?
    • また、「顔出ししたい人としたくない人」、「話し合いに参加したい人・ただ聞いてるだけでいい人」のようなロール分けが出来る仕組みがるあるとよい。

拡散力の問題

  • 勉強会の活発度の指標のひとつには SNS でのツイート量があり、今日の Web 系の勉強会だと Twitter が主流である(他の業界だと、YouTube だったり Discord だったり)。
  • Zoom や Youtube の中にそれぞれチャット機能があり、そこでコメントし合うのはよいが、クローズドなため拡散力が落ちてしまい、活発度を外にアピールしずらくなりそう。
    • 普段、オフラインでも現地での全ての会話を発信している訳では無いので、やり方や仕組みでカバーしていくしかない

参加率の問題

  • オンラインだと地理的に参加が難しかったり、私的な事情で参加しにくい人達が一定数いたが1部緩和されたのは良かった点。
  • 一方、より参加しやすくなった反面、「登録はしたが参加しない割合」も増える。
    • 「参加率」という面では下がる可能性は高い。
  • ただ、途中まで参加・途中から参加・中抜けなどはしやすいので、やはりオンラインのメリットは大きそう。

まとめ

昨今のオンライン勉強会の流れは始まりは不穏でしたが、一部のアーリーアダプタ達が精力的にオンライン勉強会のノウハウや今後の展望を話し合っているのを見ているとブレイクスルーの予感しかないので、自分も積極的に関わっていきたいなと思っています :)

DevRel さんの次回の勉強会は Online の名を冠している勉強会なので要チェックですね!!

  • connpass

devrel.connpass.com

Have fun!! :)

Video Indexer を使って、映像から音声を抽出してみた!! 📹

動機

昨今、さまざまな要因でオンライン勉強会が施行されるようになりました。

その中で、さまざまな分野で試行錯誤が練られていると思います。

多拠点での開催や、VRなどを使った方針、如何にストレス無く配信・視聴出来る仕組みづくり等々。

また、その技術やナレッジに関しても日々アップデートされています。

先週行われた、Serverless meetup #16 でも、初のオンライン開催され、とても好評でした。

この勉強会では Zoom と YouTube Live を用いた、多拠点での配信を行ってました。

わたしはたまたま、配信場所にお邪魔する機会があったので参加してきたのですが、とても貴重な経験をさせて頂きました。

多謝(-人-)

後日、動画を翻訳することで国内だけでなく全世界を視野にいれた配信が出来るのでは? という話になり、私が個人的に前から気になっていた Azure Media Services を使ってみいなと思っていました。

  • Azure Media Services

https://azure.microsoft.com/en-us/services/media-services/

その中で、まずは Video Indexer を用いて、映像から音声を文字おこしする作業をしてみます。

  • Video Indexer

https://azure.microsoft.com/en-us/services/media-services/video-indexer/

勉強に使った YouTube

くらでべ (クラウドデベロッパーちゃんねる)

www.youtube.com

Azure | Azure Media Services 基礎 (前編)

www.youtube.com

Azure | Azure Media Services基礎 (後編)

www.youtube.com

Tweet

動画を見ていて、特に気付きがあった点をつぶやいてました。

  • 前編を視聴している際のつぶやき

  • 後編を視聴している時のつぶやき

Video Indexer を試してみる

くらでべで学んだ結果、まずは Video Indexer を用いて動画の中の言語抽出をする必要があるようなので、試してみます。

https://azure.microsoft.com/en-us/services/media-services/video-indexer/

利用するステップは 3 ステップです。

  • Video Indexer にログイン
  • データのアップロード
  • 結果の確認

Video Indexer にログイン

https://azure.microsoft.com/en-us/services/media-services/ にアクセス

f:id:nari_kyu:20200301214217p:plain

自分のアカウントでログイン

f:id:nari_kyu:20200301214328p:plain

f:id:nari_kyu:20200301214342p:plain

f:id:nari_kyu:20200301214354p:plain

データのアップロード

アップロードに要する時間はご自身のネット環境に依存します。

今回の場合は 520MB の動画で 4 分ほどでアップロード出来ました。

f:id:nari_kyu:20200301214415p:plain

f:id:nari_kyu:20200301214432p:plain

そこから解析がスタートします。

解析中は以下のようなシークバーが出るので、終るまで気長に待ちます。

f:id:nari_kyu:20200301214455p:plain

解析は動画と同じくらいの時間で出来ました。

ただ、これはたまたまだったかもしれません。

結果の確認

こんな感じ

f:id:nari_kyu:20200301214535p:plain

映像の解析を行った結果、動画内の人を認識し、かつその動画内でその人が映っている箇所を特定出来るようにされています。

f:id:nari_kyu:20200301214805p:plain

文字起こしもかなり精度良く出来ています。

f:id:nari_kyu:20200301214837p:plain

文字起こしが間違っている場合は右上の鉛筆マークから修正を行うことが可能です。

f:id:nari_kyu:20200301215107p:plain

文字起こしのテキストも赤枠のところから、ダウンロードが可能です。

f:id:nari_kyu:20200301215200p:plain

f:id:nari_kyu:20200301215213p:plain

あとは、ローカルでさらに編集など行いましょう!!

まとめ

Video Indexer を使うことで、2 時間超えの映像も簡単に文字起こしが出来ました!!

本当に簡単にここまで出来ました!!

Azure すごい!!

この次はテキストを英語翻訳し、Azure Media Services を用いて映像に載せていくようにしてみます!! (`・ω・´)ゞ