schedulelambda/cfn.yaml (94 lines of code) (raw):
AWSTemplateFormatVersion: '2010-09-09'
Description: Push Notifications Schedule for YAML
Parameters:
Stack:
Description: Stack name
Type: String
App:
Description: Application name
Type: String
Stage:
Description: Stage name
Type: String
AllowedValues:
- CODE
- PROD
DeployBucket:
Description: Bucket where RiffRaff uploads artifacts on deploy
Type: String
Resources:
MobileNotificationsScheduleRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: sts:AssumeRole
Path: /
Policies:
- PolicyName: logs
PolicyDocument:
Statement:
Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
- cloudwatch:putMetricData
Resource: "*"
- PolicyName: config
PolicyDocument:
Statement:
Action:
- ssm:GetParametersByPath
Effect: Allow
Resource: !Sub arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/notifications/${Stage}/${Stack}
- PolicyName: dynamo
PolicyDocument:
Statement:
Effect: Allow
Action:
- "dynamodb:GetItem"
- "dynamodb:PutItem"
- "dynamodb:UpdateItem"
- "dynamodb:Query"
- "dynamodb:Scan"
Resource:
- !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${App}-${Stage}-${Stack}
- !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${App}-${Stage}-${Stack}/index/due_epoch_s_and_sent
MobileNotificationsScheduleFunction:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: !Ref DeployBucket
S3Key: !Sub ${Stack}/${Stage}/${App}/${App}.jar
Description: Process push notifications scheduled by now
Environment:
Variables:
Stage: !Ref Stage
Stack: !Ref Stack
App: !Ref App
FunctionName: !Sub ${Stack}-${App}-${Stage}
Handler: com.gu.notificationschedule.ProcessNotificationScheduleLambda::apply
MemorySize: 1024
ReservedConcurrentExecutions: 1
Role: !GetAtt MobileNotificationsScheduleRole.Arn
Runtime: java11
Timeout: 300
MobileNotificationsScheduleEventRule:
Type: AWS::Events::Rule
Properties:
ScheduleExpression: rate(1 minute)
Targets:
- Id: MobileNotificationsScheduleEventRuleTarget
Arn: !GetAtt MobileNotificationsScheduleFunction.Arn
MobileNotificationsScheduleEventPermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt MobileNotificationsScheduleFunction.Arn
Action: lambda:InvokeFunction
Principal: events.amazonaws.com
SourceArn: !GetAtt MobileNotificationsScheduleEventRule.Arn