AWS SAM - s50600822/Notes GitHub Wiki

Sample Helloworld with Logging configs:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  helloworld

  Sample SAM Template for helloworld
  
Globals:
  Function:
    Timeout: 3

Resources:
  AccessLogs:
    Type: AWS::Logs::LogGroup

  HelloWorldApi: 
    Type: AWS::Serverless::Api 
    Properties: 
      StageName: Prod
      EndpointConfiguration: REGIONAL
      TracingEnabled: true
      MethodSettings:
        # Correspond to CloudWatch Settings under Logs/Tracing
        - ResourcePath: '/*'
          HttpMethod: '*'
          # Disable data trace in production to avoid logging customer sensitive information from requests and responses
          DataTraceEnabled: true
          LoggingLevel: INFO
          MetricsEnabled: true

      AccessLogSetting:
        DestinationArn: !GetAtt AccessLogs.Arn
        Format: >
          {"requestId":"$context.requestId",
          "waf-error":"$context.waf.error",
          "waf-status":"$context.waf.status",
          "waf-latency":"$context.waf.latency",
          "waf-response":"$context.wafResponseCode",
          "authenticate-error":"$context.authenticate.error",
          "authenticate-status":"$context.authenticate.status",
          "authenticate-latency":"$context.authenticate.latency",
          "authorize-error":"$context.authorize.error",
          "authorize-status":"$context.authorize.status",
          "authorize-latency":"$context.authorize.latency",
          "integration-error":"$context.integration.error",
          "integration-status":"$context.integration.status",
          "integration-latency":"$context.integration.latency",
          "integration-requestId":"$context.integration.requestId",
          "integration-integrationStatus":"$context.integration.integrationStatus",
          "response-latency":"$context.responseLatency",
          "status":"$context.status"}

  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        HelloWorld:
          Type: Api
          Properties:
            RestApiId: !Ref HelloWorldApi
            Path: /hello
            Method: get


    
Outputs:
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${HelloWorldApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/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