0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure App Service におけるコードとコンテナのデプロイ方法の比較

Posted at

Azure App Serviceにおけるデプロイ方式の比較:コード vs コンテナ

Azure App Serviceは,Webアプリケーション,REST API,モバイルバックエンドをホストするためのフルマネージドPaaSサービスである.このサービスでは主に「コードのデプロイ」と「コンテナのデプロイ」という2つの方法でアプリケーションをデプロイできる.この記事では,それぞれの方法の具体的な手順と特徴を解説し,ユースケースに応じた選択指針を提供する.

1. コードによるデプロイ

コードをデプロイする方法では,アプリケーションのソースコードをAzureに直接デプロイする.Azureが提供するランタイム環境上でコードが実行される.

VS Codeを使用したコードデプロイの手順

1. 前提条件

  • VS Codeがインストールされていること
  • Azure App Service拡張機能がインストールされていること
  • Azureアカウント

2. VS Codeへの拡張機能のインストール

VS Codeの拡張機能タブから「Azure App Service」を検索してインストールする.

3. Azureアカウントへのサインイン

VS Codeの左側のActivityBarから「Azure」アイコンをクリックし,「Sign in to Azure...」をクリックしてAzureアカウントにサインインする.

4. プロジェクトの用意

デプロイするプロジェクトをVS Codeで開く.ここではシンプルなNode.jsアプリケーションを例に進める.

image.png

5. App Serviceへのデプロイ

  1. Azureアイコンをクリックし,「App Service」セクションを展開する
  2. 「+」ボタンをクリックして新しいウェブアプリを作成するか,既存のものを選択する
  3. 新規作成の場合は以下の情報を入力する:
    • アプリケーション名(グローバルで一意である必要がある)
    • ランタイムスタック(Node.js,Python,.NETなど)
    • 価格プラン

image.png

  1. リソースグループを選択または新規作成する

image.png

  1. App Serviceプランを選択または新規作成する

  2. デプロイが完了するまで待つ

デプロイ進行中

6. デプロイ完了と確認

デプロイが完了すると,VS Codeに通知が表示される.「Browse Website」をクリックしてブラウザでアプリケーションを確認できる.

image.png

2. コンテナによるデプロイ

コンテナを使用したデプロイでは,Dockerコンテナを作成し,そのイメージをAzure App Serviceにデプロイする.Credlyのサイトに登録されている資格に関してデータ分析を行うサービスを作ってみた話 と同様の手順である.

VS Codeを使用したコンテナデプロイの手順

1. 前提条件

  • VS Codeがインストールされていること
  • Docker拡張機能とAzure App Service拡張機能がインストールされていること
  • Docker Desktopがインストールされ,実行されていること
  • Azureアカウント

2. VS Codeへの拡張機能のインストール

VS Codeの拡張機能タブから「Docker」と「Azure App Service」を検索してインストールする.

3. Dockerfileの作成

プロジェクトルートにDockerfileを作成する.VS Codeは自動的にファイルタイプを認識し,構文ハイライトを提供する.

シンプルなNode.jsアプリケーションの例:

FROM node:14

WORKDIR /usr/src/app

# アプリの依存関係をインストール
COPY package*.json ./
RUN npm install

# アプリのソースをコピー
COPY . .

# ポート設定
EXPOSE 8080

# アプリ起動コマンド
CMD ["node", "server.js"]

4. ローカルでコンテナをビルド&テスト

VS Codeのターミナルから以下のコマンドを実行:

docker build -t myapp:latest .
docker run -p 8080:8080 myapp:latest

ブラウザからlocalhost:8080にアクセスして動作を確認する.

5. コンテナレジストリにイメージをプッシュ

Azure Container Registryまたは他のコンテナレジストリ(Docker Hub)にイメージをプッシュする.

Azure Container Registryを使用する場合:

  1. VS CodeのAzureタブからコンテナレジストリを作成または選択する

  2. イメージにタグをつけてプッシュする

az acr login --name myregistry
docker tag myapp:latest myregistry.azurecr.io/myapp:latest
docker push myregistry.azurecr.io/myapp:latest

6. App Serviceのデプロイ

  1. VS CodeのAzureタブでApp Serviceを右クリックし「Create New Web App...」を選択する
  2. 「Linux」を選択する
  3. 「既存のDockerイメージを使用する」を選択する
  4. イメージソースを選択する(Azure Container RegistryまたはDocker Hub)
  5. 使用するイメージとタグを選択する
  6. アプリの名前を入力する
  7. リソースグループとApp Serviceプランを選択する
  8. デプロイが完了するまで待つ

7. デプロイ完了と確認

デプロイが完了すると通知が表示される.「Browse Website」をクリックしてブラウザでアプリケーションを確認する.

コンテナを利用する実践例

コンテナを利用することで,標準的なApp Service環境では難しい特殊な依存関係を持つアプリケーションも実行可能になる.その一例として,Webスクレイピングのシナリオが挙げられる.

例えば,ChromeDriverを使用したスクレイピングアプリケーションをコンテナ化する場合,必要なライブラリやドライバーをすべてDockerfileに記述してイメージ化できる.このアプローチにより,ブラウザの自動操作やヘッドレスブラウジングが必要なアプリケーションもAzure App Serviceで容易に運用することが可能となる.

3. 両方式の比較

コードデプロイの利点

  • シンプルさ: コンテナ化の知識が不要で,直接コードをデプロイできる
  • マネージド環境: Azureがランタイム環境を管理してくれる
  • 自動スケーリング: Azureの自動スケール機能をすぐに活用できる
  • 簡単なCI/CD統合: GitHub ActionやAzure DevOpsとの連携が容易

コードデプロイの欠点

  • 環境の制約: 利用可能なランタイムとバージョンが限定される
  • カスタマイズ性の制限: システムの低レベル設定をカスタマイズできない場合がある
  • 依存関係の管理: 複雑な依存関係がある場合は構成が難しい場合もある

コンテナデプロイの利点

  • 一貫性: 開発環境と本番環境の一貫性が保証される
  • 柔軟性: OSレベルの依存関係も含めて完全に制御可能
  • ポータビリティ: Kubernetes,ACI,他のクラウドなど他の環境にも移行しやすい
  • カスタマイズ: 特殊なランタイムや構成が必要な場合に対応可能
  • 特殊依存関係の管理: ChromeDriverなど特殊なバイナリを含む環境を構築できる

コンテナデプロイの欠点

  • 複雑さ: Docker,コンテナの知識が必要
  • イメージ管理: コンテナイメージの作成,保存,バージョン管理が必要
  • オーバーヘッド: コンテナレイヤーによる若干のパフォーマンスオーバーヘッド

まとめ

コードデプロイが適しているケース

  • 標準的な言語やフレームワークを使用した単純なアプリ
  • コンテナに関する知識がないチーム
  • 素早いプロトタイピングや開発サイクルが必要な場合
  • Azure固有の機能に密接に統合したい場合

コンテナデプロイが適しているケース

  • 複雑な依存関係を持つアプリケーション
  • 特殊なソフトウェアや設定が必要なケース
  • マルチクラウド戦略を採用している組織
  • 開発と本番の環境を完全に一致させる必要がある場合
  • マイクロサービスアーキテクチャ採用時
  • スクレイピングなど,標準環境では難しい処理を行う場合

どちらのアプローチも Azure App Service でサポートされており,アプリケーションの要件,チームのスキルセット,将来の拡張計画に基づいて選択するとよい.また,ハイブリッドアプローチも可能である.例えば,一部のコンポーネントはコードとしてデプロイし,複雑な依存関係を持つコンポーネントはコンテナとしてデプロイすることも検討できる.

Azure App Service の柔軟性を活かして,最適なデプロイ戦略を選択すべきである.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?