shows how an API Gateway endpoint can directly invoke an aws service like EventBridge, DynamoDB, etc. No lambda in the middle (reduces latency and costs).
HTTP REST APIs are the most common integration pattern. API Gateway is AWS managed service for creating REST APIs. It allows us to apply security, throttling, logging, etc. to our APIs. In some cases an API is simply a passthrough to a backend AWS service. The typical approach is to have API Gateway invoke a lambda, which then contains the code to call th target AWS service. If you don’t need to perform any additional logic to the request prior to calling the backend AWS service, you may be able to use an API Gateway AWS service integration, which can directly invoke the AWS service. This simplifies the architecture, reduces request latency and reduces costs.
Demo
Prerequisites
Running
# clone repo
git clone https://github.com/pfeilbr/aws-api-gateway-aws-service-integration-playground
cd aws-api-gateway-aws-service-integration-playground
# deploy
make deploy
# test
make test
example output
{
"Entries": [
{
"EventId": "58c635b4-21aa-09d8-0ad3-0874b7dc0a39"
}
],
"FailedEntryCount": 0
}
# teardown
make teardown
Details
invoking the EventBridge PutEvents action with the request payload using the APIGatewayEventBridgeAccessRole
role.
Integration:
Type: AWS
Credentials: !GetAtt APIGatewayEventBridgeAccessRole.Arn
IntegrationHttpMethod: POST
Uri: !Sub "arn:aws:apigateway:${AWS::Region}:events:action/PutEvents"
setting the required headers to invoke the PutEvents action
RequestTemplates:
application/json: |
$input.json("$")
#set($context.requestOverride.header.X-Amz-Target ="AWSEvents.PutEvents")
#set($context.requestOverride.header.Content-Type ="application/x-amz-json-1.1")
Resources
- Use API Gateway as a Proxy for Another AWS Service
AWS::ApiGateway::Method.Integration
to dynamodb Query example- PutEvents - Amazon EventBridge
- CloudFormation Resources Generated By SAM
- API Gateway integration problem
Twitter • Reddit