调用 post_to_connection 时 Lambda 超时

Fra*_*ara 0 websocket boto3 aws-lambda aws-api-gateway

我将 WebSocket ApiGateway 与 AWS Lambda 集成一起使用。当我尝试使用Lambda 函数的post_to_connection方法将数据发布到客户端时,boto3.client('apigatewaymanagementapi')总是超时而没有任何错误消息。只有超时消息会记录在 CloudWatch 中:

3.00 秒后任务超时

我的代码:

import json
import boto3
import time
import urllib

api_client = boto3.client('apigatewaymanagementapi')

def lambda_handler(event, context):

    connectionId = event['requestContext']['connectionId']

    api_client.post_to_connection(ConnectionId=connectionId, Data=json.dumps({'test': '1'}))

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
        }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Fra*_*ara 5

我发现这篇文章要求提供更清晰的 boto3 文档。事实证明,如果您实例化 apigatewaymanagementapi 客户端,您必须传递 endpoint_url 参数,但如果您不这样做,该函数将不会抛出任何错误。无论如何, api_client 应该像这样创建:

api_client = boto3.client('apigatewaymanagementapi',
endpoint_url='https://{api-id}.execute-api.{your-aws-region}.amazonaws.com/{stage}')
Run Code Online (Sandbox Code Playgroud)

注意:不要将末尾带有“@connections”的 url 字符串传递给 endpoint_url