Mahbub Rahman
Mahbub Rahman

Reputation: 1343

AWS CloudFormation API GatewayV2 Route Creation

I am creating a template to create an http api with apigatewayv2.

My API definition in template is:

sfHttpApi:
    Type: AWS::ApiGatewayV2::Api
    DependsOn: sfLambdaFunction
    Properties:
      Name: !Sub sfHttpAPI-${Region}-${Env}
      ProtocolType: HTTP
      Target: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${sfLambdaFunction}/invocations
      CredentialsArn: !GetAtt sfApiGatewayRole.Arn

  sfApiTriggerLambdaPermission:
    Type: "AWS::Lambda::Permission"
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !GetAtt sfLambdaFunction.Arn
      Principal: apigateway.amazonaws.com
      SourceArn: !Sub 'arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${sfHttpApi}/' 

  sfApiLambdProxyIntegration:
    Type: "AWS::ApiGatewayV2::Integration"
    Properties:
      Description: Lambda Integration
      ConnectionType: INTERNET
      IntegrationMethod: POST
      IntegrationUri: !Sub  "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${sfLambdaFunction.Arn}/invocations"
      PayloadFormatVersion: '1.0'
      ApiId: !Ref sfHttpApi
      IntegrationType: AWS_PROXY

  sfRoute:
    Type: 'AWS::ApiGatewayV2::Route'
    DependsOn:
      - sfApiLambdProxyIntegration
    Properties:
      ApiId: !Ref sfHttpApi
      RouteKey: 'POST/'  **??? This is the part I dont know how to set**
      AuthorizationType: NONE
      Target: !Join 
        - /
        - - integrations
          - !Ref sfApiLambdProxyIntegration

I tried in different way to set routekey in route definition but getting error while creating the stack:

The provided route key is not formatted properly for HTTP protocol. Format should be " /" or "$default" (Service: AmazonApiGatewayV2; Status Code: 400; Error Code: BadRequestException; Request ID: 53198c85-fc41-4c76-89c4-7d2db7a7a5b6)

How can I set the routekey?

Upvotes: 8

Views: 3946

Answers (1)

Maria Ines Parnisari
Maria Ines Parnisari

Reputation: 17506

Put a space after POST, i.e. POST /.

Upvotes: 5

Related Questions