如果使用AWS S3或AWS Lambda等服务时,REST API无法识别事件的原因是由于AWS API网关缺少必要的设置。
以下是解决方法的代码示例:
首先,你需要在AWS API网关中新建一个端点,选择Lambda函数作为后端:
resource: /{proxy+}
method: ANY
type: AWS_PROXY
integration-http-method: POST
uri: arn:aws:apigateway:{your-region}:lambda:path/2015-03-31/functions/{lambda_arn}/invocations
在这个示例中,{proxy+}可以代表任何请求路径。你还需要将{your-region}和{lambda_arn}分别替换成你的AWS区域和Lambda函数的ARN(Amazon资源名称)。
接着,为AWS S3事件添加API网关触发器:
resource: /s3/{bucket}/{prefix}
method: ANY
type: AWS
uri: arn:aws:apigateway:{your-region}:s3:path/{bucket}/{prefix}
对于这个示例,你需要将s3://your-bucket/your-prefix设置为Lambda函数的触发器。这样,当你上传文件到这个S3桶中,函数就会被自动触发。
最后,你需要将Lambda函数与API网关进行对接:
resources:
/:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs14.x
CodeUri: ./
Events:
ApiGatewayEvent:
Type: Api
Properties:
Path: /event/{eventName}
Method: GET
这个示例中,每当你在API网关的/event/{eventName}路径中发起GET请求时,Lambda函数就会处理这个请求。在这个请求中,你可以访问进来的事件,如