eventbrite-consents/cloud-formation.yaml (105 lines of code) (raw):

AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Parameters: IdapiAccessToken: Description: key used to authenticate against the identity API Type: String NoEcho: true MasterclassesOrganisation: Type: String NoEcho: true MasterclassesToken: Type: String NoEcho: true EventsOrganisation: Type: String NoEcho: true EventsToken: Type: String NoEcho: true Stage: Description: environment name Type: String AllowedValues: - DEV - PROD AlarmEmailAddress: Description: Contact email for alarms Type: String Conditions: IsProd: !Equals - !Ref Stage - PROD Mappings: IsDebugMap: DEV: value: true PROD: value: false SyncFrequencyMap: values: # syncFrequency needs to match cron cronExpression: "cron(0 0,4,8,12,16,20 * * ? *)" syncFrequencyHours: 4 Resources: TopicSendEmail: Type: AWS::SNS::Topic Properties: DisplayName: SendEmailTopic Subscription: - Endpoint: !Ref 'AlarmEmailAddress' Protocol: email EventbriteConsentsLambda: Type: AWS::Serverless::Function Properties: MemorySize: 1024 FunctionName: !Sub EventbriteConsentsLambda-${Stage} Timeout: 120 Description: Lambda to send email to user who has signed up to a newsletter via Eventbrite Environment: Variables: idapiHost: "https://idapi.theguardian.com" idapiAccessToken: !Ref IdapiAccessToken masterclassesToken: !Ref MasterclassesToken eventsToken: !Ref EventsToken masterclassesOrganisation: !Ref MasterclassesOrganisation eventsOrganisation: !Ref EventsOrganisation syncFrequencyHours: !FindInMap [SyncFrequencyMap, values, syncFrequencyHours] isDebug: !FindInMap [IsDebugMap, !Ref Stage, value] Handler: com.gu.identity.eventbriteconsents.Lambda::handler Runtime: java11 CodeUri: Bucket: identity-lambda Key: !Sub identity/${Stage}/eventbrite-consents-lambda/main.jar ScheduledRule: Type: AWS::Events::Rule Properties: Description: "ScheduledRule" ScheduleExpression: !FindInMap [SyncFrequencyMap, values, cronExpression] State: "ENABLED" Targets: - Arn: !GetAtt EventbriteConsentsLambda.Arn Id: "eventbriteconsentslambda" PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref EventbriteConsentsLambda Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt ScheduledRule.Arn EventbriteConsentsLambdaErrorAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmName: !Sub 'eventbrite-consents-lambda-${Stage} failed execution' AlarmDescription: Alert when eventbrite consents lambda errors Namespace: AWS/Lambda Dimensions: - Name: FunctionName Value: !Ref 'EventbriteConsentsLambda' MetricName: Errors Statistic: Sum ComparisonOperator: GreaterThanOrEqualToThreshold Threshold: '2' Period: '36000' # 10 hours in seconds EvaluationPeriods: '1' AlarmActions: - !If [IsProd, !Ref 'TopicSendEmail', !Ref 'AWS::NoValue']