AWSTemplateFormatVersion: "2010-09-09" Description: >- (WWPS-GLS-WF-LT) Creates an EC2 Launch Template for AWS Batch based genomics workflows Mappings: ScratchMountPointMap: step-functions: mountpoint: "/var/lib/docker" cromwell: mountpoint: "/var/lib/docker" nextflow: mountpoint: "/var/lib/docker" TagMap: default: architecture: "genomics-workflows" solution: "default" tags: - Key: "architecture" Value: "genomics-workflows" - Key: "solution" Value: "default" ECSAdditionsMap: step-functions: additions: |- - stop ecs - service docker stop - cp -au /var/lib/docker /var/lib/docker.bk - rm -rf /var/lib/docker/* - cd /opt && wget $artifactRootUrl/get-amazon-ebs-autoscale.sh - sh /opt/get-amazon-ebs-autoscale.sh - sh /opt/amazon-ebs-autoscale/install.sh $scratchPath /dev/sdc > /var/log/ebs-autoscale-install.log 2>&1 - sed -i 's+OPTIONS=.*+OPTIONS="--storage-driver btrfs"+g' /etc/sysconfig/docker-storage - cp -au /var/lib/docker.bk/* /var/lib/docker - cd /opt && wget $artifactRootUrl/aws-ecs-additions.tgz && tar -xzf aws-ecs-additions.tgz - sh /opt/ecs-additions/ecs-additions-step-functions.sh - service docker start - start ecs cromwell: additions: |- - stop ecs - service docker stop - cp -au /var/lib/docker /var/lib/docker.bk - rm -rf /var/lib/docker/* - cd /opt && wget $artifactRootUrl/get-amazon-ebs-autoscale.sh - sh /opt/get-amazon-ebs-autoscale.sh - sh /opt/amazon-ebs-autoscale/install.sh $scratchPath /dev/sdc > /var/log/ebs-autoscale-install.log 2>&1 - sed -i 's+OPTIONS=.*+OPTIONS="--storage-driver btrfs"+g' /etc/sysconfig/docker-storage - cp -au /var/lib/docker.bk/* /var/lib/docker - cd /usr/local/bin && curl --retry 5 --retry-connrefused $artifactRootUrl/fetch_and_run.sh" -o "fetch_and_run.sh" && chmod a+x ./fetch_and_run.sh - service docker start - start ecs nextflow: additions: |- - stop ecs - service docker stop - cp -au /var/lib/docker /var/lib/docker.bk - rm -rf /var/lib/docker/* - cd /opt && wget $artifactRootUrl/get-amazon-ebs-autoscale.sh - sh /opt/get-amazon-ebs-autoscale.sh - sh /opt/amazon-ebs-autoscale/install.sh $scratchPath /dev/sdc > /var/log/ebs-autoscale-install.log 2>&1 - sed -i 's+OPTIONS=.*+OPTIONS="--storage-driver btrfs"+g' /etc/sysconfig/docker-storage - cp -au /var/lib/docker.bk/* /var/lib/docker - cd /opt && wget $artifactRootUrl/aws-ecs-additions.tgz && tar -xzf aws-ecs-additions.tgz - sh /opt/ecs-additions/ecs-additions-nextflow.sh - service docker start - start ecs Parameters: LaunchTemplateNamePrefix: Type: String Default: genomics-workflow Description: Name of the launch template. This will be made unique using the Stack ID. ScratchVolumeSize: Type: Number Default: 20 Description: The initial size of the scratch volume (GB) DockerImageAndMetadataVolumeSize: Type: Number Default: 75 Description: The size of the volume Docker will use for image and metadata storage (GB) WorkflowOrchestrator: Type: String Description: The workflow orchestration engine you will use Default: step-functions AllowedValues: - step-functions - cromwell - nextflow ArtifactRootUrl: Type: String Default: https://s3.amazonaws.com/aws-genomics-workflows/artifacts Description: >- Root URL for where artifacts / additions scripts are stored Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: "Required" Parameters: - WorkflowOrchestrator - LaunchTemplateNamePrefix - Label: default: "Optional" Parameters: - ScratchVolumeSize - DockerImageAndMetadataVolumeSize Resources: EC2LaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateName: !Join ["-", [!Ref LaunchTemplateNamePrefix, !Select [2, !Split ["/", !Ref "AWS::StackId" ]]]] LaunchTemplateData: TagSpecifications: - ResourceType: instance Tags: - Key: architecture Value: !FindInMap ["TagMap", "default", "architecture"] - Key: solution Value: !Ref WorkflowOrchestrator BlockDeviceMappings: - Ebs: DeleteOnTermination: True VolumeSize: 50 VolumeType: gp2 DeviceName: /dev/xvda - Ebs: Encrypted: True DeleteOnTermination: True VolumeSize: !Ref DockerImageAndMetadataVolumeSize VolumeType: gp2 DeviceName: /dev/xvdcz - Ebs: Encrypted: True DeleteOnTermination: True VolumeSize: !Ref ScratchVolumeSize VolumeType: gp2 DeviceName: /dev/sdc UserData: Fn::Base64: !Sub - | MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==BOUNDARY==" --==BOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - jq - btrfs-progs - sed - wget - git - amazon-ssm-agent - unzip runcmd: - curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/tmp/awscliv2.zip" - unzip -q /tmp/awscliv2.zip -d /tmp - /tmp/aws/install - export scratchPath="${ScratchMountPoint}" - export artifactRootUrl="${ArtifactRootUrl}" - start amazon-ssm-agent ${ECSAdditions} --==BOUNDARY==-- - ECSAdditions: Fn::FindInMap: - ECSAdditionsMap - !Ref WorkflowOrchestrator - additions ScratchMountPoint: Fn::FindInMap: - ScratchMountPointMap - !Ref WorkflowOrchestrator - mountpoint Outputs: LaunchTemplateId: Description: >- EC2 Launch Template ID to use when creating AWS Batch compute environments for genomics workflows Value: !Ref EC2LaunchTemplate