在AWS上使用AWS Batch入门(测试版)
先决条件
本教程页面需要先完成之前的教程:
目标
在本教程结束时,您将配置好本地环境,以便在AWS Batch上使用Cromwell运行工作流。
让我们开始吧!
要在AWS上使用CloudFormation创建运行Cromwell服务器所需的所有资源,请启动Cromwell全栈部署。或者,本页将详细介绍使用AWS Batch配置和运行本地Cromwell服务器的具体步骤。
使用AWS认证本地Cromwell服务器
让本地Cromwell服务器与AWS通信的最简单方法是:
Cromwell可以通过默认的身份验证提供程序访问这些凭证。如需更多选项,请参阅下方的配置Cromwell与AWS的身份验证章节。
配置AWS环境
接下来您需要在AWS账户中进行以下设置: - 核心资源集(S3存储桶、IAM角色、AWS Batch) - 带有Cromwell附加组件的自定义计算资源(启动模板或AMI)
有关设置AWS环境以与Cromwell正常配合工作的信息和说明,请参阅AWS for Genomics Workflow。通过部署AWS提供的CloudFormation模板,堆栈将输出Cromwell配置中使用的S3存储桶名称和两个AWS Batch队列ARN(默认队列和高优先级队列)。
配置Cromwell
现在我们将通过更新*.conf文件来配置Cromwell使用刚刚创建的AWS资源,使其在运行时使用AWSBackend。这需要提供三部分信息:
- 您的资源部署所在的AWS区域。
- Cromwell将存储其执行文件的S3存储桶名称。
- 您希望用于任务的AWS Batch队列的ARN。
您可以在以下配置中替换占位符(、 和 ):
aws.conf
include required(classpath("application"))
aws {
application-name = "cromwell"
auths = [
{
name = "default"
scheme = "default"
}
]
region = "<your-region>"
}
engine {
filesystems {
s3.auth = "default"
}
}
backend {
default = "AWSBatch"
providers {
AWSBatch {
actor-factory = "cromwell.backend.impl.aws.AwsBatchBackendLifecycleActorFactory"
config {
numSubmitAttempts = 6
numCreateDefinitionAttempts = 6
// Base bucket for workflow executions
root = "s3://<your-s3-bucket-name>/cromwell-execution"
// A reference to an auth defined in the `aws` stanza at the top. This auth is used to create
// Jobs and manipulate auth JSONs.
auth = "default"
default-runtime-attributes {
queueArn: "<your arn here>"
}
filesystems {
s3 {
// A reference to a potentially different auth for manipulating files via engine functions.
auth = "default"
}
}
}
}
}
}
如需了解更多关于此配置或如何更改AWS Batch行为的信息,请访问AWS Backend页面。
工作流源文件
最后,创建一个示例工作流来运行。我们将定义一个简单的工作流,它会将字符串echo到控制台并将结果返回给Cromwell。在AWS Batch(与其他云服务提供商类似)中,我们需要为每个任务指定一个Docker容器。
hello.wdl
task hello {
String addressee = "Cromwell"
command {
echo "Hello ${addressee}! Welcome to Cromwell . . . on AWS!"
}
output {
String message = read_string(stdout())
}
runtime {
docker: "ubuntu:latest"
}
}
workflow wf_hello {
call hello
output { hello.message }
}
运行Cromwell和AWS
假设所有文件都在同一个目录下,我们可以通过以下命令运行工作流:
注意: 您在此处看到的Cromwell版本号可能不同
java -Dconfig.file=aws.conf -jar cromwell-36.jar run hello.wdl
这将:
1. 以run模式启动Cromwell,
2. 将hello.wdl准备为作业并提交到您的AWS Batch队列。您可以在AWS Batch dashboard中监控作业。
3. 运行作业,将执行文件写回S3,并向Cromwell报告进度。
输出
工作流日志的末尾应报告工作流输出。
[info] SingleWorkflowRunnerActor workflow finished with status 'Succeeded'.
{
"outputs": {
"wf_hello.hello.message": "Hello World! Welcome to Cromwell . . . on AWS!"
},
"id": "08213b40-bcf5-470d-b8b7-1d1a9dccb10e"
}
成功!
后续步骤
你可能会对以下教程和指南感兴趣,可以接下来学习: