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
, body
ve headers
.
body
bir 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
- context
Gibi 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.