3.8K Views
April 30, 24
スライド概要
2024/04/27 なごあずの集い#1 での登壇資料です
Azureでコンテナアプリケーション開発をはじ めよう! 2024/04/27 なごあずの集い#1 Shunsuke Yoshikawa
Shunsuke Yoshikawa X: @ussvgr Technical Evangelist @ AP Communications Organizer @ Platform Engineering Meetup Microsoft MVP (Microsoft Azure) 2023~
こんな経験ありませんか? 本番環境と開発環境 で設定が違う … 明日までに 本番サーバーを もう1個作れって? コスト削減の一貫で開 発用サーバーを 複数システムで共用 することに…
コンテナで解決 ・設定ファイルで環境を作成できる ・ビルドしたコンテナは他のサーバーでも動く ・サーバーを論理的に分割しリソースを割当て
Azure上の代表的なコンテナサービス Azure Kubernetes Service Azure Container Apps Web App for Containers 難易度 高 中 小 自由度 高 中 小 ※個人の見解です
「ちょうどいい」サービス Azure Kubernetes Service Azure Container Apps Web App for Containers 難易度 高 中 小 自由度 高 中 小 ※個人の見解です
フルマネージドなKubernetesサービス ACA は Azure Kubernetes Service(AKS) と同じく Kubernetes をベースにしたサービス AKS と ACA の大きな違いは、 ACAは「フルマネージド」であること Kubernetes の API にユーザーがアクセスすることはできないが、 その代わりに面倒な管理部分はすべて Microsoft がやってくれる ノードのキャパシティ管理や Kubernetes のバージョンアップなどに悩まされることなく アプリケーションの開発・運用に注力できる
実際の開発の流れを考える
こんなアプリケーションを想定 ● Python + Flask のWebアプリケーション ● データベースに PostgreSQL を使用 ● 高頻度にアプリをリリースしたい
まずはローカル環境 開発マシンにコンテナ実行環境をインストールしましょう Windows だと… など Docker Desktop (個人利用および小規模ビジネスは無償、それ以外は有償) Podman Desktop (OSS Apache-2.0 license) Rancher Desktop (OSS Apache-2.0 license) Docker-CE on WSL2
アプリのディレクトリ構造 こんな感じのファイル配置 . ├── Dockerfile ├── app.py └── requirements.txt ← コンテナ作成方法の定義ファイル ← アプリの実体 ← 依存パッケージ情報
Dockerfile どう作るか Azure CLI で自動生成できるので、まずはそこから始めればよい az aks draft create --dockerfile-only=true
自動生成されたDockerfile FROM python ENV PORT 3000 EXPOSE 3000 WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt COPY . . ENTRYPOINT ["python"] CMD ["app.py"]
コンテナをビルドして起動 # アプリとPostgreSQLを配置するネットワークを作成 docker network create sample-network # コンテナをビルドして起動 docker build -t sampleapp:v1 . docker run -p 3000:3000 --network sample-network -d sampleapp:v1 # PostgreSQLもコンテナとして起動 docker run --name some-postgres --network sample-network \ -e POSTGRES_PASSWORD=mysecretpassword -d postgres
ここまでの環境
Azure上で起動する(忙しい人向け) 以下のコマンド一つで、PostgreSQL以外の必要なリソースを作成し、 コンテナイメージのビルド・起動まですべてやってくれる az containerapp up -n sample-containerapp --source .
Azure上で起動する(普通の手順) 前ページのコマンドだと細かい設定ができないため、 本番利用を鑑みるとリソースを個別に作成していくのが望ましい 必要なリソースは以下のとおり ● ● ● ● ● ● VNet/Subnet Azure Container Registry Container Apps環境 コンテナアプリ Log Analyticsワークスペース Azure Database for PostgreSQL
Azureでの環境構築例
Azure Container Registry (ACR) ビルドしたコンテナイメージを格納するサービス 格納したイメージを実行することで、 どの環境でも同じコンテナイメージでアプリケーションを起動できる
コンテナをビルドしてACRへPush # コンテナをビルドする際に、 ACR名をタグとして付与する docker build -t <ACR名>.azurecr.io/sampleapp:v1 . # ACRへログイン az acr login -n <ACR名> # コンテナイメージを ACRへPush docker push <ACR名>.azurecr.io/sampleapp:v1
Azure Container Apps を構成する2つのリソース ACAは Container Apps 環境 コンテナー アプリ の2つのリソースで構成される Container Apps 環境 は ネットワークやログの保管先などを定義する論理的な境界 コンテナー アプリ は 実際に稼働させるアプリケーションコンテナの リソースを指す 引用元: Azure Container Apps のコンテナー
もう少しわかりやすく Container Apps 環境 を作成するときは ● ● どのサブネットに配置するか ログをどのLog Analyticsワークスペースに出力するか を指定する コンテナーアプリ を作成するときは ● ● ● どのContainer Apps環境上に作成するか どのコンテナイメージを起動するか どれくらいのリソースを割り当てるか を指定する ※他にももっと設定できる項目あるんですが、 説明の便宜上内容を省略してます
CI/CDパイプライン 高頻度のアプリリリースを考慮すると 現代のアプリケーション開発ではCI/CDパイプラインの整備は不可欠 Azure Container Appsでは、GitHub Actionsを利用したCI/CDパイプラインを簡単に作成できる
実際の画面
本番利用向けの機能
FQDNを設定したい Azure Container Appsは標準で https://<コンテナーアプリ名>.<ランダムな文字列>.<リージョン名>.azurecontainerapps.io というFQDNが用いられる 自社ドメインを設定する場合はカスタムドメイン 機能で設定できる DNSレコードとして TXTレコードと CNAME or A レコードを設定するのみで利用可能 SSL/TLS証明書も無料で発行可能!
急なアクセス増に備えたい HTTPリクエストに応じてオートスケールできます! リクエストの数だけじゃなく、KEDA を利用した様々なスケール条件を利用可能
コストを抑えたい オートスケールで 0個にスケールイン することで、リクエストがないときの費用を下げられる ただし、0 → 1 のスケールアウト時はレスポンスを返すまでに時間がかかってしまうので、 それを許容できる場合にのみ利用する その他、CPU使用率が低いときは自動で請求額が下がる仕組みや 節約プランを活用することもできる
2024/04/27 時点の価格表 引用元: Azure Container Apps の価格
特定のIPアドレスからのみアクセスを受け付けたい Azure Container Apps単体で設定可能
まとめ
Azureでコンテナ、いいですよ ● Azure CLIやポータルでの操作で簡単に設定できる ● 追加の要件があれば、手動で複雑な設定も可能 ● より詳細な要件があればAzure Kubernetes Serviceを、 もっと簡単にコンテナ起動するだけならWeb App for Containers、 と多様なユースケースをカバーするサービスが揃ってる Azureでコンテナ、やってみましょう!
ご清聴ありがとうございました