Microsoft Cloud Workshop ~Azure Container Apps 編~
初めまして、wevnal で開発を担当している西村です!
主に BOTCHAN Engagement / Relation の開発を担当しています。
この記事では、先日開かれた Microsoft 様 によるワークショップのレポートをまとめましたので、ぜひご覧くださいませ!
はじめに
改めまして、Microsoft 様による弊社専用のセッションとして Azure Container Apps のワークショップを開いていただきました!
弊社では既に Azure Container App を導入し運用しているプロダクトもあることから、基盤となる技術や戦略を理解し、より効果的なソリューションやベストプラクティスを得るために、このワークショップへ参加してきました。
Microsoft 社での実施だったこともあり、普段はリモートがメインであるメンバーも現地参加が多く、良い交流の場にもなりました。
本記事ではそんな当日のレポートをお届けいたします。
ワークショップ内容
ワークショップでは、座学とハンズオンの2部構成でした。
ここからはその内容について記載していきます。
座学
座学を受ける弊社CTOの様子
はじめに講師の自己紹介を含めた1時間30分の座学が実施されました。
講師は、Cloud Solution Architect として Azure で提供するサービスの最適化や Azure 新機能のご紹介などを担当されておられる方でした。
コンテナについて概要説明
最初に、コンテナ技術を利用する上での前提知識のおさらいを実施していただきました。
- コンテナとは?
- リソース隔離を実現する技術
- 仮装マシンとコンテナの違いは?
- カーネル共有によるオーバーヘッド大小
- Docker コンテナのプロセスは?
- namespace により、ファイルシステム、ネットワーク等を分離
- cgroups により、CPU、メモリ、disc I/O、network を制限
- Docker イメージとは?
- コンテナを起動するためのテンプレート
コンテナ活用シナリオ
コンテナを活用するモチベーションは様々あると思います。
その中で大きく4つの活用シナリオを紹介していただきました。
アプリケーションモダナイゼーション
- Dev, Stage, Prod それぞれの環境で同一イメージを使用することが可能
- 頻繁に行われるアプリケーションの改修において、シームレスなデプロイ作業が可能
- オープンソースを活用する際、パプリックに公開されたコンテナイメージを利用可能
- アプリケーション規模が大きい場合、コンテナ毎に1つの機能を自己完結させるようカプセル化が可能
古い資産の塩漬け
- ホストしている Cloud 環境のランタイムのバージョンアップに伴いライブラリ適応がサポート外となるなど、アプリケーションへの破壊的影響が出てくる場合がある。
- コンテナではランタイムやライブラリをパッケージング(塩漬け)が可能であるため、このような問題を回避できる。
※ 注意点:セキュリティパッチが当たらないため、ネットワークと完全に切り離したり、アップデートの工数を確保する等の考慮が必要となる。
標準化された開発環境の配布
- アプリケーションに必要なライブラリや環境をコンテナイメージとして閉じ込め配布することで、複数人、複数チーム、複数プロジェクトでの開発環境を標準化できる。
CI/CD パイプラインでの活用
- 実行環境差異をコンテナが吸収することで、Dev, Stage 環境でも Prod 環境の正常稼働を保証することができる。
- コンテナでのホスティングにより起動が早く、テストなどのジョブを迅速に実行可能となる。
Azure 上でのコンテナ関連ソリューション紹介
Azure ではコンテナ化に対応するための様々なサービスが用意されているため、その紹介をいただきました。
- Container Instances
- 管理するサーバーなしで Azure 上でコンテナを容易に実行可能
- Web App for Containers
- コンテナベースの Web アプリを大規模に展開して実行可能
- 組み込み認証や閉域化なども容易に実現可能
- Container Apps
- フルマネージドのサーバーレスコンテナサービス
- Azure Kubernetes Service
- Azure で Kubernetes クラスタを構築/管理できるマネージドサービス
- 定義した要件にもとづいてコンテナをクラスタに配置しオーケストレーション可能
- Azure Container Registry
- Docker プライベートリポジトリ
Azure Container Apps について深掘りした紹介
アプリケーションのアップデート戦略
- ローリングアップデート(1つずつ更新)
- ブルーグリーンデプロイメント(新バージョンを実行後トラフィック切り替え)
- カナリアリリース(新バージョンを徐々に実行し、問題なければ公開)
オートスケール
- 不可に応じて自動的にサーバ台数を増減させる
- HTTPトラフィック/イベントドリブン/CPU・メモリ使用量に応じてスケール可能
Graceful Shutdown
- アプリケーションをシャットダウンする前に、進行中の要求を完了するためのタイムアウト期間をもうけ、その間に安全にアプリケーションを終了させる
- 「死に際を美しく」
イングレス
- Container Apps を公開するための設定
- Azure Load Balancer、パブリック IP アドレス、またはその他の Azure リソースを作成しなくても、受信 HTTPS 要求を有効化可能
秘匿情報の外部管理
- Container Apps シークレットの利用
- マネージド ID 経由で Key Vault シークレットを参照
認証・認可
- 組み込み認証(Easy Auth)を使用可能
- 数クリックで認証・認可機能を有効化可能
アプリケーション正常性監視
- Liveness Probe
- レプリカが正常に動作しているかを確認
- 失敗時はレプリカを再起動することで、アプリケーションの可用性を高める
- Readiness Probe
- レプリカがトラフィックを受け入れる状態になっているかを確認
- 失敗時はコンテナアプリにトラフィックを流さない
- Startup Probe
- Podの起動時にのみ実行されるReadiness Probe
- 起動に時間がかかるが、どれくらい時間がかかるか予測できないようなアプリケーションに対
して有効(起動時にファイルダウンロードを行うレガシーアプリなど)
Azure Container Apps のハンズオン
Docker イメージの構築と実行
Docker でのコンテナ立ち上げを実施しました。
- ローカルでのアプリケーションの実行
- 公開用ビルドのファイル セットの発行
- Docker ファイルの作成
- Docker イメージの構築
- イメージからコンテナーを起動
Azure Container Registry の作成とイメージのプッシュ
Azure ポータルにて Registry を作成し、イメージのプッシュを行いました。
Registry を作成する機会は案外少ないので一番新鮮な作業だったかもしれません。
- Azure Container Registry の作成
- イメージをレジストリへプッシュ
Azure Container Apps の作成とイメージの展開
ここで展開したアプリケーションをブラウザから確認できました。
- コンテナアプリの作成
- Container Registry からのイメージ取得
Azure Container Apps の設定
ここが実務で一番頻度が多くなりそうな部分でした。
ロードテストを数クリックで実現できたことが一番反響あった部分ですね。
テスト実施だけでなくメトリクス取得までスムーズに実施できた点がよかったのでしょうか。
- リビジョンモードの設定
- アプリケーションの更新
- 新しいリビジョンの展開
- コンテナアプリのスケーリング
(ここ↓から諸事情により実施できず)
CI/CD を使用したコンテナー アプリの展開
- サービス プリンシパルの作成
- 資格情報の GitHub リポジトリへの保存
- Dockerfile とアプリケーションの更新
- ワークフローの実行
- リビジョンの管理
Microsoft Security DevOps GitHub Actions の構成
- Microsoft Defender for DevOps の有効化
- ワークフロー権限の変更
- ワークフローとアプリケーションの更新
- ワークフローの実行とスキャン結果の確認
現場の雰囲気
今回のワークショップは Microsoft 様のオフィスでの開催でした。
このような素敵な場をお貸しいただけました!
やはり円卓はいいですね。会話のテンポもよく盛り上がりが高まります。
休憩時間にもお話は盛り上がり、リモート参加者側にも現場の活気が伝わってきました。
やはり Microsoft 社の方と直接お話できる機会は見逃せませんね。
(休憩時間は見事オーバーしました)
最後に
実務に関わるワークショップ、そして現地開催というのはより身が入りますね。
「これを使えばあの課題を解決できそう」「早く導入したい」「今のワークフローだとこの辺りに組み込めそう」など様々な思いが駆け巡った時間となったことでしょう。
本ワークショップ後には、次回開催時のテーマを集うアンケートがありました。
今後、より興味関心度の高いトピックのワークショップが開かれるのではと、期待に胸が膨らんでいます!
Microsoft Cloud Workshop 開催の都度イベントレポートを作成していきますので、今後ともよろしくお願いします!
最後にはなりますが、今回のセッションを担当いただいた Asaka 様、またご協力いただいた Microsoft の皆様ありがとうございました!