Function Compute の Web 関数を使用すると、Web アプリケーションと API サービスを簡単に構築できます。 Web 関数は、Java SpringBoot、Python Flask、Node.js Express など、さまざまな一般的な言語の Web フレームワークと互換性があるため、既存のアプリケーションをすばやく移行できます。 Function Compute は、基盤となる計算リソースを管理します。 サービスにブラウザまたは URL からアクセスすると、システムはオンデマンドでインスタンスを自動的に起動およびスケーリングします。 アクセスがない場合、インスタンスは自動的に破棄され、実際のリソース使用量に対してのみ料金を支払う必要があります。
Web 関数の作成の概要
このトピックでは、Function Compute の Web 関数を使用して Flask アプリケーションをデプロイする方法について説明します。 全体的なプロセスは次のとおりです。
Web アプリケーションを開発およびテストする: ローカルでサンプルコードを使用してプロジェクトを作成し、API コードを編集およびテストして、API が正しく機能することを確認します。 既存のアプリケーションを移行する場合は、この手順をスキップできます。
コードパッケージを生成する: 必要な依存関係ライブラリをローカルプロジェクトディレクトリにインストールし、プロジェクトを Function Compute にデプロイするための ZIP ファイルにパッケージ化します。
アプリケーションをアップロードしてデプロイする: 関数作成パラメータを構成し、コードパッケージをアップロードして関数作成を完了します。
Web 関数をテストする: Web 関数を呼び出して、Flask アプリケーションの動作を確認します。
前提条件
手順
次の方法を使用して、Web 関数を作成し、コードをデプロイできます。
Function Compute コンソールで作成する: 小規模なアプリケーションの構築または迅速な検証シナリオに適しており、単一の関数をすばやく作成できます。
Serverless Devs コマンドラインツールを使用して作成する: 複雑な本番プロジェクトと自動デプロイシナリオの管理に適しており、YAML 構成ファイルを使用して複数の関数と関連するクラウドリソースを管理できます。 詳細については、「クイックスタート」をご参照ください。
操作を簡素化するために、このトピックでは、Function Compute コンソールを使用して関数を作成する手順を詳しく説明します。
1. Web アプリケーションを開発およびテストする
既存の Flask アプリケーションを移行する必要がある場合は、この手順をスキップして、手順 2: コードパッケージを生成するを参照してください。
次のコマンドを実行して、アプリケーションに必要な
Flask
およびtabulate
依存関係ライブラリをローカル環境にインストールします。pip install Flask tabulate
code
という名前のフォルダを作成し、その中にapp.py
という名前のファイルを作成します。 次のサンプルコードをファイルに貼り付けます。 このコードは、単純なカレンダーサービスを実装し、API インターフェースにカプセル化します。 ユーザーが年と月の情報 (2025 年 1 月など) を入力すると、API は対応するカレンダーテーブルを返します。import calendar from flask import Flask, request from tabulate import tabulate import logging import json # ロガーを初期化 logger = logging.getLogger() # Flask アプリケーションを作成 app = Flask(__name__) @app.route("/", methods=["POST"]) def get_month_calendar(): # リクエスト ID を取得し、ログを出力 requestId = request.headers.get('x-fc-request-id', '') logger.info("FC Invoke Start RequestId: " + requestId) # リクエストコンテンツを取得し、リクエストフォーマットを確認 data = json.loads(request.stream.read().decode('utf-8')) if not ('year' in data and 'month' in data): message = "リクエストは {'year': '1999', 'month': '12'} などのフォーマットである必要があります" return message # カレンダーテーブルを取得 result = print_calendar(year=int(data['year']), month=int(data['month'])) # 返す前にログを出力して、関数の実行が完了したことを示します logger.info("FC Invoke End RequestId: " + requestId) return result def print_calendar(year, month): # 指定された年と月のカレンダーマトリックスを取得 cal = calendar.monthcalendar(year, month) # 月に属さない日付を 0 から空の文字列に変換 cal = list(map(lambda sublist: list(map(lambda x: '' if x == 0 else x, sublist)), cal)) # テーブルヘッダーを作成 headers = ["月", "火", "水", "木", "金", "土", "日"] # tabulate を使用してカレンダーテーブルを出力 return tabulate(cal, headers=headers, tablefmt="grid", stralign='center', numalign='center') if __name__ == "__main__": app.run(host='0.0.0.0', port=9000)
python3 app.py
コマンドを実行して、作成した Flask アプリケーションを実行します。 出力がの場合、Flask アプリケーションが正常に起動したことを示しており、cURL コマンドを使用してアプリケーションをテストできます。
python3 app.py * Serving Flask app 'app' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:9000 * Running on http://47.100.XX.XX:9000 Press CTRL+C to quit
新しいウィンドウを開き、cURL を使用してサンプルリクエストを送信します。 実行に成功すると、カレンダーテーブルが表示されます。
curl -X POST http://127.0.0.1:9000 -d '{"year": "2000", "month": "1"}'
これで、ローカルプロジェクトの作成とテストが完了しました。
2. コードパッケージを生成する
Function Compute に適したコードパッケージをローカルにビルドします。 コードパッケージには、次の内容が含まれている必要があります。
Web アプリケーションに必要なプロジェクトファイル。
アプリケーションに必要な依存関係ライブラリが Web 関数のランタイム環境にない場合、コードパッケージにはこれらの依存関係ライブラリも含める必要があります。 Web 関数ランタイム環境の組み込み依存関係ライブラリの詳細については、「組み込み依存関係」をご参照ください。
依存関係をインストールする: Web アプリケーションのプロジェクトのルートディレクトリで、次のコマンドを実行して、アプリケーションに必要な依存関係ライブラリ (この例では
tabulate
) をディレクトリにインストールします。 完了後、プロジェクトのルートディレクトリには、プロジェクトファイルと依存関係ライブラリが含まれます。説明Python Web 関数ランタイム環境にはすでに
Flask
ライブラリが含まれているため、tabulate
をインストールすれば、サンプルアプリケーションのニーズを満たすことができます。pip install -t . tabulate
プロジェクトのルートディレクトリにあるすべてのファイルをパッケージ化します。
Linux または macOS
プロジェクトのルートディレクトリで、
zip code.zip -r ./*
を実行します。 この手順では、プロジェクトファイルと依存関係ライブラリを ZIP ファイルにパッケージ化し、コードパッケージの構築を完了します。説明ディレクトリに対する読み取りおよび書き込み権限があることを確認してください。
Windows
プロジェクトディレクトリに入り、すべてのファイルを選択し、右クリックして、ZIP ファイルとしてパッケージ化するように選択します。 この手順では、プロジェクトファイルと依存関係ライブラリを ZIP ファイルにパッケージ化し、コードパッケージの構築を完了します。
3. Web 関数を作成し、コードパッケージをデプロイする
-
関数のタイプを選択する: Function Compute 3.0 コンソールを開きます。 ページの左上にあるリージョンリストで、関数を作成するリージョンを選択します。 中国東部 1 (杭州) など、お近くのリージョンを選択することをお勧めします。 次に、[関数] ページで、[関数の作成] をクリックします。 関数の作成ページで、[Web 関数] を選択します。
-
ランタイム環境を選択する: 図に従って、
を選択します。 このランタイムには、Flask フレームワークに必要な依存関係ライブラリが組み込まれています。説明Web 関数の場合、[カスタムランタイム] を関数のランタイム環境として使用することをお勧めします。 [カスタムランタイム] では、起動コマンドとリスナーポートをカスタマイズでき、単一インスタンスのマルチコンカレンシーをサポートしているためです。 [組み込みランタイム] にはこれらの機能がなく、クラウドプロダクトによって生成されたイベントの処理に適しています。
コンテナ化されたデプロイメントを希望する場合は、[カスタムイメージ] を使用して Web 関数を作成することもできます。 この環境も単一インスタンスのマルチコンカレンシーをサポートしていますが、依存関係を自分で管理する必要があります。
さまざまなランタイム環境の詳細な比較については、「関数のランタイム環境の選択」をご参照ください。
-
コードパッケージをデプロイする: 図に従って、前の手順で取得した ZIP フォーマットのコードパッケージをアップロードし、起動コマンドを
python3 app.py
として、リスナーポートを9000
として構成します。 既存の Flask アプリケーションを移行する場合は、実際の起動コマンドとポート (たとえば、Flask のデフォルトポート構成は 5000) に従って構成を変更します。完了したら、[作成] をクリックして、関数の作成が完了するまで待ちます。
4. 関数をテストする
-
関数の URL を取得する: 新しく作成された関数の詳細ページで、[構成] タブをクリックし、左側のナビゲーションウィンドウで [トリガー] を選択します。 HTTP トリガーの構成情報で、パブリックアクセスアドレスをクリックしてアドレスをコピーします。
-
関数をテストする: cURL、Postman、または任意の HTTP クライアントを使用して関数を呼び出し、Flask アプリケーションの機能を確認できます。 cURL を例にとると、コマンドラインで次のサンプルコマンドを実行します (アドレスは前の手順でコピーしたアドレスに置き換えます)。
curl https://******.cn-hangzhou.fcapp.run -d '{"year": "2025", "month": "1"}'
Web インターフェースには、2025 年 1 月のカレンダー情報が出力されます。 サンプル出力は次のとおりです。
説明この手順のサンプルコマンドと出力は、サンプルコードにのみ適用されます。 既存のアプリケーションを移行する場合は、実際のインターフェース名とパラメーターに従ってサービスを呼び出します。 詳細については、「cURL を使用して関数をテストする」をご参照ください。
-
(オプション) ブラウザから関数にアクセスする: HTTP トリガーによって提供されるパブリックアクセスアドレスは、ブラウザで開くことができず (強制ダウンロード)、テスト環境でのみ使用できます。 ブラウザアクセスと本番環境での使用をサポートするには、関数をカスタムドメイン名にバインドすることをお勧めします。 詳細については、「カスタムドメイン名を構成する」をご参照ください。
5. (オプション) リソースをクリーンアップする
Function Compute は、実際のリソース使用量に基づいて課金されます。 作成された関数リソースは、使用されない場合、料金は発生しません。 ただし、OSS および NAS に保存されているデータや作成されたトリガーなど、作成した関数リソースに関連付けられている他のクラウドFunction Computeまたはリソースに注意してください。
関数を削除するには、Function Compute コンソールにログインし、[関数] をクリックしてリージョンを選択し、ターゲット関数の [操作] 列で を選択します。 ポップアップ ダイアログボックスで、削除する関数にトリガーなどのバインドされたリソースがないことを確認し、削除をもう一度確認します。
高度な操作
これで、Web アプリケーションを作成し、Web 関数にデプロイしたので、必要に応じて次の高度な操作を参照できます。
コンソールでコードを開発する: 既存の Web アプリケーションを Web 関数に移行する場合があることを考慮して、このトピックの例ではローカルコード開発を使用しています。 コードパッケージの構築操作を省略する場合は、Function Compute コンソールの WebIDE でコードを編集してクラウド開発を実現することもできます。 詳細については、「WebIDE の使用方法」をご参照ください。
説明WebIDE は、Python、Node.js、および PHP 言語のみをサポートしています。 その他の言語 (Java、Go など) の場合は、コンパイルおよびパッケージ化された ZIP ファイルまたはバイナリファイルのアップロードのみがサポートされています。
アプリケーションセンターを介してプロジェクトを継続的にデプロイする: CI/CD を実現するために、コードをクラウド上の Function Compute に自動的にビルドおよびデプロイする場合は、アプリケーションセンターを使用することをお勧めします。 詳細については、「継続的デプロイのためにアプリケーションセンターを介して既存の Function Compute プロジェクトをデプロイする」をご参照ください。
ログを構成する: デバッグ、トラブルシューティング、またはセキュリティ監査要件への対応を容易にするために、関数のログを構成することをお勧めします。 詳細な手順については、「ログの構成」をご参照ください。
参照
他の言語でコードパッケージをビルドする手順の詳細については、次のドキュメントを参照してください。