Function Compute の Web 関数を使用すると、Web アプリケーションや API サービスを簡単に構築できます。Web 関数は、Java SpringBoot、Python Flask、Node.js Express など、多くの一般的な言語の Web フレームワークと互換性があり、既存のアプリケーションを迅速に移行できます。Function Compute は、基盤となるコンピューティングリソースを管理します。ブラウザや URL を介してサービスにアクセスすると、システムは需要に応じてインスタンスを自動的にプロビジョニングし、スケーリングします。トラフィックがない場合、インスタンスは自動的に解放され、使用したリソースに対してのみ料金が発生します。
概要
このトピックでは、Function Compute の Web 関数を使用して Flask アプリケーションをデプロイする方法について説明します。全体的なプロセスは次のとおりです。
Web アプリケーションの開発とテスト:サンプルコードを使用してローカルマシン上にプロジェクトを作成します。API コードを編集およびテストして、API が期待どおりに動作することを確認します。既存のアプリケーションを移行する場合は、このステップをスキップできます。
コードパッケージの生成:必要な依存関係をローカルのプロジェクトディレクトリにインストールします。その後、プロジェクトを ZIP ファイルにパッケージ化して Function Compute にデプロイします。
アプリケーションのアップロードとデプロイ:関数作成パラメーターを設定し、コードパッケージをアップロードして関数を作成します。
Web 関数のテスト:Web 関数を呼び出して、Flask アプリケーションが期待どおりに実行されていることを確認します。
前提条件
操作手順
以下のいずれかの方法を使用して、Web 関数を作成し、コードをデプロイできます。
Function Compute コンソールで関数を作成する:この方法では、単一の関数を迅速に作成でき、軽量なアプリケーションの構築や迅速な検証に適しています。
Serverless Devs コマンドラインツールを使用する:この方法は、複雑な本番プロジェクトの管理や自動デプロイに適しています。YAML 設定ファイルを使用して、複数の関数とそれに関連するクラウドリソースを管理できます。詳細については、「クイックスタート」をご参照ください。
プロセスを簡略化するため、このトピックでは Function Compute コンソールで関数を作成する方法について説明します。
ステップ 1:アプリケーションの開発とテスト
既存の Flask アプリケーションを移行する場合は、このステップをスキップしてステップ 2:コードパッケージの生成に進んでください。
ローカルマシンで新しいコマンドラインウィンドウを開き、次のコマンドを実行して、必要な
Flaskおよびtabulateライブラリをインストールします。pip install Flask tabulatecodeという名前のフォルダと、その中にapp.pyという名前のファイルを作成します。ファイルに次のサンプルコードを貼り付けます。このコードは、API としてパッケージ化されたシンプルなカレンダーサービスを実装します。この API は、2025 年 1 月などの年と月を受け取り、その月のカレンダーテーブルを返します。import calendar from flask import Flask, request from tabulate import tabulate import logging import json logger = logging.getLogger() 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 = "Request must be in format like {'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 = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"] # 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 アプリケーションを実行します。出力にRunning on http://127.0.0.1:9000が表示された場合、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 アプリケーションプロジェクトのルートディレクトリで、次のコマンドを実行して、必要な依存関係 (この例では
tabulate) をそのディレクトリにインストールします。このコマンドは、プロジェクトのルートディレクトリに依存関係をインストールします。説明Python Web 関数ランタイムには、すでに
Flaskライブラリが含まれています。サンプルアプリケーションを動作させるには、tabulateライブラリのみをインストールする必要があります。pip install -t . tabulateプロジェクトのルートディレクトリにあるすべてのファイルをパッケージ化します。
Linux または macOS
プロジェクトのルートディレクトリで、
zip code.zip -r ./*コマンドを実行します。このコマンドは、プロジェクトファイルと依存関係を ZIP ファイルにパッケージ化し、コードパッケージを作成します。説明ディレクトリに対する読み取りおよび書き込み権限があることを確認してください。
Windows
プロジェクトディレクトリに移動し、すべてのファイルを選択して右クリックし、ZIP ファイルにパッケージ化します。これにより、プロジェクトファイルと依存関係が ZIP ファイルにパッケージ化され、コードパッケージが作成されます。
ステップ 3:関数の作成とデプロイ
Web 関数タイプの選択:Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 をクリックします。上部のナビゲーションバーで、関数を作成するリージョンを選択します。表示されたページで、関数を作成 をクリックし、画面の指示に従って Web 関数 を作成します。
ランタイムの選択:次の図に示すように、 を選択します。このランタイムには、Flask フレームワークで必要な依存関係が含まれています。
説明Web 関数には カスタム実行時 を使用することを推奨します。カスタム実行時 を使用すると、起動コマンドとリッスンポートを指定でき、同時リクエスト処理をサポートします。組み込み実行時 はこれらの機能を提供せず、他のクラウドサービスによって生成されるイベントの処理により適しています。
コンテナ化されたデプロイを希望する場合は、カスタムイメージ を使用して Web 関数を作成できます。このランタイムも同時リクエスト処理をサポートしますが、依存関係はご自身で管理する必要があります。
ランタイムの詳細な比較については、「ランタイムの選択」をご参照ください。
コードパッケージのデプロイ:図に示すように、ステップ 2 で作成した ZIP コードパッケージをアップロードします。起動コマンドを
python3 app.pyに、リッスンポートを9000に設定します。既存の Flask アプリケーションを移行する場合は、実際の起動コマンドとポートに基づいて設定を変更してください。たとえば、Flask のデフォルトポートは 5000 です。作成 をクリックし、関数が作成されるのを待ちます。

ステップ 4:関数のテスト
関数 URL の取得:新しく作成された関数の詳細ページで、トリガー タブをクリックします。HTTP トリガーの設定で、パブリックエンドポイントをコピーします。
テスト環境で認証が不要な場合は、HTTP トリガーの作成時または作成後に、トリガーの設定で 認証方法 を 認証不要 に変更できます。

関数のテスト:cURL、Postman、または任意の HTTP クライアントを使用して関数を呼び出し、Flask アプリケーションが期待どおりに動作することを確認できます。次の例では cURL コマンドを使用します。URL を前のステップでコピーしたエンドポイントに置き換えてください。
curl https://******.cn-hangzhou.fcapp.run -d '{"year": "2025", "month": "1"}'Web API は 2025 年 1 月のカレンダー情報を返します。以下は出力のサンプルです。
説明デフォルトの HTTP トリガー設定を使用すると、コマンドは「MissingRequiredHeader」エラーを返します。テスト環境の場合、トリガーの 認証方法 を 認証不要 に変更できます。
このステップのサンプルコマンドと出力は、サンプルコードにのみ適用されます。既存のアプリケーションを移行する場合は、実際の API 名とパラメーターに基づいてサービスを呼び出してください。詳細については、「cURL を使用した関数のテスト」をご参照ください。
(任意) ブラウザからの関数へのアクセス:HTTP トリガーが提供するパブリックエンドポイントは、ブラウザで直接開くことができず (強制ダウンロードがトリガーされる場合があります)、テスト目的でのみ使用されます。ブラウザからのアクセスを有効にし、本番環境で使用するためには、関数にカスタムドメイン名をバインドすることを推奨します。詳細については、「カスタムドメイン名の設定」をご参照ください。
(任意) ステップ 5:リソースのクリーンアップ
Function Compute は従量課金制のサービスです。未使用の関数に対しては課金されません。ただし、OSS に保存されたデータや File Storage NAS、作成されたトリガーなど、関連するクラウドリソースに対して料金が発生する場合があります。
関数を削除する必要がある場合は、Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 をクリックします。リージョンを選択します。対象の関数の 操作 列で、削除 をクリックします。表示されるダイアログボックスで、関数がトリガーなどのリソースにバインドされていないことを確認し、削除を確定します。
高度な操作
Web アプリケーションを Web 関数に作成してデプロイしたので、必要に応じて次の高度な操作を実行できます。
コンソールでのコード開発:このトピックでは、既存のアプリケーションの移行に役立つローカル開発に焦点を当てていますが、WebIDE を使用してデプロイを簡素化することもできます。この方法では、ローカルでコードパッケージを生成する必要がなく、迅速な開発イテレーションに適しています。詳細については、「WebIDE の使用」をご参照ください。
説明WebIDE は Python、Node.js、PHP のみをサポートしています。Java や Go などの他の言語では、コンパイルおよびパッケージ化された ZIP ファイルまたはバイナリファイルのみをアップロードできます。
Serverless Application Center を使用したプロジェクトの継続的デプロイ:コードのビルドとデプロイ (CI/CD) を Function Compute に自動化するには、Serverless Application Center を使用します。詳細については、「Serverless Application Center を使用した既存の Function Compute プロジェクトの継続的デプロイメントの実装」をご参照ください。
ログ記録の設定:デバッグ、トラブルシューティング、またはセキュリティ監査を容易にするために、関数のログ記録を設定することを推奨します。詳細については、「ログ記録機能の設定」をご参照ください。
参考
さまざまな言語の依存関係パッケージの追加方法の詳細については、次のトピックをご参照ください。