2

I am trying to create a CloudFormation template to deploy an API Gateway HTTP API integrated with SQS. I used the below CF template:

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  ExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: ExecutionRole
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - apigateway.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: "/"
      Policies:
        - PolicyName: root
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - sqs:SendMessage
                  - sqs:ReceiveMessage
                  - sqs:DeleteMessage
                Resource: !Sub "arn:aws:sqs:${AWS::Region}:${AWS::AccountId}:sample-queue"
              - Effect: Allow
                Action: lambda:InvokeFunction
                Resource: "*"
  Queue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: sample-queue
  API:
    Type: AWS::ApiGatewayV2::Api
    Properties:
      Body:
        openapi: "3.0.1"
        info:
          title: "HttpApi"
          version: "2022-09-29 15:59:08UTC"
        paths:
          /:
            post:
              responses:
                default:
                  description: "Default response for POST /"
              x-amazon-apigateway-integration:
                integrationSubtype: "SQS-SendMessage"
                credentials: !Sub "arn:aws:iam::${AWS::AccountId}:role/ExecutionRole"
                requestParameters:
                  MessageBody: "$request.body"
                  QueueUrl: !Sub "https://sqs.${AWS::Region}.amazonaws.com/${AWS::AccountId}/sample-queue"
                payloadFormatVersion: "1.0"
                type: "aws_proxy"
                connectionType: "INTERNET"
                timeoutInMillis: 30000
        x-amazon-apigateway-importexport-version: "1.0"
  Stage:
    Type: AWS::ApiGatewayV2::Stage
    Properties:
      StageName: v1
      ApiId: !Ref API
  Deployment:
    Type: AWS::ApiGatewayV2::Deployment
    Properties:
      ApiId: !Ref API
      StageName: !Ref Stage

The API this generates looks good in the web console, but not sure why, any POST to this API gives an error:

{
    "message": "Not Found"
}

Perhaps I am missing something very silly. But not able to locate it. Can you please help me identify?

Yves M.
  • 29,855
  • 23
  • 108
  • 144
Vikas
  • 626
  • 1
  • 10
  • 22

0 Answers0