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

Function Compute:カスタムコンテナ関数の作成

最終更新日:Sep 11, 2024

Function Computeの標準ランタイムがビジネス要件を満たさない場合は、カスタムコンテナーランタイムを使用して関数を作成します。 このトピックでは、Function ComputeコンソールまたはServerless Devsを使用してカスタムコンテナ関数を作成する方法について説明します。

使用上の注意

function Computeでカスタムコンテナ関数を作成するには、同じアカウントの同じリージョンにあるAlibaba Cloud Container Registryのイメージを使用する必要があります。 Appleチップ上で動作するMacコンピュータなどのARMベースのコンピュータを使用する場合は、イメージコンパイルプラットフォームをLinux/Amd64 (docker build -- platform linux/amd64 -t $IMAGE_NAME) として指定する必要があります。

始める前に

Function Computeコンソールを使用して関数を作成する

手順1: サービスの作成と権限の設定

  1. でサービスを作成します。Function Computeコンソール.

    詳しくは、「サービスの作成」をご参照ください。

  2. をアタッチします。AliyunContainerRegistryReadOnlyAccessまたはAliyunContainerRegistryFullAccessサービスへのポリシー。

    詳細については、「他のAlibaba Cloudサービスへのアクセス権限付与」をご参照ください。 上記のポリシーにより、Function Computeは、デフォルトのContainer Registryインスタンスにログインしてプライベートイメージリポジトリからイメージをプッシュするために使用できる一時アカウントを取得できます。

ステップ2: 関数を作成する

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。

  3. 関数ページで、関数の作成をクリックします。

  4. 関数の作成ページで、コンテナーイメージの使用を選択し、ビジネス要件に基づいて次のパラメーターを設定し、作成をクリックします。

    • 基本設定: 関数名、webサーバーモード、ハンドラーの種類など、作成する関数に関する基本情報を設定します。

      パラメーター

      説明

      関数名

      関数の名前を入力します。 Function Computeは、このパラメーターを空のままにすると、関数の名前を自動的に作成します。

      Webサーバーモード

      webサーバーモードを有効にするかどうかを指定します。 有効な値:

      • Yes: webサーバーモードを有効にします。 この場合、コンテナーイメージにwebサーバーを実装して、ポートをリッスンし、リクエストを処理する必要があります。

      • No: webサーバーモードを無効にします。 この場合、Handler TypeはEvent Handlerにのみ設定できます。 リクエストが処理された後、アクティブにプロセスを終了し、ExitCodeを0に設定する必要があります。 さらに、要求されたイベントパラメータは、環境変数の形式で関数に渡されます。

      ハンドラタイプ

      関数によって処理されるリクエストのタイプを指定します。 リクエストは、イベントリクエストまたはHTTPリクエストです。 有効な値:

      • イベントハンドラー: タイマー、API操作の呼び出し、SDKの使用、または他のAlibaba Cloudサービスと統合されたトリガーを使用して、関数の実行をトリガーします。

      • HTTPハンドラー: HTTPリクエストまたはWebSocketリクエストによる関数の実行をトリガーします。 webシナリオでは、関数の作成時に カスタムランタイムの使用 を選択することを推奨します。

    • Image Configurations: 関数のイメージを設定します。

      パラメーター

      説明

      イメージの選択方法

      [サンプルイメージを使用] を選択するか、独自のイメージを使用して関数を作成します。

      • サンプルイメージの使用: Function Computeの組み込みサンプルイメージを選択します。

      • Container Registry Imagesの使用: Container imageの下のSelect a Container Registry Imageをクリックします。 [コンテナーイメージの選択] パネルで、[コンテナーイメージインスタンス][コンテナーレジストリリポジトリ] を設定します。 使用する画像を見つけて、[操作] 列の [選択] をクリックします。

        説明
        • 別のアカウントに属するContainer Registryのパブリックイメージを使用して関数を作成することはできません。

        • Container Registry Enterprise Editionの場合、Function Computeは選択したイメージのタグを使用して関数インスタンスを作成します。

          • Container Registry Enterprise Edition (Advanced EditionまたはStandard Edition) のイメージを使用する場合は、イメージバージョン[Immutable] をオンにすることを推奨します。 そうしないと、イメージタグが他の場所で更新され、Function Computeが更新されたイメージデータを取得して関数インスタンスを開始できます。 詳細については、「リポジトリを不変にする設定」をご参照ください。

          • Container Registry Enterprise Edition (Basic Edition) またはContainer Registry Personal Editionのイメージを使用している場合は、イメージリポジトリでイメージタグを同じ名前で更新した後、function Computeコンソールでイメージ情報で関数を更新する必要があります。 次に、Function Computeは新しいイメージで関数インスタンスを起動します。

      Startupコマンド

      コンテナーの起動コマンドを指定します。 このパラメーターを設定しない場合は、イメージ内のENTRYPOINTまたはCMD命令が使用されます。

      リスナーポート

      コンテナーイメージを使用して実装されたHTTPサーバーがリッスンするポートを指定します。 デフォルトのポートは9000です。 このパラメーターを指定しない場合、コンテナーイメージは非インタラクティブモードで実行されます。

    • 詳細設定: インスタンス関連の情報、実行タイムアウト時間、関数のハンドラーを設定します。

      パラメーター

      説明

      GPUアクセラレーション

      ビジネス要件に基づいて、GPU高速化インスタンスを使用するかどうかを指定します。 デフォルトでは、GPU高速化インスタンスの代わりにエラスティックインスタンスが使用されます。 詳細については、「インスタンスタイプと使用モード」をご参照ください。 各インスタンスタイプの課金の詳細については、「課金の概要」をご参照ください。

      • GPUの有効化

      • GPUの無効化

      仕様

      • GPUの有効化:

        [GPUタイプ] ドロップダウンリストから値を選択し、ビジネス要件に基づいて [GPUメモリサイズ] を指定します。 Function Computeは、選択したGPUメモリサイズに基づいて、vCPU容量およびメモリ容量フィールドを自動設定します。 各GPUサイズには、特定のvCPUおよびメモリサイズのみが許可されます。

      • GPUの無効化:

        ビジネス要件に基づいて、vCPU容量メモリ容量を設定します。

      リソースの課金の詳細については、「課金の概要」をご参照ください。

      説明

      vCPU仕様とメモリ容量 (GB) の比率は、1:1から1:4に設定する必要があります。

      一時ディスクのサイズ

      ビジネス要件に基づいてディスクサイズを選択します。 Function Computeは、最大512 MBの空きディスク容量を提供します。 詳細については、「課金の概要」をご参照ください。

      インスタンスの同時実行

      Webサーバーモード[いいえ] に設定した場合、このパラメーターを構成する必要はありません。 インスタンスの同時実行性を指定します。 詳細については、「インスタンス同時実行の設定」をご参照ください。

      実行タイムアウト期間

      関数の実行のタイムアウト期間を設定します。 デフォルト値は60秒です。 最大値は86,400秒です。 このパラメーターを600秒に設定することを推奨します。

      タイムゾーン

      関数のタイムゾーンを選択します。 関数のタイムゾーンを選択すると、環境変数TZが関数に自動的に追加されます。 変数の値は、選択したタイムゾーンです。

    • 環境変数: 関数のランタイムで環境変数を設定します。 詳細については、「環境変数」をご参照ください。

    • トリガー設定: 関数を実行するためのトリガーを設定します。 詳細については、「トリガーの管理」をご参照ください。

    関数の作成後、サービスの関数リストで関数を表示および更新できます。

説明

関数を更新すると、指定したリスニングポートを変更できます。 ただし、リスニングポートを削除したり、リスニングポートを追加したりすることはできません。 関数の作成時にリスニングポートが設定されている場合、別のリスニングポートを指定しない場合、関数の更新時にリスニングポートは保持されます。

Serverless Devsを使用して関数を作成する

Serverless Devsを使用して、数回クリックするだけで、コンテナーイメージをビルドおよびプッシュし、関数をデプロイできます。

  1. 次のコマンドを実行してプロジェクトを初期化します。プロンプトに従って、Container Registryで作成したイメージリポジトリのアドレスを入力する必要があります。

    sudo s init start-fc-custom-container-event-nodejs14

    サンプルコマンド出力:

     Serverless Awesome: https://github.com/Serverless-Devs/package-awesome
    
     Please input your project name (init dir) start-fc-custom-container-event-nodejs14
     file decompression completed
    
         ____  _     _ ___  _ _     _        _____ ____
        /  _ \/ \   / \\  \/// \ /\/ \  /|  /    //   _\
        | / \|| |   | | \  / | | ||| |\ ||  |  __\|  /
        | |-||| |_/\| | / /  | \_/|| | \||  | |   |  \__
        \_/ \|\____/\_//_/   \____/\_/  \|  \_/   \____/
     please select credential alias default
    
        Welcome to the Aliyun FC start application
         This application requires to open these services:
             FC : https://fc.console.aliyun.com/
             ACR: https://cr.console.aliyun.com/
    
         * Note: The actions information is declared in the s.yaml file:
            Run the sudo s build --use-docker --dockerfile ./code/Dockerfile command before the project is deployed.
           If you do not need to build the project, you can comment out this part. 
           > Note: During the project deployment, replace the value of the image parameter in the s.yaml file with the address of the image repository in Container Registry. 
         * The project is initialized. You can go to the project directory and run the s deploy command to deploy the project. 
    
     Thanks for using Serverless-Devs
     You could [cd /test/test1/start-fc-custom-container-event-nodejs14] and enjoy your serverless journey!
     If you need help for this example, you can use [s -h] after you enter folder.
     Document Star: https://github.com/Serverless-Devs/Serverless-Devs
     Do you want to deploy the project immediately?  No
  2. 次のコマンドを実行して、プロジェクトのディレクトリに移動します。

    cd start-fc-custom-container-event-nodejs14
  3. s.yamlファイルを編集します。 のパラメーターの詳細については、yamlファイル、YAML構文および権限管理

  4. 次のコマンドを実行して、プロジェクトをデプロイします。

    sudo s deploy

    サンプルコマンド出力:

    [2021-12-15 07:54:30] [INFO] [S-CLI] - Start ...
    [2021-12-15 07:54:30] [INFO] [S-CLI] - Start the pre-action
    [2021-12-15 07:54:30] [INFO] [S-CLI] - Action: s build --use-docker --dockerfile ./code/Dockerfile
    [2021-12-15 07:54:31] [INFO] [S-CLI] - Start ...
    [2021-12-15 07:54:32] [INFO] [FC-BUILD] - Build artifact start...
    [2021-12-15 07:54:32] [INFO] [FC-BUILD] - Use docker for building.
    [2021-12-15 07:54:32] [INFO] [FC-BUILD] - Building image...
    Sending build context to Docker daemon   5.12kB
    Step 1/7 : FROM node:14.5.0-alpine3.11
     ---> 5d97b3d11dc1
    ......
    Step 7/7 : ENTRYPOINT [ "node", "server.js" ]
     ---> Using cache
     ---> a5ef1c015e7e
    Successfully built a5ef1c015e7e
    Successfully tagged registry.cn-hangzhou.aliyuncs.com/fc-example/test:nginx
    SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
    Build image(registry.cn-hangzhou.aliyuncs.com/fc-example/test:nginx) successfully
    [2021-12-15 07:54:33] [INFO] [FC-BUILD] - Build artifact successfully.
    
    Tips for next step
    ======================
    * Invoke Event Function: s local invoke
    * Invoke Http Function: s local start
    * Deploy Resources: s deploy
    End of method: build
    [2021-12-15 07:54:33] [INFO] [S-CLI] - End the pre-action
    [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using region: cn-hangzhou
    [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using access alias: default
    [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using accessKeyID: LTAI4G4cwJkK4Rza6xd9****
    [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Using accessKeySecret: eCc0GxSpzfq1DVspnqqd6nmYNN****
    [2021-12-15 07:54:34] [INFO] [FC-DEPLOY] - Checking Service hello-world-service exists
    [2021-12-15 07:54:35] [INFO] [FC-DEPLOY] - Setting role: AliyunFCDefaultRole
    [2021-12-15 07:54:35] [INFO] [RAM] - Checking Role AliyunFCDefaultRole exists
    [2021-12-15 07:54:35] [INFO] [RAM] - Updating role: AliyunFCDefaultRole
    [2021-12-15 07:54:35] [INFO] [RAM] - Checking Plicy AliyunFCDefaultRolePolicy exists
    [2021-12-15 07:54:35] [INFO] [FC-DEPLOY] - Checking Function nodejs14-event-function exists
    [2021-12-15 07:54:36] [INFO] [FC-DEPLOY] - Using image registry: registry.cn-hangzhou.aliyuncs.com
    [2021-12-15 07:54:36] [INFO] [FC-DEPLOY] - Try to use a temporary token for docker login
    Login to registry: registry.cn-hangzhou.aliyuncs.com with user: cr_temp_user
    Pushing docker image: registry.cn-hangzhou.aliyuncs.com/fc-example/test:nginx...
    The push refers to repository [registry.cn-hangzhou.aliyuncs.com/fc-example/test]
    cdf38e7753b7: Layer already exists                                                                                                                                                           43128f71725b: Layer already exists                                                                                                                                                           0fb36a16ab83: Layer already exists                                                                                                                                                           dd966b9fd474: Layer already exists                                                                                                                                                           a1915d7a1111: Layer already exists                                                                                                                                                           c4491b3ee709: Layer already exists                                                                                                                                                           9fb10d900487: Layer already exists                                                                                                                                                           3e207b409db3: Layer already exists                                                                                                                                                           nginx: digest: sha256:02b69157def85ceb72f32cb1c5845d00e1d8df19caf6eaf720a9bc77bb57db76 size: 1991
    √ Make service hello-world-service success.
    √ Make function hello-world-service/nodejs14-event-function success.
    [2021-12-15 07:54:39] [INFO] [FC-DEPLOY] - Checking Service hello-world-service exists
    [2021-12-15 07:54:39] [INFO] [FC-DEPLOY] - Checking Function nodejs14-event-function exists
    
    There is auto config in the service: hello-world-service
    
    Tips for next step
    ======================
    * Display information of the deployed resource: s info
    * Display metrics: s metrics
    * Display logs: s logs
    * Invoke remote function: s invoke
    * Remove Service: s remove service
    * Remove Function: s remove function
    * Remove Trigger: s remove trigger
    * Remove CustomDomain: s remove domain
    
    
    
    helloworld:
      region:   cn-hangzhou
      service:
        name: hello-world-service
      function:
        name:       nodejs14-event-function
        runtime:    custom-container
        handler:    not-used
        memorySize: 256
        timeout:    60
  5. 次のコマンドを実行して、関数をデバッグします。

    sudo s invoke -e "{\"key\":\"val\"}"

    サンプルコマンド出力:

    [2021-12-15 08:00:17] [INFO] [S-CLI] - Start ...
    ========= FC invoke Logs begin =========
    FC Invoke Start RequestId: 768945c8-f92d-428e-89c2-ecd50883****
    {"key":"val"}
    FC Invoke End RequestId: 768945c8-f92d-428e-89c2-ecd50883****
    
    Duration: 3.05 ms, Billed Duration: 4 ms, Memory Size: 256 MB, Max Memory Used: 10.77 MB
    ========= FC invoke Logs end =========
    
    FC Invoke Result:
    OK
    
    
    End of method: invoke

関連ドキュメント

  • GPU高速化インスタンスを使用する場合は、カスタムコンテナ関数を作成する必要があります。 GPU高速化インスタンスの仕様を設定する方法の詳細については、「関数の管理」をご参照ください。

  • カスタムコンテナ関数を使用すると、コンテナイメージは実行環境に依存し、ダウンロードと解凍に時間がかかります。 詳細については、「コールドスタート最適化のベストプラクティス」をご参照ください。

  • Function Compute APIを呼び出して関数を作成することもできます。 詳細については、「CreateFunction」をご参照ください。

  • 組み込みランタイム、カスタムランタイム、およびCustomer Containerランタイムの一般的なシナリオと違いについては、「関数ランタイムの選択」をご参照ください。