AWSTemplateFormatVersion: "2010-09-09" Description: ALB access log to JSON , ELB 5XX to CWlogs Resources: S3bucketAccesslog: DependsOn: LambdaInvokePermission Type: AWS::S3::Bucket DeletionPolicy: Delete Properties: BucketName: !Sub "${AWS::StackName}-s3-accesslog-${AWS::Region}-${AWS::AccountId}" LifecycleConfiguration: Rules: - Id: AutoDelete Status: Enabled ExpirationInDays: 1 NotificationConfiguration: LambdaConfigurations: - Function: !GetAtt "LambdaFunction.Arn" Event: s3:ObjectCreated:* LambdaInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: !GetAtt "LambdaFunction.Arn" Action: lambda:InvokeFunction Principal: "s3.amazonaws.com" SourceAccount: !Ref "AWS::AccountId" SourceArn: !Sub "arn:aws:s3:::${AWS::StackName}-s3-accesslog-${AWS::Region}-${AWS::AccountId}" LogGroupLambda: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${LambdaFunction}" RetentionInDays: 7 LambdaRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Path: / Policies: - PolicyName: root PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Resource: "*" - Effect: Allow Action: - s3:GetObject Resource: !Sub "arn:aws:s3:::${AWS::StackName}-s3-accesslog-${AWS::Region}-${AWS::AccountId}/*" - Effect: Allow Action: - ec2:DescribeNetworkInterfaces Resource: "*" LambdaFunction: Type: AWS::Lambda::Function Properties: Handler: index.lambda_handler Role: !GetAtt "LambdaRole.Arn" Code: ZipFile: !Sub | import json import re from datetime import datetime import boto3 import os import urllib.parse import gzip s3 = boto3.client('s3') ec2 = boto3.client('ec2') firehose = boto3.client('firehose') RE_TEXT = r""" ^(?P[^ ]*)\u0020 (?P