AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > Wild Rydes Asynchronous Messaging Workshop - Lab 2 # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 10 Runtime: python3.7 Tags: project: wild-rydes workshop: asynchronous-messaging-workshop author: aws Resources: SubmitRideCompletionFunction: 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: unicorn-management-service/ Handler: app.lambda_handler Environment: Variables: TABLE_NAME: !Ref RidesTable # TOPIC_ARN: !Ref RideCompletionTopic Policies: - DynamoDBCrudPolicy: # https://github.com/awslabs/serverless-application-model/blob/develop/samtranslator/policy_templates_data/policy_templates.json TableName: !Ref RidesTable # - SNSPublishMessagePolicy: # https://github.com/awslabs/serverless-application-model/blob/develop/samtranslator/policy_templates_data/policy_templates.json # TopicName: !GetAtt RideCompletionTopic.TopicName Events: WildRydes: 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: /submit-ride-completion Method: post RidesTable: Type: AWS::Serverless::SimpleTable Properties: TableName: !Sub "Rides-${AWS::StackName}" PrimaryKey: Name: id Type: String # RideCompletionTopic: # Type: AWS::SNS::Topic # Properties: # TopicName: RideCompletionTopic CustomerAccountingService: Type: AWS::Serverless::Function Properties: CodeUri: generic-backend-microservice/ Handler: app.lambda_handler ReservedConcurrentExecutions: 5 Environment: Variables: SERVICE_NAME: CustomerAccountingService # Policies: # - SQSPollerPolicy: # https://github.com/awslabs/serverless-application-model/blob/develop/samtranslator/policy_templates_data/policy_templates.json # QueueName: !Ref CustomerAccountingServiceQueue # Events: # CustomerAccountingServiceJobQueue: # Type: SQS # Properties: # Queue: !GetAtt CustomerAccountingServiceQueue.Arn # BatchSize: 1 CustomerNotificationService: Type: AWS::Serverless::Function Properties: CodeUri: generic-backend-microservice/ Handler: app.lambda_handler ReservedConcurrentExecutions: 5 Environment: Variables: SERVICE_NAME: CustomerNotificationService # Policies: # - SQSPollerPolicy: # https://github.com/awslabs/serverless-application-model/blob/develop/samtranslator/policy_templates_data/policy_templates.json # QueueName: !Ref CustomerNotificationServiceQueue # Events: # CustomerNotificationServiceJobQueue: # Type: SQS # Properties: # Queue: !GetAtt CustomerNotificationServiceQueue.Arn # BatchSize: 1 ExtraordinaryRidesService: Type: AWS::Serverless::Function Properties: CodeUri: generic-backend-microservice/ Handler: app.lambda_handler ReservedConcurrentExecutions: 5 Environment: Variables: SERVICE_NAME: ExtraordinaryRidesService # Policies: # - SQSPollerPolicy: # https://github.com/awslabs/serverless-application-model/blob/develop/samtranslator/policy_templates_data/policy_templates.json # QueueName: !Ref ExtraordinaryRidesServiceQueue # Events: # ExtraordinaryRidesServiceJobQueue: # Type: SQS # Properties: # Queue: !GetAtt ExtraordinaryRidesServiceQueue.Arn # BatchSize: 1 # CustomerAccountingServiceQueue: # Type: AWS::SQS::Queue # CustomerAccountingServiceQueuePolicy: # Type: AWS::SQS::QueuePolicy # Properties: # Queues: # - !Ref CustomerAccountingServiceQueue # PolicyDocument: # Statement: # Effect: Allow # Principal: '*' # Action: sqs:SendMessage # Resource: '*' # Condition: # ArnEquals: # aws:SourceArn: !Ref RideCompletionTopic # CustomerAccountingServiceQueueToRidesTopicSubscription: # Type: AWS::SNS::Subscription # Properties: # Endpoint: !GetAtt CustomerAccountingServiceQueue.Arn # Protocol: sqs # RawMessageDelivery: true # TopicArn: !Ref RideCompletionTopic # CustomerNotificationServiceQueue: # Type: AWS::SQS::Queue # CustomerNotificationServiceQueuePolicy: # Type: AWS::SQS::QueuePolicy # Properties: # Queues: # - !Ref CustomerNotificationServiceQueue # PolicyDocument: # Statement: # Effect: Allow # Principal: '*' # Action: sqs:SendMessage # Resource: '*' # Condition: # ArnEquals: # aws:SourceArn: !Ref RideCompletionTopic # CustomerNotificationServiceQueueToRidesTopicSubscription: # Type: AWS::SNS::Subscription # Properties: # Endpoint: !GetAtt CustomerNotificationServiceQueue.Arn # Protocol: sqs # RawMessageDelivery: true # TopicArn: !Ref RideCompletionTopic # ExtraordinaryRidesServiceQueue: # Type: AWS::SQS::Queue # ExtraordinaryRidesServiceQueuePolicy: # Type: AWS::SQS::QueuePolicy # Properties: # Queues: # - !Ref ExtraordinaryRidesServiceQueue # PolicyDocument: # Statement: # Effect: Allow # Principal: '*' # Action: sqs:SendMessage # Resource: '*' # Condition: # ArnEquals: # aws:SourceArn: !Ref RideCompletionTopic # ExtraordinaryRidesServiceQueueToRidesTopicSubscription: # Type: AWS::SNS::Subscription # Properties: # Endpoint: !GetAtt ExtraordinaryRidesServiceQueue.Arn # Protocol: sqs # RawMessageDelivery: true # TopicArn: !Ref RideCompletionTopic # FilterPolicy: { "fare": [{"numeric": [">=", 50]}], "distance": [{"numeric": [">=", 20]}] } 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 UnicornManagementServiceApiSubmitRideCompletionEndpoint: Description: "API Gateway endpoint URL for Prod stage for SubmitRideCompletion function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/submit-ride-completion/" SubmitRideCompletionFunction: Description: "SubmitRideCompletionFunction Lambda Function ARN" Value: !GetAtt SubmitRideCompletionFunction.Arn CustomerAccountingService: Description: "CustomerAccountingService Lambda Function ARN" Value: !GetAtt CustomerAccountingService.Arn CustomerNotificationService: Description: "CustomerNotificationService Lambda Function ARN" Value: !GetAtt CustomerNotificationService.Arn ExtraordinaryRidesService: Description: "ExtraordinaryRidesService Lambda Function ARN" Value: !GetAtt ExtraordinaryRidesService.Arn RidesTable: Description: "Rides table id" Value: !Ref RidesTable # CustomerAccountingServiceQueue: # Description: "Amazon SQS queue ARN for the CustomerAccounting service queue" # Value: !Ref CustomerAccountingServiceQueue # CustomerNotificationServiceQueue: # Description: "Amazon SQS queue ARN for the CustomerNotification service queue" # Value: !Ref CustomerNotificationServiceQueue # ExtraordinaryRidesServiceQueue: # Description: "Amazon SQS queue ARN for the ExtraordinaryRides service queue" # Value: !Ref ExtraordinaryRidesServiceQueue