- この事前課題ではタイムラインアプリをサーバーレス設計で実装します。
Azure Portalに配布されたユーザでログインできることを確認します。
初回ログイン時にパスワードの変更を求められるので変更して下さい。
この後、アプリケーション名などに含まれる -nn
の部分は、
Azure全体でユニークである必要があったりするため、
自分に割り当てられた番号を2桁に変えてください。
PC上に直接準備しても良いし、WindowsであればWSL上とかでも良いです。
この手順ではVS Codeを使います。
VS Codeを導入したら、さらに以下の拡張機能を入れて下さい。
今回の講義ではNode.jsを使います。 LTSの最新版を導入して下さい。
コマンドラインからAzureを操作するAzure CLIを導入します。
Azure CLIを導入したら、ログインしておきます。
az login
コマンドを実行するとブラウザが開くので、ログインして下さい。
$ az login
コマンドラインからAzure Functionsを操作するAzure Functions Core Toolsを導入します。 v3.xを入れて下さい。
.NET Core SDKは不要です。
サンプルアプリは、フロントエンドとサーバサイドの2つのレポジトリに別れています。
両方自分のユーザにforkし、PC上でgit clone
してください。
プライベートレポジトリで構いません。
- Frontend: https://github.com/nekoruri/seccamp2020b3-frontend
- API: https://github.com/nekoruri/seccamp2020b3-api
フロントエンドの静的コンテンツは、Static Web Apps
を使ってサービスします。
このStatic Web Apps
はGitHubレポジトリと連携し、pushされた内容を自動でウェブサーバに反映します。
- Azure Portalを開きます。
[リソースの作成]
からWeb
の中のStatic Web App
を選びます。- 以下のように入力します。
- リソースグループ:
seccamp2020b3-nn
を選択 - 名前:
seccamp2020b3-nn
- 地域:
East Asia
- リソースグループ:
GitHubアカウントでサインイン
をクリック- 別ウインドウが開くので、
Authorize
をクリック - forkしたレポジトリを選択
- 別ウインドウが開くので、
- ビルドのプリセット:
Custom
- アプリの場所:
/
- APIの場所:
api
- アプリの成果物の場所: 空欄
[確認及び作成]
[作成]
Static Web Appsの作成が完了したら、VS Codeの左側(アクティビティバー)のAzureのアイコンをクリックし、 Static Web AppsセクションのRefreshボタンを押します。
アプリケーション名を右クリックしてBrowse Site
を選ぶと、
ブラウザで今デプロイしたウェブサイトが開きます。
また、アプリケーション名を右クリックしてOpen in Pprtal
を選ぶと、
Azure Portalの設定画面が開きます。
API部分はAzure Functions
というFunction as a Service (FaaS)
を利用します。
上記Static Web Apps
にもAzure Functions
のミニセットが含まれていますが、
今回のハンズオンで必要な機能(入出力バインディング)が削られているため、別に用意します。
- Azure Portalを開きます。
[リソースの作成]
からCompute
の中の関数アプリ
を選びます。- 以下のように入力します。
- リソースグループ:
seccamp2020b3-nn
を選択 - 関数アプリ名:
seccamp2020b3-nn
- 公開:
コード
- ランタイムスタック:
Nodejs
- バージョン:
12 LTS
- 地域:
Japan East
- リソースグループ:
[確認及び作成]
[作成]
関数アプリの作成が完了したら、VS Codeの左側(アクティビティバー)のAzureのアイコンをクリックし、 FunctionsセクションのRefreshボタンを押します。
サーバサイドのレポジトリをcloneしたディレクトリをVS Codeで開きます([ファイル]
→[フォルダーを開く]
)。
そのディレクトリを右クリックし、Deploy to Function App
をクリックします。
今作成した関数アプリ(seccamp2020b3-nn
)を選択し、上書き確認ダイアログをOKするとデプロイを実行します。
この後ソースコードを変更した場合にもDeploy to Function App
を実行することでクラウド側に反映します。
Azure Functions
にもGitHub連携機能があります。
そちらを使いたい場合は、デプロイメント
のデプロイセンター
からGitHubとの連携設定が可能です。
Azure Portalの関数アプリ設定画面から、API認証を設定します。 今回はAzureへのログインに利用しているAzure ADでの認証を設定します。
以下の簡単設定を構成する
の手順に従って、Azure ADでの認証を設定します。
手順5の[要求が認証されない場合に実行するアクション]
は、匿名認証を許可する
のままにしてください。
投稿されたデータを保存するデータベースを作成します。 今回は保存先としてCosmosDBを利用します。
- Azure Portalを開きます。
[リソースの作成]
からCosmos
で検索し、Azure Cosmos DB
を選びます。- 以下のように入力します。
- リソースグループ:
seccamp2020b3-nn
を選択 - アカウント名:
seccamp2020b3-nn
- API:
コア(SQL)
- Notebooks:
オフ
- 場所:
(Asia Pacific) 西日本
- 容量モード:
サーバーレス
- アカウントの種類:
非運用
- リソースグループ:
[確認及び作成]
[作成]
少し待つとCosmos DBアカウントの作成が完了するので、作成したCosmos DBアカウントを開きます。
データエクスプローラー
をクリックします。New Container
をクリックします。- 以下のように入力して
OK
をクリックします。- Database id:
handson
- Container id:
messages
- Partition key:
/user_id
- Database id:
ここまでの手順では、まだそれぞれデプロイしたフロントエンド、サーバサイド、データベースが 個別にあるだけで連携できていません。 ここからそれらを接続していきます。
関数アプリからCosmos DBに接続するための接続文字列
を設定します。
- Azure Portalから作成したCosmos DBを開きます。
最近のリソース
に表示されていなければ、一番上の検索欄にCosmos
まで入力するとAzure Cosmos DB
が見つかるので、さらにそこから自分が作成したCosmos DBアカウントを開いて下さい。
設定
のキー
を開きます。プライマリ設定文字列
欄の右にあるボタンを押して内容をコピーします。- 先ほど作成した関数アプリを開きます。
- こちらも見つからなければ検索欄に
function
まで入力すると見つかります。
- こちらも見つからなければ検索欄に
設定
の構成
を開きます。アプリケーション設定
の新しいアプリケーション設定
をクリックします。- 以下のように入力してOKします。
- 名前:
seccamp2020b3_DOCUMENTDB
- 値: 上でコピーした接続文字列
- 名前:
- 忘れずに上の
保存
を押します。
フロントエンド中のURLに、関数アプリのドメインを入れます。
index.html
app.js
変更したら忘れずにgitのcommitとpushを行います。 実際にウェブサイトを開いて、変更が反映されていることを確認してください。
APIが別ドメインにあるため、CORSの設定を入れて呼び出せるようにします。
- 関数アプリの
API
のCORS
を開きます。 - 許可される元のドメインに、フロントエンドのURLを入れます。
Access-Control-Allow-Credentials を有効にする
を有効にします。- 上の
保存
を押します。
ここまでの手順がすべて上手くいっていれば、フロントエンドのウェブサイトを開くと以下が実行できるはずです。
Log in
を押すとAzure ADのログイン画面が開き、ログインができます。- 手抜きしているのでログイン後にデフォルトのページになってしまいますが、そのまま閉じて大丈夫です。
Logout
を押すとログアウトする画面が開きます。アカウントを選択する画面に言ってしまった場合も既にログアウトはできているのでそのまま閉じて大丈夫です。- ログイン状態で、
投稿
の隣のテキストボックスに入力して投稿
を押すと自分のタイムラインに投稿されます。 タイムライン表示
を押すと、ログイン中のユーザのタイムラインを表示します。ログアウト状態だとエラーになります。タイムライン表示
の隣のテキストボックスにメールアドレスを入れると、そのユーザのタイムラインを表示します。こちらはログアウト状態でも可能です。
投稿されたデータはCosmos DB
に保存されています。
Azure PortalからCosmos DBを開き、データエクスプローラー
から保存されたデータを確認することができます。
Azure Functionsのログは、様々な方法で見ることができます。
- VS Codeから見る
- Functionsセクションからアプリケーションを見つけ、右クリックの
Start Streaming Logs
- Functionsセクションからアプリケーションを見つけ、右クリックの
- Azure Portalから見る
- 関数アプリの
関数
から目的の関数を選びます。 コードとテスト
を開き、下にあるログ
を開いた状態でAPIを呼ぶとログが表示されます。
- 関数アプリの
- Application Insightsから見る
- 上の検索欄に
insight
を入力し、Application Insights
を開きます。 seccamp2020b3-nn
を選びます。Live Metrics
を開いて10秒ほど待つと、右のサンプルテレメトリにログが表示されます。
- 上の検索欄に