1)กำหนดค่าทรัพยากร API Gateway ของคุณเพื่อใช้Lambda Proxy Integrationโดยทำเครื่องหมายที่ช่อง"Use Lambda Proxy integration"ในหน้าจอ "Integration Request" ของข้อกำหนดทรัพยากร API Gateway (หรือกำหนดใน cloudformation / terraform / serverless / etc config)
2)เปลี่ยนรหัสแลมบ์ดาของคุณได้ 2 วิธี
- ประมวลผลขาเข้า
event
(อาร์กิวเมนต์ของฟังก์ชันที่ 1) อย่างเหมาะสม ไม่ใช่แค่เพย์โหลดเปล่าอีกต่อไป แต่แสดงถึงคำขอ HTTP ทั้งหมดรวมถึงส่วนหัวสตริงข้อความค้นหาและเนื้อหา ตัวอย่างด้านล่าง ประเด็นสำคัญคือเนื้อความ JSON จะเป็นสตริงที่ต้องมีการJSON.parse(event.body)
เรียกที่ชัดเจน(อย่าลืมtry/catch
สิ่งนั้น) ตัวอย่างอยู่ด้านล่าง
- ตอบสนองโดยการเรียกโทรกลับด้วย null แล้ววัตถุการตอบสนองที่ให้รายละเอียดของ HTTP รวมทั้ง
statusCode
, และ
body
headers
body
ควรเป็นสตริงดังนั้นให้ทำJSON.stringify(payload)
ตามต้องการ
statusCode
สามารถเป็นตัวเลข
headers
เป็นออบเจ็กต์ของชื่อส่วนหัวของค่า
ตัวอย่างอาร์กิวเมนต์เหตุการณ์ Lambda สำหรับการรวมพร็อกซี
{
"resource": "/example-path",
"path": "/example-path",
"httpMethod": "POST",
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"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": "US",
"Content-Type": "application/json",
"Host": "exampleapiid.execute-api.us-west-2.amazonaws.com",
"User-Agent": "insomnia/4.0.12",
"Via": "1.1 9438b4fa578cbce283b48cf092373802.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "oCflC0BzaPQpTF9qVddpN_-v0X57Dnu6oXTbzObgV-uU-PKP5egkFQ==",
"X-Forwarded-For": "73.217.16.234, 216.137.42.129",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"queryStringParameters": {
"bar": "BarValue",
"foo": "FooValue"
},
"pathParameters": null,
"stageVariables": null,
"requestContext": {
"accountId": "666",
"resourceId": "xyz",
"stage": "dev",
"requestId": "5944789f-ce00-11e6-b2a2-dfdbdba4a4ee",
"identity": {
"cognitoIdentityPoolId": null,
"accountId": null,
"cognitoIdentityId": null,
"caller": null,
"apiKey": null,
"sourceIp": "73.217.16.234",
"accessKey": null,
"cognitoAuthenticationType": null,
"cognitoAuthenticationProvider": null,
"userArn": null,
"userAgent": "insomnia/4.0.12",
"user": null
},
"resourcePath": "/example-path",
"httpMethod": "POST",
"apiId": "exampleapiid"
},
"body": "{\n \"foo\": \"FOO\",\n \"bar\": \"BAR\",\n \"baz\": \"BAZ\"\n}\n",
"isBase64Encoded": false
}
รูปร่างการตอบกลับการโทรกลับตัวอย่าง
callback(null, {
statusCode: 409,
body: JSON.stringify(bodyObject),
headers: {
'Content-Type': 'application/json'
}
})
หมายเหตุ
- ฉันเชื่อว่าวิธีการcontext
ดังกล่าวcontext.succeed()
ถูกเลิกใช้แล้ว เอกสารเหล่านี้ไม่ได้รับการจัดทำเป็นเอกสารอีกต่อไปแม้ว่าจะดูเหมือนยังใช้งานได้ ฉันคิดว่าการเข้ารหัสไปยัง API การเรียกกลับเป็นสิ่งที่ถูกต้องในอนาคต