mobile-save-for-later-user-deletion/conf/cfn.yaml (152 lines of code) (raw):

AWSTemplateFormatVersion: '2010-09-09' Description: Removes save-for-later data when a user deletes their account Parameters: Stack: Description: Stack name Type: String Default: mobile Stage: Description: Stage name Type: String AllowedValues: - CODE - PROD App: Description: Application name Type: String Default: mobile-save-for-later-user-deletion SaveForLaterApp: Description: Application name of main sfl applcation Type: String Default: mobile-save-for-later DeployBucket: Description: S3 bucket where riff-raff uploads artifacts on deploy Type: String Default: mobile-dist IdentityDeleteUserSnsTopicArnBase: Description: base form (sans platform) of the identity-account user deletion SNS Type: String Resources: UserDeletionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: Effect: Allow Action: sts:AssumeRole Principal: Service: - lambda.amazonaws.com Path: / Policies: - PolicyName: dynamo-access PolicyDocument: Statement: Effect: Allow Action: - dynamodb:* Resource: - !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/mobile-save-for-later-${Stage}-articles - PolicyName: logging PolicyDocument: Statement: Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: "*" - PolicyName: invoke-lambda PolicyDocument: Statement: Effect: Allow Action: - lamda:InvokeFunction Resource: - !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${App}-${Stage} - PolicyName: sqs-read PolicyDocument: Statement: Effect: Allow Action: - sqs:ReceiveMessage - sqs:DeleteMessage - sqs:GetQueueAttributes Resource: - !GetAtt UserIdDeleteQueue.Arn UserIdDeletionQueuePolicy: Type: AWS::SQS::QueuePolicy Properties: PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: AWS: "*" Action: - sqs:SendMessage Resource: !GetAtt UserIdDeleteQueue.Arn Condition: ArnEquals: aws:SourceArn: !Sub ${IdentityDeleteUserSnsTopicArnBase}-${Stage} Queues: - !Ref UserIdDeleteQueue UserIdDeleteQueue: Type: AWS::SQS::Queue Properties: QueueName: !Sub UserIdDeleteQueue-${Stage} VisibilityTimeout: 300 RedrivePolicy: deadLetterTargetArn: !GetAtt UserIdDeletionDeadLetterQueue.Arn maxReceiveCount: 3 UserIdDeletionDeadLetterQueue: Type: AWS::SQS::Queue Properties: QueueName: !Sub UserIdDeleteQueue-deadletter-${Stage} UserDeletionQueueDepthAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmDescription: "Ensure that the user ids are being deleted by the user deletion lambda" Namespace: "AWS/SQS" MetricName: ApproximateNumberOfMessagesVisible Dimensions: - Name: QueueName Value: !GetAtt 'UserIdDeleteQueue.QueueName' Period: 3600 Statistic: Sum EvaluationPeriods: 1 ComparisonOperator: GreaterThanThreshold Threshold: 100 AlarmActions: - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:mobile-server-side InsufficientDataActions: - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:mobile-server-side OKActions: - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:mobile-server-side UserDeletionLambda: Type: AWS::Lambda::Function Properties: FunctionName: !Sub ${App}-${Stage} Code: S3Bucket: Ref: DeployBucket S3Key: !Sub ${Stack}/${Stage}/${App}/${App}.jar Environment: Variables: App: !Sub ${App} Stack: !Sub ${Stack} Stage: !Sub ${Stage} SaveForLaterApp: !Sub ${SaveForLaterApp} Description: Lamba that deletes saved for later data for deleted users Handler: com.gu.sfl.userdeletion.UserDeletionLambda::handler MemorySize: 512 Role: !GetAtt UserDeletionRole.Arn Runtime: java21 Timeout: 300 UserDeletionEventSource: Type: AWS::Lambda::EventSourceMapping Properties: FunctionName: !Ref UserDeletionLambda Enabled: true EventSourceArn: !GetAtt UserIdDeleteQueue.Arn BatchSize: 5