1) API Ağ Geçidi kaynak tanımının "Entegrasyon İsteği" ekranındaki " Lambda Proxy entegrasyonunu kullan" etiketli onay kutusunu işaretleyerek API Ağ Geçidi kaynağınızı Lambda Proxy Entegrasyonunu kullanacak şekilde yapılandırın . (Veya cloudformation / terraform / serverless / etc yapılandırmanızda tanımlayın)
2) Lambda kodunuzu 2 şekilde değiştirin
- Gelen
event(1. işlev bağımsız değişkeni) uygun şekilde işleyin . Artık yalnızca yük değil, başlıklar, sorgu dizesi ve gövde dahil tüm HTTP isteğini temsil ediyor. Aşağıdaki örnek. Kilit nokta, JSON gövdelerinin açık JSON.parse(event.body)çağrı gerektiren dizeler olacağıdır (bunu unutmayınız try/catch). Örnek aşağıdadır.
- Daha sonra boş dahil olmak üzere HTTP bilgilerini sağlayan bir yanıt nesnesiyle geri arama çağırarak yanıt
statusCode, bodyve headers.
bodybir dize olmalı, gerektiği JSON.stringify(payload)gibi yap
statusCode bir sayı olabilir
headers değerlere başlık adlarının bir nesnesidir
Proxy Entegrasyonu için Örnek Lambda Olay Argümanı
{
"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
}
Örnek Geri Arama Yanıt Şekli
callback(null, {
statusCode: 409,
body: JSON.stringify(bodyObject),
headers: {
'Content-Type': 'application/json'
}
})
Notlar
- contextGibi yöntemlerin context.succeed()kullanımdan kaldırıldığına inanıyorum . Hala işe yarıyor gibi görünseler de artık belgelenmiyorlar. Geri arama API'sine kodlamanın ileriye dönük doğru şey olduğunu düşünüyorum.