Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

ハッカソンで役立つAzureのまとめ

こんにちは、MLBお兄さんこと松村です。
このブログは2つのアドベントカレンダーの記事となっています。

オルターブースの前日はしんばくんのSC-900合格記でした。Congratulations!


オルターブースは、株式会社ハックツが運営する学生向けハッカソンイベントの「ハックツハッカソン」にスポンサードしています。
加えて、私をはじめ多くのエンジニアがハックツハッカソンのメンターとして参加してくれています。

嬉しいことに、ハックツハッカソンの参加者のなかで Azure を使って開発を行う学生さんがじわじわ増えてきていて、ハッカソン中に Azure に関する質問をたくさんいただきます。
今回はハッカソンのなかで受けるよく出てくる Azure の質問を参考に、「最初に知っておくと嬉しいこと」としてまとめます。きっと随時更新していきます。

なお、本投稿で紹介するのは「ハッカソンのような時間制約のある状況」において、 Azure のハマりポイントを回避するための内容です。
エンタープライズレベルのベストプラクティスには沿わないケースもあります。

サブスクリプションを準備する

Azure を利用するには「サブスクリプション」という契約が必要になります。
サブスクリプションの種類は様々であり、一般的なのは「従量課金 (pay-as-you-go)」です。

azure.microsoft.com

しかし学生が Azure を利用する場合、「Azure for Students」という種類のサブスクリプションを契約することができます。
このサブスクリプションは、クレジットカード不要であり、$100 分の Azure 利用枠が含まれています。最初はこのサブスクリプションをオススメしています。

azure.microsoft.com

アカウントを作ろう

Azure を利用するにはサインアップが必要です。
サインアップするにはアカウントを準備する必要がありますが、Microsoft アカウントもしくは GitHub アカウントを使いましょう。

azure.microsoft.com

アカウントには多要素認証 (MFA) の設定をお忘れなく!

support.microsoft.com

https://docs.github.com/ja/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authenticationdocs.github.com

ポータルはブクマしよう

ブラウザで Azure の操作を行うにはポータルを使用します。
https://portal.azure.com を忘れずにブックマークしておきましょう!

portal.azure.com

テナントの切り替え方

Azure サブスクリプションは自身のアカウントに紐付きます。
また、自身のアカウントは「Azure Active Directory テナント」というものに紐付きます。

ポータルで Azure を操作しようとして、サブスクリプションが無い・・・みたいな状況が起きたら、それは「アクセスしている Azure Active Directory テナントが違う」という状態です。
ポータル右上にある本みたいなアイコンをクリックすると Azure Active Directory テナントの一覧が表示されるので、目的のテナントに切り替えましょう。

チームメンバーも使えるようにする

チーム開発を行う場合、他のメンバーも Azure 環境に招待してあげましょう。
どこに招待するかというと、雑にいえば「Azure Active Directory テナント」と「Azure サブスクリプション」の2つです。

招待したユーザーには、その環境でどのような操作を許可するのかという「ロール (IAM)」を付与する必要があります。
例えば、自分と近しいロールでよければ「共同作成者 (Contributor)」を付与します。

招待方法はスライドにまとめているので、こちらを参考にしてみてください。

www.slideshare.net

アイコンが欲しい

Azure の構成図を作ろうとするとやはりアイコンが欲しくなります。こちらから SVG ファイルをダウンロードしましょう。

learn.microsoft.com

コードサンプルが欲しい

慣れないクラウドを使ったアプリケーション開発は、当然ですが苦戦します。
ググりながらコードを書いていく作業も大事ですが、コードサンプルをどんどん参考にするのも方法の一つです。

マイクロソフト関連のコードサンプルは、すべてここで検索することができます。
対象のプログラミング言語、目的のサービスで絞り込めば、GitHub で公開されているコードサンプルを見つけることができます。

learn.microsoft.com

リソースプロバイダーの有効化

Azure には様々なサービスがありますが、最初から使用できるのは一部に限られています。
制限されているサービスのリソースを作成しようとするとエラーとなります。

その場合は「リソースプロバイダー」を有効にすることで、リソースを作成できるようになります。
手順はしばやんのブログを参考にしてみてください。

blog.shibayan.jp

利用料金を確認しよう

無償サブスクリプションでも従量課金サブスクリプションでも、課金の状態を見るクセをつけましょう。
Azure ポータルでサブスクリプションのブレードにアクセスすると、アカウントに紐付いている Azure サブスクリプションが表示されます。

サブスクリプションの詳細を見ると「支出の割合と予測」のグラフがあり、使用済みの金額や残りの金額を見ることができます。(Cost Management や Billing と言います)
Azure for Students には $100 分の利用枠がありますので、あとどれくらい残っているかなーというのを確認しながら、計画的に利用しましょう。

learn.microsoft.com

Azure Web Apps

Azure Web Apps とは、Web アプリケーションを実行することに適したサービスですね。

App Service Plan の Tier の選び方

App Service Plan とは、Azure Web Apps の実行環境であり課金単位です。

開発中の場面では、まず Free tier を選びましょう。 Free tier なら従量課金は発生しません。
デモを行うときなど、スペックを上げたい場合は Basic tier や Standard tier へスケールアップ。

Windows の Web Apps なら 10個まで Free tier を使うことができます。
Linux の Web Apps は、各リージョンにつき 1つしか Free tier を使うことができないので注意です。

ただし App Service Plan は複数の Azure Web Apps で使用することができるので、1:1 である必要はありません。(最大10個)

ポート番号は決まっている

Azure Web Apps にアプリケーションをデプロイする際、コードの中でポート番号を指定する場合があります。
例えば express でこのように書いた場合はポート 3000 を使用します。

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Listening on port ${port}`)
})

しかし Azure Web Apps で実行する場合、アプリケーションが使用するポート番号は「80」または「8080」だけが許可されています。
その他のポート番号ではアプリケーションにアクセスすることができません。

learn.microsoft.com

なので、環境変数でポート番号を変更しやすいようにしておくと良いですね。

const port = process.env.PORT || 3000

そして環境変数は Azure Web Apps の「アプリケーション設定」に追加しましょう。

learn.microsoft.com

デプロイの方法

ハッカソンのメンター中、私は必ず「デプロイは最初から CI/CD を構成しよう」と伝えています。
最初にデプロイを自動化しておけば、以降は開発に集中できるからですね。(あと土壇場で焦らなくて済むw

learn.microsoft.com

aadojo.alterbooth.com

ただし GitHub Actions のような CI/CD も慣れが必要なので、とりあえずデプロイだけしたいときは VSCode からやっちゃいましょう。
手順については馬場さんが過去に解説しているので、参考にしてみてください。

aadojo.alterbooth.com

ログを確認する

アプリケーションのデプロイはできたけど、なんか思ったように動いてない場合はログを確認しますよね。
Azure Web Apps でログを確認する場合、「App Service ログ」を有効にした上で「ログストリーム」の画面を使いましょう。
ずらずらーっとログが流れてくるので、アプリケーションの状態を確認することができます。

learn.microsoft.com

より高度なログやテレメトリを確認したい場合は「Azure Application Insights」を使用しましょう。

learn.microsoft.com

データベース

データベースの選び方

Azure には複数のデータベースサービスを使用することができます。

learn.microsoft.com

ファイアウォールの設定を見落とさない

Azure のデータベースには IP アドレスでのファイアウォールが設定されており、なにも操作しなければすべての IP アドレスからの接続を受け付けないようになっています。
みなさん結構これを見落としがち(というか気付かない)ので、リソースを作成するときに以下のファイアウォール規則を設定しましょう。

  • Azure 内の任意の Azure サービスにこのサーバーへのパブリック アクセスを許可する
  • 現在のクライアント IP アドレスを追加する

CREATE DATABASE を忘れずに

Azure ポータルでデータベースリソースを作成したあとは、CREATE DATABASE をすることを忘れないようにしましょう。
ポータルで「データベースを作成した」のでどうしても誤解しがちですが、「データベースサーバーを作成した」だけなので、データベースの中身は自分で構成する必要があります。

リソース作成後、Cloud Shell などを用いてデータベースに接続し、CREATE DATABASE コマンドを実行しましょう。流れはこちらを参考にしてみてください。

learn.microsoft.com

ストレージ

画像を保管したいなら BLOB

「ユーザーがアップロードした画像を保管したい」という質問はかなり多いです。
Azure の場合、ほぼ一択で Azure Blob Storage を使用しましょう。
※base64 形式でデータベースに保持するのでもアリ

Blob SDK は様々なプログラミング言語向けに提供されているので、適切な SDK を使用してアップロード機能を作りましょう。

learn.microsoft.com

コンテナー

コンテナーイメージの保管場所

コンテナーを使ったアプリケーションをデプロイする場合、コンテナーイメージを公開する場所 (=コンテナーレジストリー) が必要です。
一般的なのは Dockerhub だと思いますが、 Azure 内での連携を考えると Azure Container Registry (ACR) も候補に入れましょう。

Azure Container Registry はプライベートなコンテナーレジストリーであり、ACR への認証が成立した場合に限り、コンテナーイメージを利用することができます。

learn.microsoft.com

Azure 内でコンテナーイメージをビルドする

ハッカソン会場によってはどうしてもインターネット速度が満足いかない場合もあります。
そういった環境でコンテナーイメージのビルドやプッシュをすると、とても時間がかかってしまい、どんどん焦ってきます。

Azure Container Registry には「ACR タスク」という機能があり、コンテナーイメージのビルドやプッシュを Azure 内で行うことができます。
この機能のおかげで、会場のインターネット環境に依存することなく、コンテナーを使った開発をスムーズに進めることができるようになります。

ACR タスクはマジでオススメです

learn.microsoft.com

ユーザー認証を作りたい

ハッカソンとはいえユーザー認証機能は必要です。
すべてアプリケーションのフレームワークで実装してもいいですが、Azure にも便利な機能があります。

Azure Web Apps の認証機能

Easy Auth とも呼んだりします。
Azure Web Apps リソースにアクセスするために必要な認証を構成することで、アプリケーション認証を兼ねる方法です。

learn.microsoft.com

blog.shibayan.jp

Azure Active Directory B2C

Easy Auth よりも本格的な認証基盤を作りたい場合は Azure Active Directory B2C を使用します。
よく質問もらうのは、AAD B2C と LINE ログインを組み合わせる方法です。過去の投稿で紹介しているので参考にしてみてください。

aadojo.alterbooth.com


ハッカソンで学生の皆さんからたくさん質問をいただくので、僕らとしても色々調べたり検証したりと、とても有意義な機会となっています。
今後も本記事は更新していこうと思いますので、どしどしご質問ください。

さて、明日はアドベントカレンダー最終日、弊社の社長こじまさんですね。みなさんお楽しみに!