AWS SAM Deploy, how to find URL of API Gateway?

11,707

Solution 1

I just had time to answer properly. Having API Gateway definition:

Resources:
  ...
  ServerlessRestApi:
    Type: AWS::Serverless::Api
    DeletionPolicy: "Retain"
    Properties:
      StageName: Prod
  ...

you can output

Outputs:
  ProdDataEndpoint:
    Description: "API Prod stage endpoint"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"

Solution 2

I have separate AWS::ApiGateway::RestApi and AWS::ApiGateway::Stage resources, so my Output looked a bit different, since I didn't/couldn't hard code the stage name:

Outputs:
  ProdEndpoint:
    Value: !Sub "https://${ApiGw}.execute-api.${AWS::Region}.amazonaws.com/${ApiGwStage}/"

Resources:
  ApiGw:
    Type: AWS::ApiGateway::RestApi
    Properties:
      Name: 'Serverless Ipsum #noServerNovember challenge'
      FailOnWarnings: true

  ApiGwDeployment:
    Type: AWS::ApiGateway::Deployment
    # Required -- see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-deployment.html
    DependsOn: ApiGwMethod
    Properties:
      RestApiId: !Ref ApiGw

  ApiGwStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      DeploymentId: !Ref ApiGwDeployment
      MethodSettings:
        - DataTraceEnabled: true
          HttpMethod: '*'
          LoggingLevel: INFO
          ResourcePath: '/*'
      RestApiId: !Ref ApiGw
      StageName: prod

  ApiGwResource:
    Type: AWS::ApiGateway::Resource
    Properties:
      RestApiId: !Ref ApiGw
      ParentId: !GetAtt ["ApiGw", "RootResourceId"]
      PathPart: "{proxy+}"

  ApiGwMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      RestApiId: !Ref ApiGw
      ResourceId: !Ref ApiGwResource
      HttpMethod: ANY
      AuthorizationType: NONE
      Integration:
        Type: AWS_PROXY
        IntegrationHttpMethod: POST
        Uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ServerlessIpsumFunction.Arn}/invocations"
Share:
11,707
user3888307
Author by

user3888307

Updated on June 16, 2022

Comments

  • user3888307
    user3888307 almost 2 years

    How do I find the URL address of the API Gateway after deployment from Command line ?

    I use a script similar to below to deploy my API Gateway and Authorizer, and it deploys fine.

    https://github.com/floodfx/aws-lambda-proxy-using-sam-local/blob/master/deploy.sh

    I'm trying to figure out how to get the address of the API Gateway after Deployment from the command line

    The API Gateway gets created, I can see the stack:

    aws cloudformation describe-stacks
    
    "Stacks": [
            {
                "StackId": "arn:aws:cloudformation:us-east-1:761861444952:stack/mygateway912/72100720-6e67-11e8-93e9-500c28604c4a", 
                "Description": "An example serverless \"Hello World2 \" application with a custom authorizer.", 
                "Tags": [], 
                "CreationTime": "2018-06-12T17:38:40.946Z", 
                "Capabilities": [
                    "CAPABILITY_IAM"
                ], 
                "StackName": "mygateway912", 
                "NotificationARNs": [], 
                "StackStatus": "CREATE_COMPLETE", 
                "DisableRollback": false, 
                "ChangeSetId": "arn:aws:cloudformation:us-east-1:76161444952:changeSet/awscli-cloudformation-package-deploy-1528825120/352f7c7a-2870-44ea-9e7f-40d16c0015df", 
                "LastUpdatedTime": "2018-06-12T17:38:46.411Z"
            }
    

    There must be a simple command I'm missing to get this.

  • user3888307
    user3888307 almost 6 years
    I put some example on my github, if anyone is still struggling with this: github.com/pmcdowell-okta/my-notes/tree/master/awsSam
  • exception
    exception almost 4 years
    How can I get the value of that output at runtime?
  • rainabba
    rainabba about 3 years
    Op specified SAM Deploy (not explicitly creating resources).