fakebreakingnewslambda/fakebreakingnewslambda-cfn.yaml (140 lines of code) (raw):
AWSTemplateFormatVersion: 2010-09-09
Description: Emits fake breaking news
Parameters:
App:
Description: App name
Type: String
Default: fakebreakingnews
AllowedValues:
- fakebreakingnews
Stack:
Description: Stack name
Type: String
Default: mobile-notifications
Stage:
Description: Stage name
Type: String
AllowedValues:
- CODE
- PROD
Default: CODE
DeployBucket:
Description: Bucket where RiffRaff uploads artifacts on deploy
Type: String
Default: mobile-notifications-dist
AlarmTopic:
Type: String
Description: The ARN of the SNS topic to send all the cloudwatch alarms to
Resources:
ExecutionRole:
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
Resource: !Sub "arn:aws:logs:eu-west-1:${AWS::AccountId}:*"
- Effect: Allow
Action:
- logs:CreateLogStream
- logs:PutLogEvents
Resource:
- !Sub "arn:aws:logs:eu-west-1:${AWS::AccountId}:log-group:/aws/lambda/${Stack}-${App}-${Stage}:*"
- PolicyName: Conf
PolicyDocument:
Statement:
- Action: ssm:GetParametersByPath
Effect: Allow
Resource:
!Sub arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/notifications/${Stage}/fakebreakingnews
FakeBreakingNewsFunction:
DependsOn:
- ExecutionRole
Type: AWS::Lambda::Function
Properties:
FunctionName: !Sub ${Stack}-${App}-${Stage}
Code:
S3Bucket:
Ref: DeployBucket
S3Key: !Sub ${Stack}/${Stage}/fakebreakingnewslambda/fakebreakingnewslambda.jar
Environment:
Variables:
Stage: !Ref Stage
Stack: !Ref Stack
App: !Ref App
Description: Sends a fake breaking news
Handler: fakebreakingnews.FakeBreakingNewsLambda::handleRequest
MemorySize: 1024
Role: !GetAtt ExecutionRole.Arn
Runtime: java11
Timeout: 300
Tags:
- Key: Stage
Value: !Ref Stage
- Key: Stack
Value: !Ref Stack
- Key: App
Value: !Ref App
FakeBreakingNewsScheduleEventRule:
DependsOn:
- FakeBreakingNewsFunction
Type: AWS::Events::Rule
Properties:
ScheduleExpression: "cron(5 * * * ? *)"
Targets:
- Id: !Sub ${Stack}-${App}-${Stage}
Arn: !GetAtt FakeBreakingNewsFunction.Arn
FakeBreakingNewsScheduleEventPermission:
DependsOn:
- FakeBreakingNewsFunction
- FakeBreakingNewsScheduleEventRule
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt FakeBreakingNewsFunction.Arn
Action: lambda:InvokeFunction
Principal: events.amazonaws.com
SourceArn: !GetAtt FakeBreakingNewsScheduleEventRule.Arn
NotEnoughIosFakeBreakingNewsAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmActions: [!Ref AlarmTopic]
OKActions: [!Ref AlarmTopic]
AlarmDescription: !Sub Triggers if not enough Ios dry run notifications are happening on ${Stage}
ComparisonOperator: LessThanThreshold
Dimensions:
- Name: platform
Value: ios
EvaluationPeriods: 1
MetricName: dryrun
Namespace: !Sub Notifications/${Stage}/workers
Period: 7200
Statistic: Sum
Threshold: 1
TreatMissingData: breaching
NotEnoughAndroidFakeBreakingNewsAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmActions: [!Ref AlarmTopic]
OKActions: [!Ref AlarmTopic]
AlarmDescription: !Sub Triggers if not enough Android dry run notifications are happening on ${Stage}
ComparisonOperator: LessThanThreshold
Dimensions:
- Name: platform
Value: android
EvaluationPeriods: 1
MetricName: dryrun
Namespace: !Sub Notifications/${Stage}/workers
Period: 7200
Statistic: Sum
Threshold: 1
TreatMissingData: breaching