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

Function Compute:Web 関数を使用して Web アプリケーションをすばやく作成する

最終更新日:Apr 08, 2025

Function Compute の Web 関数を使用すると、Web アプリケーションと API サービスを簡単に構築できます。 Web 関数は、Java SpringBoot、Python Flask、Node.js Express など、さまざまな一般的な言語の Web フレームワークと互換性があるため、既存のアプリケーションをすばやく移行できます。 Function Compute は、基盤となる計算リソースを管理します。 サービスにブラウザまたは URL からアクセスすると、システムはオンデマンドでインスタンスを自動的に起動およびスケーリングします。 アクセスがない場合、インスタンスは自動的に破棄され、実際のリソース使用量に対してのみ料金を支払う必要があります。

Web 関数の作成の概要

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

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

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

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

  4. Web 関数をテストする: Web 関数を呼び出して、Flask アプリケーションの動作を確認します。

前提条件

Alibaba Cloud アカウントを登録する

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 を使用して関数やその他のアプリケーションを管理することをお勧めします。 最小権限の原則に従って、RAM ユーザーにビジネスに必要なポリシーを付与できます。 詳細については、「ポリシーと例」をご参照ください。

  3. (オプション) [Function Compute コンソール] に初めてログインするときは、ポップアップ ダイアログボックスで [Alibaba Cloud サービス認証] をクリックし、[確認] をクリックしてサービスロールを作成する必要があります。これにより、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()
    # 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)
    
  3. 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
  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) をディレクトリにインストールします。 完了後、プロジェクトのルートディレクトリには、プロジェクトファイルと依存関係ライブラリが含まれます。

    説明

    Python Web 関数ランタイム環境にはすでに Flask ライブラリが含まれているため、tabulate をインストールすれば、サンプルアプリケーションのニーズを満たすことができます。

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

    Linux または macOS

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

    説明

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

    Windows

    プロジェクトディレクトリに入り、すべてのファイルを選択し、右クリックして、ZIP ファイルとしてパッケージ化するように選択します。 この手順では、プロジェクトファイルと依存関係ライブラリを ZIP ファイルにパッケージ化し、コードパッケージの構築を完了します。

3. Web 関数を作成し、コードパッケージをデプロイする

  1. 関数のタイプを選択する: Function Compute 3.0 コンソールを開きます。 ページの左上にあるリージョンリストで、関数を作成するリージョンを選択します。 中国東部 1 (杭州) など、お近くのリージョンを選択することをお勧めします。 次に、[関数] ページで、[関数の作成] をクリックします。 関数の作成ページで、[Web 関数] を選択します。image

  2. ランタイム環境を選択する: 図に従って、[カスタムランタイム] > [Python] > [Python 3.10] を選択します。 このランタイムには、Flask フレームワークに必要な依存関係ライブラリが組み込まれています。image

    説明
    • Web 関数の場合、[カスタムランタイム] を関数のランタイム環境として使用することをお勧めします。 [カスタムランタイム] では、起動コマンドとリスナーポートをカスタマイズでき、単一インスタンスのマルチコンカレンシーをサポートしているためです。 [組み込みランタイム] にはこれらの機能がなく、クラウドプロダクトによって生成されたイベントの処理に適しています。

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

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

  3. コードパッケージをデプロイする: 図に従って、前の手順で取得した ZIP フォーマットのコードパッケージをアップロードし、起動コマンドを python3 app.py として、リスナーポートを 9000 として構成します。 既存の Flask アプリケーションを移行する場合は、実際の起動コマンドとポート (たとえば、Flask のデフォルトポート構成は 5000) に従って構成を変更します。

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

4. 関数をテストする

  1. 関数の URL を取得する: 新しく作成された関数の詳細ページで、[構成] タブをクリックし、左側のナビゲーションウィンドウで [トリガー] を選択します。 HTTP トリガーの構成情報で、パブリックアクセスアドレスをクリックしてアドレスをコピーします。

    image

  2. 関数をテストする: cURL、Postman、または任意の HTTP クライアントを使用して関数を呼び出し、Flask アプリケーションの機能を確認できます。 cURL を例にとると、コマンドラインで次のサンプルコマンドを実行します (アドレスは前の手順でコピーしたアドレスに置き換えます)。

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

    Web インターフェースには、2025 年 1 月のカレンダー情報が出力されます。 サンプル出力は次のとおりです。

    image

    説明

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

  3. (オプション) ブラウザから関数にアクセスする: HTTP トリガーによって提供されるパブリックアクセスアドレスは、ブラウザで開くことができず (強制ダウンロード)、テスト環境でのみ使用できます。 ブラウザアクセスと本番環境での使用をサポートするには、関数をカスタムドメイン名にバインドすることをお勧めします。 詳細については、「カスタムドメイン名を構成する」をご参照ください。

5. (オプション) リソースをクリーンアップする

Function Compute は、実際のリソース使用量に基づいて課金されます。 作成された関数リソースは、使用されない場合、料金は発生しません。 ただし、OSS および NAS に保存されているデータや作成されたトリガーなど、作成した関数リソースに関連付けられている他のクラウドFunction Computeまたはリソースに注意してください。

関数を削除するには、Function Compute コンソールにログインし、[関数] をクリックしてリージョンを選択し、ターゲット関数の [操作] 列で [詳細] > [削除] を選択します。 ポップアップ ダイアログボックスで、削除する関数にトリガーなどのバインドされたリソースがないことを確認し、削除をもう一度確認します。

image

高度な操作

これで、Web アプリケーションを作成し、Web 関数にデプロイしたので、必要に応じて次の高度な操作を参照できます。

  • コンソールでコードを開発する: 既存の Web アプリケーションを Web 関数に移行する場合があることを考慮して、このトピックの例ではローカルコード開発を使用しています。 コードパッケージの構築操作を省略する場合は、Function Compute コンソールの WebIDE でコードを編集してクラウド開発を実現することもできます。 詳細については、「WebIDE の使用方法」をご参照ください。

    説明

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

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

  • ログを構成する: デバッグ、トラブルシューティング、またはセキュリティ監査要件への対応を容易にするために、関数のログを構成することをお勧めします。 詳細な手順については、「ログの構成」をご参照ください。

参照

他の言語でコードパッケージをビルドする手順の詳細については、次のドキュメントを参照してください。