すべてのプロダクト
Search
ドキュメントセンター

Function Compute:Web 関数を使用して Web アプリケーションを迅速に作成する

最終更新日:Nov 09, 2025

Function Compute の Web 関数を使用すると、Web アプリケーションや API サービスを簡単に構築できます。Web 関数は、Java SpringBoot、Python Flask、Node.js Express などの一般的な Web フレームワークと互換性があります。この互換性により、既存のアプリケーションを迅速に移行できます。Function Compute は、基盤となる計算リソースを管理します。サービスがブラウザまたは URL を介してアクセスされると、Function Compute は必要に応じてインスタンスを自動的に起動およびスケーリングします。リクエストがない場合、Function Compute はインスタンスを自動的に破棄します。使用したリソースに対してのみ料金が発生します。

Web 関数作成の概要

このトピックでは、Function Compute の Web 関数を使用して Flask アプリケーションをデプロイする方法について説明します。プロセスは次のとおりです。

  1. Web アプリケーションの開発とテスト: サンプルコードを使用してローカルプロジェクトを作成します。API コードを編集およびテストして、API が期待どおりに機能することを確認します。既存のアプリケーションを移行する場合は、このステップをスキップできます。

  2. コードパッケージの生成: 必要な依存ライブラリをローカルプロジェクトディレクトリにインストールします。次に、プロジェクトを ZIP ファイルにパッケージ化して Function Compute にデプロイします。

  3. アプリケーションのアップロードとデプロイ: 関数作成パラメーターを構成し、コードパッケージをアップロードして関数を作成します。

  4. Web 関数のテスト: Web 関数を呼び出して、Flask アプリケーションが正しく実行されていることを確認します。

前提条件

Alibaba Cloud アカウントを作成する

Alibaba Cloud アカウントを作成し、本人確認を完了します。

Function Compute をアクティブ化する

2024 年 8 月 27 日以降に Alibaba Cloud アカウントを登録し、本人確認を完了した場合、有効化せずに Function Compute を直接使用できます。初めて Function Compute コンソールにログインするときに、画面の指示に従って無料のリソースプランを申請することもできます。詳細については、「トライアルクォータ」をご参照ください。

2024 年 8 月 27 日より前に登録された Alibaba Cloud アカウントの場合は、次の手順に従ってサービスを有効化してください。

  1. Function Compute ホームページ にアクセスします。

  2. [コンソール] をクリックし、サービス有効化ページに移動してから [今すぐ有効化] をクリックしてサービスを有効化し、Function Compute コンソールに移動します。

    説明
    • Alibaba Cloud アカウントでサービスを有効化し、リソースアクセスマネジメント (RAM) ユーザーを使用して関数やその他のアプリケーションを管理することをお勧めします。最小権限の原則 (PoLP) に基づいて、RAM ユーザーに必要なアクセスポリシーを付与できます。詳細については、「アクセスポリシーと例」をご参照ください。

  3. (任意) 初めて Function Compute コンソールにログインするときに、[Alibaba Cloud サービス承認] ダイアログボックスで [OK] をクリックして サービスリンクロールを作成します。これにより、Function Compute は他の Alibaba Cloud サービスにアクセスできるようになります。

    ロールが作成されると、Function Compute は VPC、ECS、SLS、Container Registry などのクラウドリソースにアクセスできるようになります。

手順

次のいずれかの方法で、Web 関数を作成し、コードをデプロイできます。

  • Function Compute コンソール: 軽量アプリケーションの構築や迅速な検証などのシナリオに適しています。単一の関数を迅速に作成できます。

  • Serverless Devs コマンドラインインターフェイス: 複雑な本番プロジェクトの管理やデプロイの自動化などのシナリオに適しています。YAML 構成ファイルを使用して、複数の関数と関連するクラウドリソースを管理できます。詳細については、「クイックスタート」をご参照ください。

プロセスを簡略化するため、このトピックでは Function Compute コンソールで関数を作成する方法について説明します。

ステップ 1: Web アプリケーションの開発とテスト

説明

既存の Flask アプリケーションを移行する場合は、このステップをスキップして「ステップ 2: コードパッケージの生成」に進むことができます。

  1. ローカルマシンで新しいコマンドラインウィンドウを開きます。次のコマンドを実行して、アプリケーションで必要な Flask および tabulate 依存ライブラリをローカル環境にインストールします。

    pip install Flask tabulate
  2. 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()
    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 a format such as {'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)
    
  3. 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
  4. 新しいターミナルウィンドウを開き、cURL を使用してサンプルリクエストを送信します。コマンドが正常に実行されると、カレンダーテーブルが返されます。

    curl -X POST http://127.0.0.1:9000 -d '{"year": "2000", "month": "1"}'

    image

これで、ローカルプロジェクトの作成とテストは完了です。

ステップ 2: コードパッケージの生成

Function Compute 用のローカルコードパッケージをビルドします。コードパッケージには、次の項目が含まれている必要があります。

  • Web アプリケーションで必要なプロジェクトファイル。

  • アプリケーションで必要な依存ライブラリが Web 関数のランタイム環境にない場合、コードパッケージにはこれらのライブラリも含まれている必要があります。Web 関数のランタイム環境に組み込まれている依存ライブラリの詳細については、「組み込みの依存関係」をご参照ください。

  1. 依存関係のインストール: Web アプリケーションプロジェクトのルートディレクトリで、次のコマンドを実行して、必要な依存ライブラリ (この例では tabulate) をディレクトリにインストールします。コマンドが実行されると、プロジェクトのルートディレクトリにプロジェクトファイルと依存ライブラリが含まれます。

    説明

    Web 関数の Python ランタイムには、すでに Flask ライブラリが含まれています。したがって、サンプルアプリケーションの要件を満たすには、tabulate をインストールするだけで済みます。

    pip install -t . tabulate
  2. プロジェクトのルートディレクトリにあるすべてのファイルをパッケージ化します。

    Linux または macOS

    プロジェクトのルートディレクトリで、zip code.zip -r ./* を実行します。このコマンドは、プロジェクトファイルと依存ライブラリを ZIP ファイルにパッケージ化します。これで、コードパッケージの作成は完了です。

    説明

    ディレクトリに対する読み取りおよび書き込み権限があることを確認してください。

    Windows

    プロジェクトディレクトリに移動し、すべてのファイルを選択し、選択したファイルを右クリックして ZIP ファイルにパッケージ化します。このコマンドは、プロジェクトファイルと依存ライブラリを ZIP ファイルにパッケージ化します。これで、コードパッケージの作成は完了です。

ステップ 3: Web 関数の作成とコードパッケージのデプロイ

  1. Web 関数のタイプを選択: Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] > [関数] を選択します。上部のナビゲーションバーで、関数を作成するリージョンを選択します。[関数の作成] をクリックし、[Web 関数] を選択してから、プロンプトに従って関数を作成します。

  2. ランタイムの選択: [カスタムランタイム] > [Python] > [Python 3.10] を選択します。このランタイムには、Flask フレームワーク用の依存ライブラリが組み込まれています。image

    説明
    • Web 関数の場合は、[カスタムランタイム] を使用することをお勧めします。[カスタムランタイム] を使用すると、起動コマンドとリッスンポートをカスタマイズでき、同時リクエスト処理がサポートされます。[組み込みランタイム] にはこれらの機能がなく、他の Alibaba Cloud サービスによって生成されたイベントの処理に適しています。

    • コンテナ化されたデプロイメントを希望する場合は、[カスタムイメージ] を使用して Web 関数を作成することもできます。この環境では、単一インスタンスでの同時リクエストもサポートされますが、依存関係は自分で管理する必要があります。

    • さまざまなランタイム環境の詳細な比較については、「ランタイム環境の比較」をご参照ください。

  3. コードパッケージのデプロイ: 「ステップ 2」で取得した ZIP コードパッケージをアップロードします。起動コマンドを python3 app.py に、リッスンポートを 9000 に設定します。既存の Flask アプリケーションを移行する場合は、アプリケーションの起動コマンドとポートに合わせて構成を変更します。たとえば、Flask のデフォルトポートは 5000 です。

    構成が完了したら、[作成] をクリックし、関数が作成されるのを待ちます。image

ステップ 4: 関数のテスト

  1. 関数 URL の取得: 関数の詳細ページで、[トリガー] タブをクリックします。ターゲット HTTP トリガーの構成列で、パブリックエンドポイントを取得します。

    認証を必要としないテスト環境にいる場合は、HTTP トリガーを作成するとき、または後で変更することによって、[認証方法][認証なし] に設定できます。

    image

  2. 関数のテスト: cURL、Postman、または任意の HTTP クライアントを使用して関数を呼び出し、Flask アプリケーションの機能を確認できます。たとえば、cURL を使用するには、コマンドラインで次のサンプルコマンドを実行します。URL は、前のステップで取得したものに置き換えてください。

    curl https://******.cn-hangzhou.fcapp.run -d '{"year": "2025", "month": "1"}' 

    このコマンドは、2025 年 1 月のカレンダー情報を返します。次の出力はサンプルです。

    image

    説明
    • デフォルトの HTTP トリガー構成を使用する場合、上記のサンプルコマンドを実行すると MissingRequiredHeader エラーが返されます。この場合、テスト環境にいる場合は、トリガーの [認証方法][認証なし] に変更できます。

    • このステップのサンプルコマンドと出力は、サンプルコードにのみ適用されます。既存のアプリケーションを移行した場合は、実際の API 操作名とパラメーターに基づいてサービスを呼び出します。詳細については、「cURL を使用して関数をテストする」をご参照ください。

  3. (任意) ブラウザから関数にアクセスする: HTTP トリガーによって提供されるパブリックエンドポイントは、ファイルのダウンロードを強制するため、ブラウザからアクセスできません。このエンドポイントは、テスト目的でのみ使用されます。ブラウザからのアクセスを有効にし、本番環境で使用するために、カスタムドメイン名を関数にバインドすることをお勧めします。詳細については、「カスタムドメイン名の設定」をご参照ください。

(任意) ステップ 5: リソースのクリーンアップ

Function Compute は従量課金サービスです。使用していない関数に対しては課金されません。ただし、OSS や NAS に保存されているデータ、構成済みのトリガーなど、関連する他の Alibaba Cloud サービスやリソースに注意してください。

関数を削除するには、Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] > [関数] を選択します。リージョンを選択します。ターゲット関数の [アクション] 列で、[削除] をクリックします。表示されるダイアログボックスで、トリガーなどのリソースが関数に関連付けられていないことを確認し、削除を確定します。

次のステップ

Web アプリケーションを作成して Web 関数にデプロイした後、必要に応じて次の操作を実行できます。

  • コンソールでのコード開発: デプロイプロセスを簡略化するために、Function Compute コンソールの WebIDE を使用して、クラウドでリアルタイムにコードを開発およびデバッグできます。この方法は、ローカルマシンでコードパッケージを生成する必要がないため、迅速な反復が必要な開発に適しています。詳細については、「WebIDE の使用」をご参照ください。

    説明

    WebIDE は Python、Node.js、PHP のみをサポートしています。Java や Go などの他の言語の場合は、コンパイルおよびパッケージ化された ZIP ファイルまたはバイナリファイルのみをアップロードできます。

  • アプリケーションセンターを使用したプロジェクトの継続的デプロイ: 継続的インテグレーション/継続的デプロイメント (CI/CD) を実装するには、アプリケーションセンターを使用して、コードをクラウド上の Function Compute に自動的にビルドおよびデプロイできます。詳細については、「アプリケーションセンターを使用して既存の Function Compute プロジェクトの継続的デプロイメントを実装する」をご参照ください。

  • ロギングの設定: デバッグ、トラブルシューティング、またはセキュリティ監査を容易にするために、関数のロギング機能を設定することをお勧めします。詳細については、「ロギング機能の設定」をご参照ください。

参照

各言語の依存関係を追加する手順については、次のドキュメントを参照してください。

Python

コードパッケージのデプロイ

Node.js

コードパッケージのデプロイ

Java

コードパッケージのコンパイルとデプロイ

Go

コードパッケージのコンパイルとデプロイ

C#

コードパッケージのコンパイルとデプロイ

PHP

コードパッケージのデプロイ