Alibaba Cloud SAEでコンテナ化したアプリケーションをさくっとデプロイする

2023年8月4日掲載

キービジュアル

はじめに

前編の記事「Alibaba Cloudからコンテナ化したアプリケーションをデプロイするだけのフルマネージドコンピューティングSAEが登場したので紹介する」で、Alibaba Cloud SAE ( Serverless App Engine )プロダクトサービスを紹介しましたが、本記事では、SAEによる簡単なデプロイ手順を紹介します。

目次

1. Alibaba Cloud SAEの使い方:クイックにDeployする

試しに超簡単なコンテナアプリケーションをデプロイしてみます。

SAEはどんなアプリケーション・サービスのコードでも対応しているため、Google CloudのCloud Runで実際に動けるサンプルコードを使って試します。もちろんAWS App RunnerやAzure Container Appsのコードでも良いですが、今回はクイックなDeploy用として、Google Cloudのドキュメントのコードを拝借しています。

<参考>
Cloud Run に Python サービスをデプロイする

AWS App Runner

Azure Container App Hello world sample

 

コードは次の通りです。内容としては、Flaskを使って、ブラウザにPublic IPアドレスを入力したら、「Hello World!」と返却される簡易プログラミングです。
全てローカルのpython_hello_worldフォルダにて格納しています。

 

python_hello_world/app.py


import os

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
   name = os.environ.get("NAME", "World")
   return "Hello {}!".format(name)


if __name__ == "__main__":
   app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))


python_hello_world/Dockerfile


FROM python:3.11-slim

ENV PYTHONUNBUFFERED True

ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./

RUN pip install Flask gunicorn

CMD exec gunicorn --bind 0.0.0.0:8080 --workers 1 --threads 8 --timeout 0 main:app


python_hello_world/.dockerignore


Dockerfile
README.md
*.pyc
*.pyo
*.pyd
__pycache__
.pytest_cache


SAEコンソール画面の「Create Application」ボタンから新たにアプリケーション・サービスを作ります。

アプリケーション・サービスの名前を入れます。

次はRepositoryを作成します。Repositoryはソースコードやディレクトリ構成を管理保持するためのシステムのことです。

コンテナレジストリの諸元ソースを選定します。今回はローカルにPythonコードを置いているため、Local Repositoryを選定します。

SAEコンソール画面にて、コマンド操作指示が表示されるので、この流れに沿って操作します。

内容としては、ローカルにあるソースコードをDockerコンテナイメージファイルとしてRegistoryへ上げ、それをSAEへ反映する流れです。

コマンド操作が完了し、何事も問題なければ、SAEコンソール画面にてImage Tagが追加登録されています。このImageはローカルのソースコードをDockerコンテナ化したものです。

このImageを使って、アプリケーションを作成します。まずはNamespaces画面から、Namespacesを新たに作成します。Namespacesはアプリケーション・サービスをテスト環境・ステージング環境・運用環境などの様々なRuntime環境を論理的に分離するために使用します。もし分離する必要が無い場合は、Default namespaceを選択します。今回はquickstartという名前にしています。

Namespacesができたら、Application画面へ遷移し、新規でApplicationを作成します。

アプリケーションをデプロイします。

デプロイ完了。

作業開始からデプロイ完了時間をみると、ここまでの作業で5分もかからないです。ソースコードを含めた、アプリケーションに必要なファイル作成 ⇒ コンテナイメージビルド ⇒ Namespaces作成 ⇒ デプロイと、超簡単に構築できるのはクラウドサービスとしての恩恵を感じます。

2. 他パブリッククラウドのサーバレスPaaS製品の特徴について

著者はAlibaba Cloud SAEをいじる前に、AWS App Runner、Google Cloud Runをそれぞれ試しています。それぞれの所感を述べると次の通りです。検証条件や環境など全てがApple-to-appleではないため、厳密に比較調査した結果ではありませんし、あくまでも個人的な操作による所感として参考に頂ければ幸いです。

なお、Azure Conainer Appsは業務上触れる機会がなかなかなかったため、いずれは試そうとは思います。

Alibaba Cloud SAE

  • Google Cloud Runと同じく、コンテナ化されたWebアプリケーションを素早くデプロイすることが可能
  • Google Cloud Runと同じく、ユーザーのワークロードなどに応じて、インスタンス(コンテナ)を自動的にスケーリング
  • Spring Cloud、Apache Dubbo、HSFなどのマイクロサービスをフルサポート(他社製品なら追加で組み込み開発が必要で、学習コストや複雑な運用保守問題が発生)
  • Kubernetesベースで開発されているもの、SAEとしてkubectlやAPI Serverは非公開状態。例えば、kubectlを使い、yamlファイルにてアプリをSAEにデプロイすることはできない
  • TerraformらIaCベースで処理をサポート
  • コンソールでモニタリングや構成変更が簡単に行える
  • VPCとコンテナを分離した構成が可能(Namespaces)
  • ソースコードはJAVA、PHP、Python、Nodejs、Go、C#などに対応
  • JAR、WAR、ZIP、イメージからデプロイすることも可能
  • vCPU、メモリ 1分ごとに課金
  • Cloud Runと同じく、Clod Start(インスタンスを新規立ち上げする際の遅延)を最小化
  • ステートフルのアプリは未対応
  • Cloud Runと同じく構成が変更されると、Repoが自動更新される。段階的リリースやカナリアリリース、Blue/Greenデプロイやサービスのロールバックをサポート

 

AWS App Runner

  • Google Cloud Runと同じく、コンテナ化されたWebアプリケーションを素早くデプロイすることが可能
  • Google Cloud Runと同じく、ユーザーのワークロードなどに応じて、インスタンス(コンテナ)を自動的にスケーリング
  • ログ・メトリクスを収集し、Observabilityによる監視が可能
  • vCPU、メモリが1時間あたりに課金
  • 基本的にパブリックなアプリケーション・サービス向け
  • VPC内に内部サービスを構築することはできない
  • 通信方式はかなり限定的。HTTP/2、Websocketは非サポート
  • ソースコードからのデプロイはPythonとNode.jsのみサポート
  • 段階的リリースやカナリアリリース、Blue/Greenデプロイは非サポート

 

Google Cloud Run

  • App Runnerと同じく、コンテナ化されたWebアプリケーションを素早くデプロイすることが可能
  • App Runnerと同じく、ユーザーのワークロードなどに応じて、インスタンス(コンテナ)を自動的にスケーリング可能
  • VPC内部からのみアクセスできる内部サービスを作成するオプションが付帯
  • 元々KNativeをベースとして開発されているため、Knative Serving APIをサポート
  • ソースコードからのデプロイはGo、Python、Java、Node.jsなどの言語をサポート
  • Clod Start(インスタンスを新規立ち上げする際の遅延)を最小化
  • 100万Request毎、vCPU秒ごと、GiB秒ごとに課金
  • ステートレス前提のコンテナ構成のため、コンテナはリクエストごとに作成および破棄されることから、データはデータベースなど外部サービスを介して保持する必要がある
  • 構成が変更されると、新しいrevisionを自動作成。段階的リリースやカナリアリリース、Blue/Greenデプロイやサービスのロールバックをサポート

 

3. さいごに

Alibaba Cloud SAEはインフラストラクチャの管理に時間を費やすことなく、純粋にアプリケーション・サービスの開発に集中できます。SAEのサービスコンセントである「アプリケーションのためのサービス」を実現しているサービスが国際サイトに登場したことにより、Alibaba Cloudを利活用する開発者にとっては、より簡単に、スケーラブルで信頼性の高いアプリケーション・サービスを迅速にデプロイ、運用することができます。これはクラウドサービスへの全体的なアプローチとして大きな進歩と機会を得ることができるのではないでしょうか。

 

一方で、SAEは上述通り幅広いシナリオやケイパビリティを持つ一方、複雑なDockerfile構成を簡潔化してくれるPaketo Buildpackには対応しておらず、加えてGoogle Cloud Runのみ対応できているマルチコンテナはまだ対応していないこともあり、著者としてはSAEとしてどこまで出来るか要検証したいところなので、後日SAEに関する記事を続投する予定です。

関連サービス

Alibaba Cloud

Alibaba Cloudは中国国内でのクラウド利用はもちろん、日本-中国間のネットワークの不安定さの解消、中国サイバーセキュリティ法への対策など、中国進出に際する課題を解消できるパブリッククラウドサービスです。

MSPサービス

MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

おすすめの記事

条件に該当するページがございません