原因
関数ハンドラーが正しく定義されていません。 たとえば、Pythonイベント関数の関数ハンドラーにはHTTPトリガーが含まれています。
解決策
次の関数型に基づいて関数ハンドラーを定義します。
Pythonイベント関数。 詳細については、「概要」をご参照ください。
def handler(event, context): return 'hello world'
を返す
Python HTTP関数。 詳細については、「Python HTTP関数」をご参照ください。
def handler(environ, start_response): context = environ['fc.context'] # get request_body try: request_body_size = int(environ.get('CONTENT_LENGTH', 0)) except (ValueError): request_body_size = 0 request_body = environ['wsgi.input'].read(request_body_size) print('request_body: {}'.format(request_body)) # do something here status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) # return value must be iterable return [b"Hello world!\n"]
原因
HTTP関数のロジックが不正です。 たとえば、start_response
パラメーターは関数で呼び出されません。 以下にコードの例を示します。
def handler(environ, start_response):
# do something here
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
# forget to call start_response
# start_response(status, response_headers)
# return value must be iterable
return [b"Hello world!\n"]
解決策
Python HTTP関数の関数ハンドラーと展開フレームワークに基づいて、HTTP関数のロジックを変更します。 詳細については、「Python HTTP関数」をご参照ください。
原因
返される値は、Python 3ランタイム環境では反復できないバイトに設定されます。
解決策
戻り値をiterableバイトに設定します。 例: [json.dumps(result).encode()]
次の例は、関数コードを変更する方法を示しています。
import json
def handler(environ, start_response):
# do something here
result = {"code": "OK"}
status = '200 OK'
response_headers = [('Content-type', 'application/json')]
start_response(status, response_headers)
# return value must be iterable
return [json.dumps(result).encode()]