标签: aws-batch

AWS Lambda / Aws批处理工作流程

我写了一个从s3存储桶触发的lambda,以解压缩zip文件并处理其中的文本文档。由于lambda内存的限制,我需要将流程移至类似AWS Batch的位置。如果我错了,请纠正我,但我的工作流程应如下所示。

工作流程

我相信我需要编写一个lambda来将s3存储桶的位置放在亚马逊SQS上,因为AWS批处理可以读取该位置并进行所有解压缩/数据处理,因为它们的内存更大。

这是我当前的lambda,它接收由s3存储桶触发的事件,检查它是否是一个zip文件,然后将该s3键的名称推送到SQS。我应该告诉AWS Batch在我的lambda中开始读取队列吗?一般而言,我对AWS完全陌生,不确定从这里开始。

public class dockerEventHandler implements RequestHandler<S3Event, String> {

private static BigData app = new BigData();
private static DomainOfConstants CONST = new DomainOfConstants();
private static Logger log = Logger.getLogger(S3EventProcessorUnzip.class);

private static AmazonSQS SQS;
private static CreateQueueRequest createQueueRequest;
private static Matcher matcher;
private static String srcBucket, srcKey, extension, myQueueUrl;

@Override
public String handleRequest(S3Event s3Event, Context context) 
{
    try {
        for (S3EventNotificationRecord record : s3Event.getRecords())
        {
            srcBucket = record.getS3().getBucket().getName();
            srcKey = record.getS3().getObject().getKey().replace('+', ' ');
            srcKey = URLDecoder.decode(srcKey, "UTF-8"); …
Run Code Online (Sandbox Code Playgroud)

java workflow amazon-s3 amazon-web-services aws-batch

6
推荐指数
1
解决办法
5441
查看次数

AWS CloudWatch 规则以 AWS 批处理作为目标返回 FailedInvocation

嗨,我已经安排了一个 Cloudwatch规则,以便通过将 AWS Batch 作为目标在每周三 GTM 14.15 运行,它总是返回FailedInvocation。我看到来自关联指标的 FailedInvocation 事件

但是没有关于错误的日志,我无法理解这个问题。

我遵循了本教程:https : //docs.aws.amazon.com/batch/latest/userguide/batch-cwe-target.html 我从几个小时就被困在这里有什么建议吗?

配置

AWS 批处理目标配置如下:

  • 作业队列= arn:..
  • 工作定义 = arn:...
  • 职位名称 =姓名

与目标关联的角色具有以下策略:

  • arn:aws:iam::aws:policy/service-role/AWSBatchServiceEventTargetRole

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob"
            ],
            "Resource": "*"
        }
      ]
      }
    
    Run Code Online (Sandbox Code Playgroud)
  • arn:aws:iam::216314997889:role/awsInvokeActionOnEc2

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:Describe*",
                "ec2:Describe*",
                "ec2:RebootInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "*"
        }
    ]
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 信任关系

    {
    "Version": "2012-10-17",
    "Statement": …
    Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cloudwatch amazon-cloudwatch-metrics aws-batch

6
推荐指数
1
解决办法
2180
查看次数

将弹性文件系统挂载到AWS Batch Computer Enviroment

我正在尝试将我的弹性文件系统(EFS)安装在我的docker容器中,以便它可以与AWS批处理一起使用.这是我做的:

  1. 创建针对弹性容器服务(ECS)进行了优化的新AMI.我在这里遵循了这个指南,以确保它有ECS.我还将mount挂载到/etc/fstab文件中,并在重启后验证我的EFS是否正在挂载(/ mnt/efs).

  2. 用我的新AMI测试了EC2实例并验证我可以拉出docker容器并通过它传递我的挂载点

docker run --volume /mnt/efs:/home/efs -it mycontainer:latest

以交互方式运行docker镜像会在efs中显示我的数据

  1. 使用我的新AMI 设置新的计算环境,该AMI在引导时安装EFS.

  2. 创建JOB定义文件:

    {
    "jobDefinitionName": "MyJobDEF",
    "jobDefinitionArn": "arn:aws:batch:us-west-2:#######:job-definition/Submit:8",
    "revision": 8,
    "status": "ACTIVE",
    "type": "container",
    "parameters": {},
    "retryStrategy": {
        "attempts": 1
    },
    "containerProperties": {
        "image": "########.ecr.us-west-2.amazonaws.com/mycontainer",
        "vcpus": 1,
        "memory": 100,
        "command": [
            "ls",
            "/home/efs",
        ],
        "volumes": [
            {
                "host": {
                    "sourcePath": "/mnt/efs"
                },
                "name": "EFS"
            }
        ],
        "environment": [],
        "mountPoints": [
            {
                "containerPath": "/home/efs",
                "readOnly": false,
                "sourceVolume": "EFS"
            }
        ],
        "ulimits": []
    } …
    Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs docker aws-batch

6
推荐指数
1
解决办法
665
查看次数

AWS Step 无法正确调用具有复杂参数的 AWS Batch 作业

我有一个现有的 AWS Steps 编排,它通过 lambdas 执行 AWS Batch 作业。但是,AWS 最近添加了从一个步骤直接调用其他服务(如 AWS Batch)的功能。我很想使用这个新功能,但无法让它工作。

https://docs.aws.amazon.com/step-functions/latest/dg/connectors-batch.html

所以我想用来调用 Batch 的新步骤操作。

"File Copy": {
  "Type": "Task",
  "Resource": "arn:aws:states:::batch:submitJob.sync",
  "Parameters": {
     "JobName": "MyBatchJob",
     "JobQueue": "MySecondaryQueue",
     "ContainerOverrides.$": "$.lts_job_container_overrides",
     "JobDefinition.$": "$.lts_job_job_definition",
  },
  "Next": "Upload Start"
}
Run Code Online (Sandbox Code Playgroud)

请注意,我正在尝试使用 $. JSONpath 语法,以便动态地通过步骤传递参数。

当给出以下输入时

"lts_job_container_overrides": {
  "environment": [
    {
      "name": "MY_ENV_VARIABLE",
      "value": "XYZ"
    },
  ],
  "command": [
    "/app/file_copy.py"
  ]
},
"lts_job_job_definition": "MyBatchJobDefinition"
Run Code Online (Sandbox Code Playgroud)

我预计环境和命令值将传递给 AWS Batch 中的相应参数 (ContainerOverrides)。相反,AWS Steps 似乎试图将它们提升为顶级参数 - 然后抱怨它们无效。

{
 "error": "States.Runtime",
 "cause": "An error occurred while executing the …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-step-functions aws-batch

6
推荐指数
1
解决办法
2327
查看次数

如何检查 AWS Batch 作业的内存和 CPU 使用率

在创建批处理作业时,我们可以在容器属性中提供vCPU内存

在 cloudwatch 中,我们可以在每个集群的Elastic Container Service下检查每个集群的内存和 CPU 使用情况。

有没有办法检查每个作业的内存和 CPU 使用率?

amazon-web-services amazon-cloudwatch aws-batch

6
推荐指数
1
解决办法
1605
查看次数

AWS Batch 作业卡在可运行状态

我正在尝试运行 100 个节点的 AWS Batch 作业,当我将计算环境设置为仅使用m4.xlargem5.xlarge实例时,一切正常,并且我的作业被拾取并运行。

但是,当我开始在我的计算环境中包含其他实例类型(例如 )时m5.2xlarge,作业会runnable无限期地停留在该状态。我在这些更新中更改的唯一变量是计算环境中的实例类型。

当我在计算环境中包含其他实例类型时,我不确定是什么导致无法完成这项工作。在计算环境参数的文档中,唯一的说明是:

创建计算环境时,您为计算环境选择的实例类型必须共享相同的架构。例如,您不能在同一计算环境中混合使用 x86 和 ARM 实例。

JobDefinition是多节点:

  • 节点 0
    • vCPU:1
    • 内存:15360 MiB
  • 节点 1:
    • vCPU:2
    • 内存:15360 MiB

我的计算环境最大 vCPUs 设置为10,000,始终处于VALID状态并且始终处于ENABLED。另外我的 EC2 vCPU 限制是6,000. CloudWatch 不提供任何日志,因为作业尚未启动,我不确定在这里还可以尝试什么。我也没有使用optimal实例类型的设置,因为我遇到了没有获得足够实例的问题。

amazon-web-services aws-batch

6
推荐指数
1
解决办法
520
查看次数

Step Function 中的 AWS Batch 作业执行结果

我是 AWS Step Functions 和 AWS Batch 的新手。我正在尝试将 AWS Batch Job 与 Step Function 集成。AWS Batch Job 执行输出字符串值的简单 python 脚本(高级简化要求)。我需要让 python 脚本输出可用于步骤函数的下一个状态。我应该如何才能完成这个任务。AWS Batch 作业输出不包含 python 脚本的结果。相反,它包含所有与输入值相关的容器信息。

示例:AWS Batch Job 执行输出“Hello World”的 python 脚本。我需要“Hello World”可用于步骤函数的下一个状态,以执行与其关联的 lambda。

python amazon-web-services aws-step-functions aws-batch

6
推荐指数
1
解决办法
6978
查看次数

创建将UserData传递到容器实例的AWS Batch托管计算环境

我想为AWS Batch创建一个托管计算环境,但是使用EC2用户数据来配置实例,因为这些实例被引入Batch计划在其上进行作业的ECS机群。

没关系,但是User Data脚本的目的是将大型数据文件下拉到Docker容器将引用的InstanceStore上。

在ECS中,这是可能的,但是我找不到将用户数据传递到托管批处理计算环境的方法。

最多只能指定AMI。但是,由于我们要使用Managed,因此必须使用Amazon ECS-optimized AMI

我更喜欢使用EC2用户数据作为解决方案,因为它为我们希望执行的任何其他引导提供了切入点。但是我愿意接受其他黑客或解决方案,只要它们适用于托管计算环境

amazon-ec2 amazon-web-services amazon-ecs docker aws-batch

5
推荐指数
1
解决办法
421
查看次数

有没有办法在AWS Batch作业上设置挂机时间?

有没有办法为AWS Batch作业(或队列)设置最长运行时间?这是大多数批处理管理器中的标准设置,可避免因任何原因挂起作业时浪费资源.

scientific-computing batch-processing amazon-web-services aws-batch

5
推荐指数
1
解决办法
436
查看次数

在 ECS 与 AWS Batch 之间进行选择

AWS Batch 文档称它基于 ECS。

那么我们为什么不直接使用ECS呢?AWS Batch 提供了哪些 ECS 所不具备的紧迫优势?

两者都提供自动缩放功能。jbos 的排队和优先级是 AWS Batch 的唯一优势吗?

amazon-web-services amazon-ecs aws-batch

5
推荐指数
1
解决办法
4473
查看次数