How can I use api gateway stages via cloudformation or sam?

后端 未结 1 1159
傲寒
傲寒 2021-01-19 16:55

I am using AWS SAM to deploy my lambda and api gateway. Below is my template yaml file:

AWSTemplateFormatVersion: \'2010-09-09\'
Transform: AWS:         


        
相关标签:
1条回答
  • 2021-01-19 17:21

    Typically what you would do is set the stage variable for the API in the template (maybe getting it through SSM parameter store, or just passing it through manually). Then, you would deploy the template as stage = "dev", and stage = "prod", as two separate deployments.

    Here is an example (notice the "Stage" parameter, and then the !Sub ${Stage} in the API path):

    AWSTemplateFormatVersion: '2010-09-09'
    Transform: AWS::Serverless-2016-10-31
    Description: >
      sam-app
    
      Sample SAM Template for sam-app
    
    Parameters:
      Stage:
        Type: String
        Default: Dev  #you would change this for dev/prod
    
    # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
    Globals:
      Function:
        Timeout: 3
    
    Resources:
      HelloWorldFunction:
        Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Properties:
          CodeUri: hello-world/
          Handler: app.lambdaHandler
          Runtime: nodejs8.10
          Events:
            HelloWorld:
              Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
              Properties:
                Path: /hello
                Method: post
    
    Outputs:
      # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
      # Find out more about other implicit resources you can reference within SAM
      # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
      HelloWorldApi:
        Description: "API Gateway endpoint URL for Prod stage for Hello World function"
        Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/${Stage}/hello/"
      HelloWorldFunction:
        Description: "Hello World Lambda Function ARN"
        Value: !GetAtt HelloWorldFunction.Arn
      HelloWorldFunctionIamRole:
        Description: "Implicit IAM Role created for Hello World function"
        Value: !GetAtt HelloWorldFunctionRole.Arn
    

    You can then use UsagePlans per stage, or different API keys per stage to better manage your API

    0 讨论(0)
提交回复
热议问题