- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
它不同于 - How to pass a params from POST to AWS Lambda from Amazon API Gateway 。因为我可以在API网关中转换参数,但无法使用Golang传递或打印它。然而,同一个 API 网关对于 Python 来说工作得很好。
下面是我的 API Gateway 和 AWS Lambda(Golang) 的日志。我可以看到 POST 参数已成功转换为 JSON。不过,我在 Lambda 函数日志中看不到它。
API网关日志
(442f74ed-39e5-4372-bf85-42bf814f802f) Extended Request Id: EIaYxxMF3lQ=
(442f74ed-39e5-4372-bf85-42bf814f802f) Method request path: {}
(442f74ed-39e5-4372-bf85-42bf814f802f) Method request query string: {}
(442f74ed-39e5-4372-bf85-42bf814f802f) Method request headers: {Accept=*/*, Cache-Control=max-age=259200, X-Twilio-Signature=ZWg2v7xxxfnBlPyxE=, User-Agent=TwilioProxy/1.1, X-Forwarded-Proto=https, I-Twilio-Idempotency-Token=e5d1xxx221bc4, X-Forwarded-For=54.xxxx.227, Host=xxxxxxx.execute-api.us-east-1.amazonaws.com, X-Forwarded-Port=443, X-Amzn-Trace-Id=Root=1-5de67103-7994dbxxx0dbd872, Content-Type=application/x-www-form-urlencoded}}
(442f74ed-39e5-4372-bf85-42bf814f802f) Method request body before transformations: ToCountry=US&ToState=UT&SmsMessageSid=SMed65axxx595c7938df&NumMedia=0&ToCity=&FromZip=&SmsSid=SMed65aa5xxccdd595c7938df&FromState=&SmsStatus=received&FromCity=&Body=Testing+again&FromCountry=IN&To=%2Bxxxx848&ToZip=&NumSegments=1&MessageSid=SMed65axxxd595c7938df&AccountSid=AC23a2cbxxx65a66d98&From=%2B9xxxx5590&ApiVersion=2010-04-01
(442f74ed-39e5-4372-bf85-42bf814f802f) Endpoint request URI: https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:6xxxxxxxx6:function:Twillio_connector_test/invocations
(442f74ed-39e5-4372-bf85-42bf814f802f) Endpoint request headers: {x-amzn-lambda-integration-tag=442f74ed-39e5-4372-bf85-42bf814f802f, Authorization=*****27aa7a, X-Amz-Date=20191203T142819Z, x-amzn-apigateway-api-id=xxxxx, X-Amz-Source-Arn=arn:aws:execute-api:us-east-1:69xxxx886:xxxxxxx/v1/POST/message, Accept=application/x-www-form-urlencoded, User-Agent=AmazonAPIGateway_f7504e7yc6, X-Amz-Security-Token=IQoJbxxxhQH [TRUNCATED]
(442f74ed-39e5-4372-bf85-42bf814f802f) Endpoint request body after transformations:
{
"ToCountry": "US",
"ToState": "UT",
"SmsMessageSid": "SMed65aaxxxxxx5c7938df",
"NumMedia": "0",
"ToCity": "",
"FromZip": "",
"SmsSid": "SMed65aaxxxxxx938df",
"FromState": "",
"SmsStatus": "received",
"FromCity": "",
"Body": "Testing+again",
"FromCountry": "IN",
"To": "%2B1xxxxxx848",
"ToZip": "",
"NumSegments": "1",
"MessageSid": "SMed65aa5dxxxx7938df",
"AccountSid": "AC23xxxd98",
"From": "%2B9xxxxxx90",
"ApiVersion": "2010-04-01"
}
(442f74ed-39e5-4372-bf85-42bf814f802f) Endpoint response headers: {Date=Tue, 03 Dec 2019 14:28:20 GMT, Content-Type=application/json, Content-Length=43, Connection=keep-alive, x-amzn-RequestId=168394b7-c152-4434-af02-03a03b6f3090, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=1-5de67103-7994dbxxxxbe30dbd872;sampled=0}
(442f74ed-39e5-4372-bf85-42bf814f802f) Endpoint response body before transformations: "Lambda function is completed successfully"
(442f74ed-39e5-4372-bf85-42bf814f802f) Method response body after transformations: Lambda function is completed successfully
(442f74ed-39e5-4372-bf85-42bf814f802f) Method response headers: {X-Amzn-Trace-Id=Root=1-5de67103-7994dbxxxxxxd872;Sampled=0, Content-Type=application/xml}
Lambda函数代码
func Handler(request events.APIGatewayProxyRequest) (string, error) {
fmt.Println("request:", events.APIGatewayProxyRequestContext)
fmt.Println("request:", events.APIGatewayProxyResponse)
fmt.Println("request:", events.APIGatewayRequestIdentity)
fmt.Printf("%+v\n", request)
fmt.Println("request Body:", request.Body)
fmt.Println("request HTTPMethod:", request.HTTPMethod)
fmt.Println("request Headers:", request.Headers)
fmt.Println("request:", request.RequestContext.RequestID)
fmt.Println("PrettyPrint")
prettyPrint(request)
Lambda 函数日志
request: { map[] map[] map[] map[] map[] map[] { { } map[] } Good Day false}
{Resource: Path: HTTPMethod: Headers:map[] MultiValueHeaders:map[] QueryStringParameters:map[] MultiValueQueryStringParameters:map[] PathParameters:map[] StageVariables:map[] RequestContext:{AccountID: ResourceID: Stage: RequestID: Identity:{CognitoIdentityPoolID: AccountID: CognitoIdentityID: Caller: APIKey: AccessKey: SourceIP: CognitoAuthenticationType: CognitoAuthenticationProvider: UserArn: UserAgent: User:} ResourcePath: Authorizer:map[] HTTPMethod: APIID:} Body:Good Day IsBase64Encoded:false}
request Body: Good Day
request HTTPMethod:
request Headers: map[]
request:
我尝试过很多方法。但我无法在Golang代码中获取所需的参数。如果我做错了什么,请纠正我。任何帮助将不胜感激。
PS:我引用这篇文档来设置API网关 - https://www.twilio.com/docs/sms/tutorials/how-to-receive-and-reply-python-amazon-lambda 。该设置对于 Python Lambda 函数运行良好。
最佳答案
此问题是由于golang和python中lambda handler的参数结构不同引起的。
{
"ToCountry": "US",
"ToState": "UT",
"SmsMessageSid": "SMed65aaxxxxxx5c7938df",
"NumMedia": "0",
"ToCity": "",
"FromZip": "",
"SmsSid": "SMed65aaxxxxxx938df",
"FromState": "",
"SmsStatus": "received",
"FromCity": "",
"Body": "Testing+again",
"FromCountry": "IN",
"To": "%2B1xxxxxx848",
"ToZip": "",
"NumSegments": "1",
"MessageSid": "SMed65aa5dxxxx7938df",
"AccountSid": "AC23xxxd98",
"From": "%2B9xxxxxx90",
"ApiVersion": "2010-04-01"
}
事件
参数: def lambda_handler(event, context):
print("Received event: " + str(event))
return '<?xml version=\"1.0\" encoding=\"UTF-8\"?>'\
'<Response><Message>Hello world! -Lambda</Message></Response>'
引用AWS Python Doc :
event – AWS Lambda uses this parameter to pass in event data to the handler. This parameter is usually of the Python dict type. It can also be a list, str, int, float, or NoneType type.
events.APIGatewayProxyRequest
参数:// APIGatewayProxyRequest contains data coming from the API Gateway proxy
type APIGatewayProxyRequest struct {
Resource string `json:"resource"` // The resource path defined in API Gateway
Path string `json:"path"` // The url path for the caller
HTTPMethod string `json:"httpMethod"`
Headers map[string]string `json:"headers"`
MultiValueHeaders map[string][]string `json:"multiValueHeaders"`
QueryStringParameters map[string]string `json:"queryStringParameters"`
MultiValueQueryStringParameters map[string][]string `json:"multiValueQueryStringParameters"`
PathParameters map[string]string `json:"pathParameters"`
StageVariables map[string]string `json:"stageVariables"`
RequestContext APIGatewayProxyRequestContext `json:"requestContext"`
Body string `json:"body"`
IsBase64Encoded bool `json:"isBase64Encoded,omitempty"`
}
所以你可以看到,你提供给 Golang AWS lambda 处理程序的 json 映射仅匹配一个键 Body
。这就是 printf 只打印 Testing Again
的原因。
用golang写的lambda得到正确的结果,我想你可以引用this part of AWS DOC 。 (这对我们了解AWS API Gateway映射模板的工作原理非常有帮助。)
重写映射模板以匹配 APIGatewayProxyRequest
JSON 标记。
关于amazon-web-services - 无法将参数从 POST 从 Amazon API Gateway for Golang 传递到 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59160055/
我正在使用 choronos,它建议使用 start/stop 命令开始停止,如下所示 开始计时 停止计时 但是,我正在编写 puppet manifest,它只适用于下面的服务命令。 服务计时开始
来历及作用 services.exe进程程序文件是由微软公司为其发布的Windows操作系统定义的一个系统进程,常见于Windows 2000/XP/Vista/2007等系统中,被描述为服务和控
我一直在尝试使用installutil:installutil /u GSIS.FileMoverService.exe安装Windows服务。 我得到的输出是: Uninstalling assem
如果一个域有多个团队和多个 Web 应用程序,那么注册 Service Worker 来管理整个站点的最佳建议是什么?具有范围的顶级服务 worker /或子域中的多个服务 worker ?由于一个域
我已经在 eclipse 中创建了企业项目。动态web项目和ejb项目对企业项目有借鉴意义。当我运行管理员(企业项目)运行时选择 wildfly 服务器 18。我收到以下错误。谁能告诉我我错过了什么。
我已经使用 apache-cxf-2.7.4 创建了一个 Web 服务。我进入了我的项目中制作的类(class)。我的项目中的库是: math3-commons-3.2.jar XStream-1.4
我在域中的 Virtual Box 中运行集群计算机,默认情况下服务在 Network 服务下运行,服务一直停止,事件日志中出现以下错误。 请从下面的错误日志中查找错误详细信息。任何帮助都会很棒。 L
在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是一个无状态的 web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Ac
当我尝试运行在WIX中创建的安装程序时,出现以下错误消息: “服务'Report Generator Service'(报告生成器服务)无法启动。请验证您是否具有启动系统服务的足够特权”。 我已经在这
尝试使用 cloudformation 创建 ECS 服务(在 Fargate 上)但出现错误: Invalid service in ARN (Service: AmazonECS; Status
我正在编写一个简单的Windows服务,该服务每个月向所有员工发送一封电子邮件。我的问题是,完成后如何停止自我?我是该领域的新手,请帮帮我。非常感谢。 它将部署在服务器上以每月运行。我没有开始做这件事
有谁知道是否有办法在 service worker 中获取此号码或日期: 将我的服务 worker 缓存命名为 cache-1182 会很方便或 cache-20171127171448 我想在安装事
我想开始使用 Azure Service Fabric 技术。 我按照this document工作并安装最新的SDK。安装后,我打开 PowerShell(“以管理员身份运行”)命令行窗口并写入这些
我在使用 whenever gem 时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得很好但是当我在日志中收到以下消息时尝试自动执行它: ActiveRecord::Statem
我想在 service fabric 集群中为两个不同的 web 应用程序(webpi/website)共享 http/80 端口,应用程序必须有 2 个不同的主机名: mywebapi.com 和
我创建了一个使用 MongoDB 实现 hibernate OGM 的应用程序。它在 Eclipse 中运行得很好,但是,当我构建一个 fat jar 并尝试运行它时,出现以下错误: Exceptio
我有一个 Selenium Python 测试套件。它开始运行,但几分钟后抛出以下错误: Exception AttributeError: "'Service' object has no attr
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”Web 服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时,我都会收到 NullPointerExceptio
我正在尝试为我的网站使用后台定期同步。我正在使用 localhost 并在 1*1000 毫秒时注册 periodicsync 事件,但这根本不会触发。 我看过这个demo ,但即使我将该网站安装为应
我是一名优秀的程序员,十分优秀!