edit-icon download-icon

関数および HTTP トリガーの作成

最終更新日: Dec 04, 2018

本チュートリアルでは、HTTP トリガーに基づいて Web サービスを構築する方法について説明します。次の手順に従い、HTTP トリガーが設定されている関数を作成し、関数コードを記述します。

HTTP トリガーを設定した関数の作成

  1. Function Compute コンソール にログインします。

  2. サービスを作成するには、「サービスの操作」をご参照ください。本チュートリアルでは、サービス名は「web-server」で、リージョンは 「上海 (中国東部 2)」とします。詳細を設定するため「詳細設定」を有効化します。

  3. ログプロジェクト および LogStore のドロップダウンメニューをクリックして、ロギングのオプションを指定します。 ロール操作 に [新しいロールを作成] を選択します。 システムポリシーにAliyunLogFullAccessを選択します。 [承認]、[OK] の順にクリックします。

    • 関数のログはデバッグのため Logstore へ送信されます。ログの詳細については「関数のログ」をご参照ください。

    • 本サービスは、他の Alibaba Cloud サービスへのアクセス権を持つロールとして実行されるように設定されます。 アクセス許可の詳細については「ユーザー許可」をご参照ください。

  4. 左側のナビゲーションペインで [サービス] をクリックし、作成したサービスを選択します。

  5. 機能操作」を参照して、「サービス」で関数を作成します。「機能の作成」ページで、次のように設定します。

    1. [すべて選択] をクリックします。ドロップダウンリストから [nodejs8] または [python2.7] を選択します。注意:本チュートリアルでは、サンプルコードを 2 つの言語で表示します。

    2. [空の関数] を選択します。

    3. HTTP トリガーを図のように設定します。次に [次へ] をクリックします。HTTP トリガーの詳細については「HTTP トリガー」をご参照ください。

      1. 承認に [anonymous] を選択します。 このオプションは、認証なしで匿名のアクセスを許可します。

      2. メソッドに、この関数がサポートする HTTP リクエストメソッドを選択します。

        HTTP Trigger Configuration Sample

    4. 関数を作成し、サービス名、関数名、関数の説明、およびランタイムを入力します。

    5. [次へ] をクリックします。

    6. 入力した情報を確認し、[作成] をクリックします。

関数コードの記述

サンプルコードをコピーして、新規作成した関数で選択した言語に対応するコンソールのエディタに貼り付けます。すべての関数のサンプルコードは、HTTP リクエストのパラメータを含む JSON 文字列を返します。

Node.js サンプルコード

Node.js のコード記述の詳細については「Node.js の HTTP トリガーで設定されたエントリポイント」をご参照ください。

  1. var getRawBody = require('raw-body')
  2. module.exports.handler = function (request, response, context) {
  3. // get request info
  4. getRawBody(request, function (err, data) {
  5. var params = {
  6. path: request.path,
  7. queries: request.queries,
  8. headers: request.headers,
  9. method: request.method,
  10. body: data,
  11. url: request.url,
  12. clientIP: request.clientIP,
  13. }
  14. // you can deal with your own logic here
  15. // set response
  16. var respBody = new Buffer.from(JSON.stringify(params));
  17. // var respBody = new Buffer( )
  18. response.setStatusCode(200)
  19. response.setHeader('content-type', 'application/json')
  20. response.send(respBody)
  21. })
  22. };

Python サンプルコード

Python のコード記述の詳細については「Python の HTTP トリガーで設定されたエントリポイント」をご参照ください。

  1. # -*- coding: utf-8 -*-
  2. import json
  3. HELLO_WORLD = b"Hello world!\n"
  4. def handler(environ, start_response):
  5. request_uri = environ['fc.request_uri']
  6. response_body = {
  7. 'uri':environ['fc.request_uri'],
  8. 'method':environ['REQUEST_METHOD']
  9. }
  10. # do something here
  11. status = '200 OK'
  12. response_headers = [('Content-type', 'text/json')]
  13. start_response(status, response_headers)
  14. # Python2
  15. return [json.dumps(response_body)]
  16. # Python3 tips: When using Python3, the str and bytes types cannot be mixed.
  17. # Use str.encode() to go from str to bytes
  18. # return [json.dumps(response_body).encode()]

PHP サンプルコード

PHP のコード記述の詳細については「PHP の HTTP トリガーで設定されたエントリポイント」をご参照ください。

  1. <?php
  2. use RingCentral\Psr7\Response;
  3. function handler($request, $context): Response{
  4. /*
  5. $body = $request->getBody()->getContents();
  6. $queries = $request->getQueryParams();
  7. $method = $request->getMethod();
  8. $headers = $request->getHeaders();
  9. $path = $request->getAttribute("path");
  10. $requestURI = $request->getAttribute("requestURI");
  11. $clientIP = $request->getAttribute("clientIP");
  12. */
  13. return new Response(
  14. 200,
  15. array(
  16. "custom_header1" => "v1",
  17. "custom_header2" => ["v2", "v3"],
  18. ),
  19. "hello world"
  20. );
  21. }

次の手順について

ドメイン名の解決