cloudformation/proxy-stats-gathering.yaml (136 lines of code) (raw):
AWSTemplateFormatVersion: '2010-09-09'
Description: Proxy stats gathering app for ArchiveHunter
Parameters:
App:
Type: String
Description: Application identifier for RiffRaff
Default: archivehunter
Stack:
Type: String
Description: Stack identifier for RiffRaff
Default: multimedia
Stage:
Type: String
AllowedValues:
- CODE
- DEV
- PROD
Description: Deployment stage
ESHost:
Description: Elasticsearch hostname
Type: String
ProblemsIndexName:
Type: String
Description: Name of an elasticsearch index to output problem items to
IndexName:
Type: String
Description: ES index name
ProxiesTable:
Type: String
Description: ARchiveHunter proxies table in dynamodb
AppContainerImage:
Type: String
Description: Docker image containing the app
Resources:
AppTaskLogGroup:
Type: AWS::Logs::LogGroup
Properties:
RetentionInDays: 5
AppRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: ecs-tasks.amazonaws.com
Action: sts:AssumeRole
Path: "/"
Policies:
- PolicyName: LogsAccess
PolicyDocument:
Version: 2012-10-17
Statement:
Effect: Allow
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
- "logs:DescribeLogStreams"
Resource:
- !Sub arn:aws:logs:${AWS::Region}:${AWS::AccountId}:*
- PolicyName: DynamoAccess
PolicyDocument:
Version: 2012-10-17
Statement:
Effect: Allow
Action:
- dynamodb:GetItem
- dynamodb:Query
- dynamodb:Scan
- dynamodb:DescribeTable
Resource:
- !Sub arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${ProxiesTable}
- PolicyName: S3Access
PolicyDocument:
Version: 2012-10-17
Statement:
Effect: Allow
Action:
- s3:GetObject
- s3:HeadObject
- s3:HeadBucket
Resource: "*"
- PolicyName: ImageDownloadAccess
PolicyDocument:
Version: 2012-10-17
Statement:
Effect: Allow
Action:
- "ecr:BatchCheckLayerAvailability"
- "ecr:BatchGetImage"
- "ecr:GetDownloadUrlForLayer"
- "ecr:GetAuthorizationToken"
Resource: "*"
AppTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
ExecutionRoleArn: !GetAtt AppRole.Arn
ContainerDefinitions:
- Image: !Ref AppContainerImage #specified in "resources"
MemoryReservation: 4096 #this is the limit of memory rather than the actual amount allocated
Name: !Sub ${Stack}-${App}Proxy-${Stage}
Environment:
- Name: INDEX_NAME
Value: !Ref IndexName
- Name: ES_HOST_NAME
Value: !Ref ESHost
- Name: PROXIES_TABLE_NAME
Value: !Ref ProxiesTable
- Name: ELASTICSEARCH_SSL
Value: true
- Name: PROBLEMS_INDEX_NAME
Value: !Ref ProblemsIndexName
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-group: !Ref AppTaskLogGroup
awslogs-region: !Ref AWS::Region
awslogs-stream-prefix: ecs
Cpu: 4096 #4 vCPU
NetworkMode: awsvpc
Memory: 8192 #minimum allowed with 4 vCPU
RequiresCompatibilities:
- FARGATE
TaskRoleArn: !GetAtt AppRole.Arn
Outputs:
TaskDefinitionArn:
Description: ARN of the created ECS task definition
Value: !Ref AppTaskDefinition
AppContainerName:
Description: Container name for the app, needed when applying customisations
Value: !Sub ${Stack}-${App}Proxy-${Stage} #keep in-sync with AppTaskDefinition.Properties.ContainerDefinitions[0].Name
LogGroupName:
Description: Log group name for the ECS task
Value: !Ref AppTaskLogGroup