症状
CustomDemoサービスでfunc-HTTPという名前のhttp関数を作成しました。 関数はカスタムランタイムで実行され、匿名HTTPトリガーが指定されます。 次のサンプルルーティングコードは、カスタムランタイムのHTTPサーバーを実装するために使用されます:
@app.route('/test', methods = ['POST','GET'])
def test():
cURLツールまたはブラウザを使用してHTTP関数のURLにアクセスすると、エラーコード404
が返されます。
cURLツールを使用してHTTP機能にアクセスします。
curl -v https://164901546557****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/CustomDemo/func-http/test
ブラウザを使用してHTTP機能にアクセスします。
https://164901546557****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/CustomDemo/func-http/test
説明HTTP関数のURLの形式は
https://<account_id>.<region_id>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/<path>
です。
解決策
この問題は、次のいずれかの方法で解決できます。
新しいHTTPトリガーに対してfunction Computeによって割り当てられたサブドメインを使用して、関数にアクセスします。 詳細については、「手順3: 関数のテスト」をご参照ください。
サブドメイン形式:
https://<subdomain>.<region_id>.fcapp.run/[action?queries]
サンプルコード:
https://funcname-svcname-khljsjksld.cn-shanghai.fcapp.run/action?hello=world
関数へのアクセスに使用するコマンドに、
x-fc-invocation-target
という名前のヘッダーを追加します。 コマンド構文:curl -v -H "x-fc-invocation-target: 2016-08-15/proxy/$ServiceName/$functionName" https://<account_id>.<region_id>.fc.aliyuncs.com/$path
サンプルコード:
curl -v -H "x-fc-invocation-target: 2016-08-15/proxy/CustomDemo/func-http" https://164901546557****.cn-hangzhou.fc.aliyuncs.com/test
カスタムドメイン名を関数にバインドします。 次に、次のコマンドを実行して、関数に再度アクセスします。 ドメイン名をバインドする方法の詳細については、「カスタムドメイン名の設定」をご参照ください。
たとえば、ドメイン名が
example.com
の場合、次のコマンド構文が使用されます。curl -v https://example.com/$path
サンプルコード:
curl -v https://example.com/test
重要/$path
を、リクエストがサービスの関数をトリガーできるパスに置き換えます。 パスは、カスタムドメインをバインドするときに設定されます。 詳細については、「ルートマッチングルール」をご参照ください。関数コードを変更し、関数をデプロイします。 次に、デフォルトのURLを使用して関数にアクセスします。 変更されたコード
@app.route('/2016-08-15/proxy/CustomDemo/func-http/test', methods = ['POST','GET']) def test():
サンプルコード:
curl -v https://164901546557****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/CustomDemo/func-http/test