docker - 通过像事件对象一样传递 API Gateway 在本地调用 Lambda docker 容器
问题描述
我正在尝试新添加的对 AWS Lambda 服务的容器映像支持。
我已经使用 python-alpine 作为基础图像构建了一个自定义图像。我使用了上面文章中提到的同一个 Dockerfile。我也可以使用以下命令调用它:
curl -v -X POST http://localhost:9000/2015-03-31/functions/function/invocations -H 'Content-Type: application/json' -d '{}'
这部分-d '{}'
实际上是作为事件传递的。当此函数位于实际 AWS API 网关后面时,它会收到以下事件
{"resource":"/","path":"/view","httpMethod":"POST","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-GB,en-US;q=0.8,en;q=0.6,zh-CN;q=0.4","cache-control":"max-age=0","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"GB","content-type":"application/x-www-form-urlencoded","Host":"j3ap25j034.execute-api.eu-west-2.amazonaws.com","origin":"https://j3ap25j034.execute-api.eu-west-2.amazonaws.com","Referer":"https://j3ap25j034.execute-api.eu-west-2.amazonaws.com/dev/","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36","Via":"2.0 a3650115c5e21e2b5d133ce84464bea3.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"0nDeiXnReyHYCkv8cc150MWCFCLFPbJoTs1mexDuKe2WJwK5ANgv2A==","X-Amzn-Trace-Id":"Root=1-597079de-75fec8453f6fd4812414a4cd","X-Forwarded-For":"50.129.117.14, 50.112.234.94","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryStringParameters":null,"pathParameters":null,"stageVariables":null,"requestContext":{"path":"/dev/","accountId":"125002137610","resourceId":"qdolsr1yhk","stage":"dev","requestId":"0f2431a2-6d2f-11e7-b799-5152aa497861","identity":{"cognitoIdentityPoolId":null,"accountId":null,"cognitoIdentityId":null,"caller":null,"apiKey":"","sourceIp":"50.129.117.14","accessKey":null,"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36","user":null},"resourcePath":"/","httpMethod":"POST","apiId":"j3azlsj0c4"},"body":{"msg":"update"},"isBase64Encoded":false}
我的代码库依赖于 , , , 等参数path
。resource
我isBase64Encoded
想要body
实现的是使应用程序可移植(可以在 kubernetes 上运行)。是否有一种工具或方法可以充当 API 网关并在调用此函数时传递类似于上述事件的事件?
我搜索了 tyk、traefik,但它们都不能生成像 AWS API 网关这样的事件并将其传递给函数。
解决方案
不确定您要模拟什么 API 网关事件,它实际上是关于发送到 lambda 函数的 json 格式的有效负载。
例如。
aws lambda invoke --function-name docker-aws-cdk --region ap-southeast-1 --payload '{"action":"start", "target":"dev"}' outfile
推荐阅读
- javascript - 为移动设备调整 Javascript 功能
- c# - 实体框架中 MSSQL 的默认命令超时
- reed-solomon - 使用 Berlekamp-Massey 算法的错误检测能力
- xamarin.android - Xamarin Android - API 27 请求权限
- c# - 使用 Microsoft.Management.Infrastructure (CimSession) 读取注册表值
- c++ - Compiling string and returning it as a vector
- vue.js - How do I retrieve the datas sent back to a SweetAlert2 Ajax call?
- php - 如何从linux终端连接mysql数据库
- mysql - Cast Sum IF mysql
- angular - Angular 嵌套表单父/子组件