Microsoft Cloud Workshop ~Azure Container Apps 編~
初めまして、wevnal で開発を担当している西村です!
主に BOTCHAN Engagement / Relation の開発を担当しています。
この記事では、先日開かれた Microsoft 様 によるワークショップのレポートをまとめましたので、ぜひご覧くださいませ!
はじめに
改めまして、Microsoft 様による弊社専用のセッションとして Azure Container Apps のワークショップを開いていただきました!
弊社では既に Azure Container App を導入し運用しているプロダクトもあることから、基盤となる技術や戦略を理解し、より効果的なソリューションやベストプラクティスを得るために、このワークショップへ参加してきました。
Microsoft 社での実施だったこともあり、普段はリモートがメインであるメンバーも現地参加が多く、良い交流の場にもなりました。
本記事ではそんな当日のレポートをお届けいたします。
ワークショップ内容
ワークショップでは、座学とハンズオンの2部構成でした。
ここからはその内容について記載していきます。
座学
はじめに講師の自己紹介を含めた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 の皆様ありがとうございました!
この記事が参加している募集
wevnalは、「人とテクノロジーで情報を紡ぎ、日常にワクワクを」をミッションに掲げて、「BXプラットフォームBOTCHAN(ボッチャン)」というマーケティングSaaSプロダクト事業を行っています! 今はサポートよりも、ステキな方との出会いがほしい。