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

:Function Compute 3.0とFunction Compute 2.0の比較と互換性

最終更新日:Oct 24, 2024

Function Computeは、Function Computeのメジャーアップグレードバージョンです。 Function Compute 3.0では、関数管理、関数実行エンジン、カスタムドメイン名、権限管理、自動スケーリングルールに関連するさまざまな機能が更新され、ユーザーエクスペリエンスが向上します。 このトピックでは、Function Compute 3.0の機能変更と、Function Compute 3.0と元のサービスおよび関数との互換性について説明します。

Function Computeの機能更新3.0

Function Compute 3.0では、次の機能が更新されます。

  • 関数管理

    • Function Computeではサービスは使用されなくなりました。 関数は第1レベルのエンティティになります。 ロール、ログ、および仮想プライベートクラウド (VPC) は、機能レベルで設定されます。

    • バージョンとエイリアスは、関数レベルで設定されます。 バージョンとエイリアスを使用して、関数のバージョン管理を実行できます。

    詳細については、「関数管理」をご参照ください。

  • 関数実行エンジン

    • HTTPリクエストとイベントリクエストのハンドラ署名は統一されています。 詳細については、「HTTPトリガーの動作」をご参照ください。

    • Function Computeの標準ランタイムは、インスタンスの同時実行機能をサポートしなくなりました。 カスタムランタイムで実行されるインスタンスは、引き続き同時実行機能をサポートします。

    • 関数インスタンスのライフサイクル管理では、PreFreezeフックはサポートされなくなりました。

  • カスタムドメイン名

    カスタムドメイン名はHTTPトリガーに依存しなくなり、関数に直接リダイレクトできます。

  • 権限管理

    サービスにリンクされたロールは、機能の承認を簡素化するためにサポートされます。 詳細については、「サービスにリンクされたロール」をご参照ください。

  • 自動スケーリングルール

    プロビジョニングされたインスタンスの自動スケーリング機能は、インスタンスの同時実行管理に組み込まれています。 プロビジョニングされたインスタンスとオンデマンドインスタンスの合計同時実行性を制限できます。

元のサービスと機能の構成は変更されません。 元の関数は、期待どおりに呼び出すことができます。 たとえば、function Compute 2.0で関数用に設定したインスタンスの同時実行性は、Function Compute 3.0でも有効です。 ただし、Function Compute 3.0の標準ランタイムで作成された関数は、インスタンスの同時実行機能をサポートしていません。 Function Compute 3.0と元のサービスおよび関数との互換性については、「元のサービスおよび関数との互換性」をご参照ください。

関数管理

Function Computeでは、サービスを作成せずに関数を作成できます。 ロール、ログ、VPCなどの元のサービスレベルの設定が関数で設定されました。 次のサンプルコードは、function Compute SDK for Goの関数設定の例を示しています。

resp, err := client.CreateFunction(
    new(fc.CreateFunctionRequest).
        SetBody(&fc.CreateFunctionInput{
            FunctionName: &funcName,
            Runtime:      tea.String("nodejs12"),
            Handler:      tea.String("index.handler"),
            MemorySize:   tea.Int32(128),
            Role:         tea.String("role-arn"),
            VpcConfig: &fc.VPCConfig{
                VpcId:           tea.String("vpc-id"),
                VSwitchIds:      []*string{tea.String("vsw-id")},
                SecurityGroupId: tea.String("sg-id"),
            },
            Code: new(fc.InputCodeLocation).SetZipFile(fx.GetCodeZipBase64()),
        }))

event := "my event"
resp, err = client.InvokeFunction(&funcName,
    new(fc.InvokeFunctionRequest).SetBody(strings.NewReader(event)))
body, err := ioutil.ReadAll(resp.Body)

次のサンプルコードは、function Compute SDK for Goでバージョンを公開し、関数のエイリアスを作成する方法の例を示しています。

resp, err := client.PublishFunctionVersion(&funcName,
    new(fc.PublishFunctionVersionRequest).SetBody(&fc.PublishVersionInput{
        Description: tea.String("version desc"),
    }))

aliasName := "my-alias"
routingConfig := map[string]*float32{
    "2": tea.Float32(float32(0.05)),
}

resp, err := client.CreateAlias(&funcName, new(fc.CreateAliasRequest).
    SetBody(&fc.CreateAliasInput{
        AliasName:               &aliasName,
        VersionId:               tea.String("1"),
        AdditionalVersionWeight: routingConfig,
    }))

HTTPトリガーの動作

Function Computeの3.0では、イベントリクエストとHTTPリクエストのハンドラーが統合されています。 次のサンプルコードは、Pythonの例を示しています。

def handler(event, context):
    return 'hello fc'

Function Computeは、HTTPトリガーのURLまたはカスタムドメイン名を使用して関数にアクセスするリクエストをイベントに変換し、関数の応答をHTTP応答に変換します。

次のサンプルコードは、イベントリクエストの例を示します。

{
    "version": "v1",
    "rawPath": "/my/path",
    "httpMethod": "POST",
    "headers": {
        "header1": "value1,value2",
        "header2": "value2"
    },
    "queryParameters": {
        "param1": "value1,value2",
        "param2": "value2"
    },
    "body": "hello from client",
    "isBase64Encoded": false,
    "requestContext": {
        "accountId": "12345678",
        "domainName": "my-domain.com",
        "domainPrefix": "prefix",
        "requestId": "abcd-efgh",
        "time": "2023-09-01T14:17:23+08:00",
        "timeEpoch": 1693549043255,
        "http": {
            "method": "GET",
            "path": "/my/path",
            "protocol": "http",
            "sourceIP": "39.40.41.42",
            "userAgent": "go-sdk/1.0"
        }
    }
}

次のサンプルコードは、HTTPレスポンスの例を示します。

def handler(event, context):
    return {
        'body': 'hello FC',
        'headers': {
            'my-custom-header': 'foo'
        },
        'statusCode': 400
    }

次のコードは、上記のコードの変換されたHTTPレスポンスを示しています。

HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
My-Custom-Header: foo
X-Fc-Request-Id: 64e866c9-69902fbc525fd10989e7299c
Date: Fri, 25 Aug 2023 10:18:06 GMT
Content-Length: 8

hello FC

リクエストとレスポンスのフォーマット変換については、「概要」をご参照ください。

サービスにリンクされたロール

ロギング、VPC、非同期呼び出しなど、Function Computeが提供する特定の機能を使用する場合、Function Computeは他のAlibaba Cloudサービスにアクセスする必要があります。 たとえば、関数のログ機能を設定する場合、function ComputeがLogstoreにログを書き込む前に、Function ComputeにSimple Log Service Logstoreの書き込み権限を付与する必要があります。 以前のバージョンでは、Simple Log Service Logstoreの書き込み権限は、サービスロールを使用して設定されていました。 サービスロールは、他のAlibaba CloudサービスにアクセスするためにFunction Computeと関数コードによって引き受けられます。 これにより、サービスロールに過度の権限が付与される可能性があります。

Function Compute 3.0では、サービスにリンクされたロールがサポートされます。 サービスにリンクされたロールを使用して、Function Computeに他のAlibaba Cloudサービスへのアクセスを許可できます。 コードが他のAlibaba Cloudサービスにアクセスする必要がある場合は、関数ロールを使用して権限付与を実装できます。 Function Computeでは、ビジネス要件に基づいて、関数ロールの権限をきめ細かく管理することもできます。

サービスにリンクされたロールを作成すると、Function Compute 3.0で作成した関数が自動的にサービスにリンクされたロールを引き受けることができます。 ログ機能、VPC機能、非同期呼び出し機能などの特定の機能を関数に使用でき、関数のロールを設定する必要はありません。

オリジナルのサービスや機能との互換性

Function Computeは3.0、元のサービスや関数と互換性のある新しい一連のAPI操作と新しいコンソールGUIを提供します。 次の表に、互換性ルールと理解を深めるための例を示します。 この例では、function Compute 2.0で関数f1と関数f2を含むサービスs1を作成しています。 Function Compute 2.0で、サービスs1のバージョン1、バージョン2、およびエイリアスprodが作成されました。

カテゴリ

互換性ルール

サービス設定

元のサービスと関数はすべて、Function Compute 3.0で <Service Name >$< Function name> 形式の関数に変換されます。

サービスロール、ログ、VPCなどの元のサービス構成は、機能構成に変換されます。

Function Compute 3.0では、元の関数は関数s1$f1と関数s1$f2に変換されます。

サービス内の機能の構成更新は、サービス内の他の機能に影響を与えない。

function Compute 3.0で関数s1$f1のVPC設定を更新した場合、更新は関数s1$f1でのみ有効になり、サービスs1と関数s1$f2には影響しません。

Function Compute 2.0のAPIを呼び出してサービス設定を更新すると、サービス内のすべての関数の対応する設定が更新されます。

Function Compute 2.0でサービスs1のVPC設定を更新すると、関数s1$f1と関数s1$f2の両方のVPC設定が更新されます。

バージョンとエイリアス

元のサービスバージョンとエイリアスは、関数バージョンとエイリアスに変換されます。

Function Compute 3.0では、関数s1$f1と関数s1$f2がバージョン1、バージョン2、エイリアスprodで自動的に設定されます。

関数の新しいバージョンは、その関数が属する元のサービスおよびサービス内の他の関数に対して有効になります。

関数s1$f1のバージョン3を公開すると、サービスs1と関数s1$f2のバージョン3が自動的に追加されます。

関数の新しいエイリアスは、関数が属するサービスおよびサービス内の他の関数に有効になります。

関数s1$f1の別名テストを作成すると、サービスs1と関数s1$f2の別名テストが自動的に作成されます。

function Compute 3.0で変換された関数のバージョンやエイリアスを削除することはできません。バージョンやエイリアスはサービスやサービス内の他の関数によって共有されるためです。

関数s1$f1のバージョン3を削除しようとすると、DeleteVersionNotAllowedエラーが返されます。

関数のエイリアスの更新は、サービス内の他の関数には影響しません。

関数s1$f1のエイリアスprodを更新し、エイリアスprodが指すバージョンをバージョン1からバージョン2に変更した場合、更新は関数s1$f1のエイリアスprodに対してのみ有効になります。 サービスs1と機能s1$f2のエイリアスprodは変更されず、バージョン1を指します。

Function Compute 2.0のAPIを呼び出してサービスエイリアスを更新すると、サービス内のすべての関数のエイリアスが更新されます。

サービスs1のエイリアスprodを更新し、エイリアスprodが指すバージョンをバージョン1からバージョン2に変更すると、関数s1$f1と関数s1$f2のエイリアスprodはバージョン2を指します。

重要

Function Compute 3.0コンソールで元の関数に対して操作を実行すると、関数は独立したサービスレベル設定になります。 関数に対してFunction Computeの3.0コンソールで実行される以降の更新は、関数自体にのみ影響します。 Function Compute 2.0コンソールで関数のサービスレベルの設定を更新すると、サービス内のすべての関数の対応する設定が更新されます。