r-builds/serverless-resources.yml
Greg Lin 4cb2d64968 Update instance types, removing memory optimized instances
The main purpose of this change is to trigger an infrastructure update for
the Batch compute environment, since changing the LaunchTemplateData doesn't
trigger that.

The instance types change is arbitrary, but memory optimized instances
aren't really necessary either.
2022-08-31 13:34:57 -05:00

327 lines
9 KiB
YAML

rBuildsBatchIamRole:
Type: AWS::IAM::Role
Properties:
Path: /service-role/
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- batch.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole
rBuildsSpotFleetIamRole:
Type: AWS::IAM::Role
Properties:
Path: /service-role/
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- spotfleet.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole
rBuildsInstanceIamRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Principal:
Service:
- 'ec2.amazonaws.com'
Action:
- 'sts:AssumeRole'
Path: '/'
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role
rBuildsIamInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: '/'
Roles:
- Ref: rBuildsInstanceIamRole
rBuildsEcsTaskIamRole:
Type: AWS::IAM::Role
Properties:
Path: /service-role/
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
Policies:
- PolicyName: 's3-r-builds-bucket'
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- s3:*
Resource:
- arn:aws:s3:::${self:custom.${self:provider.stage}.s3Bucket}
- arn:aws:s3:::${self:custom.${self:provider.stage}.s3Bucket}/*
rBuildsEcsLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateName: r-builds-${self:provider.stage}-batch-managed-ecs-larger-volume
LaunchTemplateData:
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp3
VolumeSize: 96
UserData:
Fn::Base64: |
#!/bin/bash
# Mitigate DockerTimeoutError errors from the default timeout of 4m
echo "ECS_CONTAINER_CREATE_TIMEOUT=10m" >> /etc/ecs/ecs.config
rBuildsBatchComputeEnvironment:
Type: AWS::Batch::ComputeEnvironment
DependsOn: rBuildsBatchIamRole
Properties:
Type: MANAGED
ServiceRole:
"Fn::GetAtt": [ rBuildsBatchIamRole, Arn ]
ComputeResources:
LaunchTemplate:
LaunchTemplateId:
Ref: rBuildsEcsLaunchTemplate
Version: '$Latest'
SpotIamFleetRole:
"Fn::GetAtt": [ rBuildsSpotFleetIamRole, Arn ]
SecurityGroupIds: ${self:custom.securityGroupIds}
Subnets: ${self:custom.subnets}
Type: SPOT
BidPercentage: 85
InstanceRole:
"Fn::GetAtt": [ rBuildsIamInstanceProfile, Arn ]
InstanceTypes:
- m6i
- m5
- m5a
- c6i
- c5
- c5a
Ec2KeyPair: ${self:custom.ec2KeyPair}
Tags: ${self:provider.stackTags}
MinvCpus: 0
DesiredvCpus: 0
MaxvCpus: 256
rBuildsBatchJobQueue:
Type: AWS::Batch::JobQueue
Properties:
ComputeEnvironmentOrder:
- Order: 1
ComputeEnvironment:
Ref: rBuildsBatchComputeEnvironment
State: ENABLED
Priority: 1
rBuildsBatchJobDefinitionUbuntu1804:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-1804"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionUbuntu2004:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2004"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionUbuntu2204:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionDebian10:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-10"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionDebian11:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionCentos7:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-7"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionCentos8:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-8"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionRhel9:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionOpensuse153:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-153"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionOpensuse154:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154"
Timeout:
AttemptDurationSeconds: 7200
# step function cloudwatch event trigger resources
rBuildsEventRuleIamRole:
Type: AWS::IAM::Role
Properties:
Path: /service-role/
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- events.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: 'allow-step-function-execution'
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- states:StartExecution
Resource:
Ref: RBuildsStepFunction
rBuildsEventRule:
Type: AWS::Events::Rule
Properties:
Description: Check for New R Versions
ScheduleExpression: rate(1 hour)
State: ${self:custom.${self:provider.stage}.eventRuleState}
Targets:
- Id: rbuilds
Input: '{}'
RoleArn:
Fn::GetAtt: [ rBuildsEventRuleIamRole, Arn ]
Arn:
Ref: RBuildsStepFunction
rBuildsDevelEventRule:
Type: AWS::Events::Rule
Properties:
Description: Build R-devel
ScheduleExpression: cron(0 4 * * ? *)
State: ${self:custom.${self:provider.stage}.eventRuleState}
Targets:
- Id: rbuilds
Input: '{"force": true, "versions": ["next", "devel"]}'
RoleArn:
Fn::GetAtt: [ rBuildsEventRuleIamRole, Arn ]
Arn:
Ref: RBuildsStepFunction