8

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?

2
  • 1
    Can you try putting a space after POST? I.e. RouteKey: 'POST /' Commented Mar 20, 2020 at 16:52
  • @ Maria Ines Parnisari Thanks a lot Commented Mar 21, 2020 at 6:02

1 Answer 1

5

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

Sign up to request clarification or add additional context in comments.

3 Comments

It works now. By default the API is deployed in $default stage hence $default route and $default integration is used as far I understand. Should I create a stage also and deploy in that stage so that my API uses the route I created above?
@MahbubRahman did you get this to work? The extra stage so that your api uses the route you just created?
@Simon Guldstrand yes it is working. I created the stage and deployment as well to use the route I created above :). Please let me know if you have any suggestion

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.