How to integrate API Gateway with SQS

amazon-web-services, aws-api-gateway, aws-cloudformation

Solution

To answer my own question. Here is how you integrate SQS as a Service Proxy in API Gateway:

PostMethod:
    Type: "AWS::ApiGateway::Method"
    Properties:
      AuthorizationType: "NONE"
      ApiKeyRequired: "true"
      HttpMethod: "POST"
      ResourceId: !Ref "SomeResource"
      RestApiId: !Ref "RestApi"
      MethodResponses:
      - StatusCode: 200
      Integration:
        Credentials: !GetAtt "RestApiRole.Arn"
        IntegrationHttpMethod: "POST"
        IntegrationResponses:
        - StatusCode: 200
        Type: "AWS"
        Uri: !Sub "arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage"
        RequestParameters:
          integration.request.querystring.QueueUrl: !Sub "'${SomeQueue}'"
          integration.request.querystring.MessageBody: "method.request.body"

I've finally found all answers to my questions in various documentation. RTFM I guess.

EDIT:

and here the code for RestApiRole:

RestApiRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
        - Action:
          - "sts:AssumeRole"
          Principal:
            Service:
            - "apigateway.amazonaws.com"
          Effect: "Allow"
      Policies:
      - PolicyName: "InvokeLambda"
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
          - Action:
            - "lambda:InvokeFunction"
            Resource: !GetAtt "LambdaFunction.Arn"
            Effect: "Allow"

Problem

Just like in the title. I try to integrate API Gateway method with a SQS using cloud formation. What I am missing is the correct URI for the SQS. If any of you already did that, what should the URI look like? I came up with something like that, but have no idea where to put the SQS ARN ``` "arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage" ``` Here is the full configuration for the method: ``` PostMethod: Type: "AWS::ApiGateway::Method" Properties: ApiKeyRequired: "true" HttpMethod: "POST" ResourceId: !Ref "SomeResource" RestApiId: !Ref "SomeRestApi" Integration: IntegrationHttpMethod: "POST" IntegrationResponses: - StatusCode: 200 Type: "AWS" Uri: "arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage" ``` And here is an example of URI if you integrate with a lambda function: ``` arn:aws:apigateway:us-west-2:lambda:path//2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:function_name/invocations - ```

Original source