Create POST API

  1. Open template.yaml file in fcj-book-shop folder.

  2. Add the following script at the end of the file that creates the POST method.

    • Firstly, we need to refresh to create a new deployment version for POST Api in a few next steps. Comment BookApiDeployment block.

      # BookApiDeployment:
      #   Type: AWS::ApiGateway::Deployment
      #   Properties:
      #     RestApiId: !Ref BookApi
      #   DependsOn:
      #     - BookApiGet
      
      BookApiStage:
        Type: AWS::ApiGateway::Stage
        Properties:
          RestApiId: !Ref BookApi
          StageName: !Ref stage
          # DeploymentId: !Ref BookApiDeployment
      

      CreatePostAPI

    • Run the following command to deploy SAM.

      sam build
      sam validate
      sam deploy
      

      CreatePostAPI

    • Next, we will create BookApiCreate and BookApiCreateInvokePermission.

      BookApiCreate:
        Type: AWS::ApiGateway::Method
        Properties:
          HttpMethod: POST
          RestApiId: !Ref BookApi
          ResourceId: !Ref BookApiResource
          AuthorizationType: NONE
          Integration:
            Type: AWS_PROXY
            IntegrationHttpMethod: POST # For Lambda integrations, you must set the integration method to POST
            Uri: !Sub >-
              arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${BookCreate.Arn}/invocations
            IntegrationResponses:
              - StatusCode: "200"
                ResponseParameters:
                  method.response.header.Access-Control-Allow-Origin: "'*'"
                  method.response.header.Access-Control-Allow-Methods: "'GET,POST,OPTIONS'"
                  method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
          MethodResponses:
            - StatusCode: "200"
              ResponseParameters:
                method.response.header.Access-Control-Allow-Origin: "'*'"
                method.response.header.Access-Control-Allow-Methods: "'GET,POST,OPTIONS'"
                method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
      
      BookApiCreateInvokePermission:
        Type: AWS::Lambda::Permission
        Properties:
          FunctionName: !Ref BookCreate
          Action: lambda:InvokeFunction
          Principal: apigateway.amazonaws.com
          SourceAccount: !Ref "AWS::AccountId"
      

      CreatePostAPI

    • Then, we uncomment the codeblock that we commented above.

      BookApiDeployment:
        Type: AWS::ApiGateway::Deployment
        Properties:
          RestApiId: !Ref BookApi
        DependsOn:
          - BookApiGet
          - BookApiCreate
      
      BookApiStage:
        Type: AWS::ApiGateway::Stage
        Properties:
          RestApiId: !Ref BookApi
          StageName: !Ref stage
          DeploymentId: !Ref BookApiDeployment
      

      CreatePostAPI

  3. Run the following command to deploy SAM.

    sam build
    sam validate
    sam deploy
    

    CreatePostAPI

  4. Open AWS API Gateway console.

    • Click fcj-serverless-api REST api. PrepRestApi
    • At fcj-serverless-api resources page.
      • Click Resources.
      • Select POST.
      • Click Lambda integration and check the book_create function. CreatePostAPI
      • Click Stages.
      • Select POST.
      • Copy and save the Invoke URL. CreatePostAPI