问题标签 [aws-batch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
aws-lambda - 如何配置 AWS lambda 执行角色以能够列出批处理作业?
我在正确配置 Lambda 以运行批处理作业时遇到问题。代码如下所示:
它在client.list_jobs(jobQueue=_job_queue)上失败,并出现以下错误:
“errorMessage”:“调用 ListJobs 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::749340585813:assumed-role/myproject/dev-StartJobLambda-HZO22Z5IMTFB 无权执行:batch:ListJobs on resource : arn:aws:batch:us-west-2:749340585813:/v1/listjobs",
如果我将访问密钥添加到上面的 lambda,它工作正常。我认为这是因为我具有管理员访问权限,并且以我的用户身份进行身份验证为 lambda 提供了我的特权。
我的 lambda 定义如下所示:
还会创建以下角色和策略:
此外,还有一个角色可以让 lambda 在 VPC 上运行:
amazon-web-services - ECS 无法承担角色
从控制台,我正在调用一个提交批处理作业的 lambda。批处理作业失败,表明 ECS 无法承担为执行作业定义而提供的角色。
对于角色,我添加了 lambda 和 ECS 服务。
错误信息:
“ECS 无法承担为此任务提供的角色‘arn:aws:iam::749340585813:role/golfnow-invoke-write-progress’。请验证所传递的角色是否具有正确的信任关系和权限,并且您的 IAM 用户有权传递此角色。”
批处理作业:
调用方式有问题吗?我的用户具有管理员权限,所以我认为这不是我的用户权限不足的问题。
amazon-web-services - AWS Batch 作业在“dependsOn”时停留在 PENDING
我在链接AWS Batch作业时遇到问题。
有 3 个计算环境(
CE_A
,CE_B
,CE_C
),每个环境关联一个作业队列(JQ_A
,JQ_B
,JQ_C
)。有 6 个作业定义(
JD_1
,JD_2
, ...,JD_6
)。假设
<jqce>-<jd>-<name>
是在作业队列(或计算环境)上启动的作业<jqce>
,并带有作业定义<jd>
。示例:A-1-a
,C-6-z
.我想按顺序执行大约 20 个作业(使用不同的环境变量启动):
A-1-a
,A-1-b
,B-2-c
,A-3-d
,A-3-e
,A-3-f
, ...对于每个作业,我使用以下命令指定对先前作业的依赖:
params.dependsOn = [{ "jobId": "xxxxx-xxxx-xxxx-xxxxxx"}]
inBatch.submitJob(params)
。前两个作业在等待几分钟资源分配后成功执行
A-1-a
。A-1-b
B-2-c
在等待 Compute 环境启动几分钟后,第三个作业也成功执行CE_B
。同时,由于没有作业出现,计算环境
CE_A
被关闭。
这是问题:
我预计在这一点上
CE_B
会下降和CE_A
上升。CE_A
没有上升。永远不会执行,
A-3-d
16 小时后它仍然处于PENDING
状态。- 没关系,它的
dependsOn
依赖关系很久以前就结束了。 - 没有
dependsOn
批处理运行正常,具有相同的环境变量和配置。
- 没关系,它的
问题
- 你遇到过类似的问题
AWS Batch
吗dependsOn
? - 是否可以链接来自不同作业队列的批次?
- 是否可以链接来自不同计算环境的批次?
- 你
params.dependsOn = [{ "jobId": "xxx-xxx-xxx-xxx" }]
觉得还可以吗?看来我不必设置type
属性见数组作业;
docker - 如何在运行时增加 docker 容器中的交换空间?
我有一个用例,我需要在容器启动(运行时)时增加交换空间限制。我的 docker 始终作为“docker run -m 1G ...”运行(来自 AWS Batch)。Docker 总是将交换空间值设置为硬内存限制的 2 倍。容器启动时如何增加此值?
我尝试了一些启动前/启动后 docker 插件来更改 cgroup 值,但似乎没有任何效果
注意:我无法发出“docker run --memory-swap 值”,因为它由 AWS Batch 控制。
很少有参考书让我无所适从- https://engineering.clever.com/2018/02/06/swappiness-amazon-ecs/
amazon-cloudwatch - 来自 Cloudwatch 事件的 AWS Batch 输入参数
我正在尝试将由 S3 PutObject 上的 Cloudwatch 事件触发的 AWS Batch 作业设置到存储桶中。添加新文件时,我的作业正在运行,但不确定如何将文件名传递给作业。在我的 Cloudwatch 事件规则中,我将批处理作业队列设置Configure input
为Matched event
,但不确定如何访问作业正在运行的 docker 容器中的事件。
amazon-cloudformation - 使用 CloudFormation 部署 Batch
我已经能够使用 CloudFormation 创建一个计算环境、一个作业队列和大约十几个作业定义。伟大的!
除非我遗漏了什么,否则似乎没有一个元素可以使用 CloudFormation 实际提交我的工作定义。:(
起初,我以为我已经弄明白了,因为您可以创建触发作业提交的 CloudWatch 事件。但是,我注意到 CloudFormation 中的事件规则不像 CLI/SDK 那样支持批处理。瘸!
还有其他人使用 CloudFormation 部署 Batch 吗?你是如何提交工作的?我想我可以创建一个自定义资源,但这似乎比它应该做的要难。
amazon-web-services - 在 AWS Batch 上独立运行时,Spark 无法访问 S3
使用 AWS 库,我可以访问 S3,但如果我尝试使用 Spark 程序(使用 NativePackager 构建)访问 S3,这将不起作用。
我尝试了 s3://、s3n:// 和 s3a://。
让我展示一些我的测试:
测试1:
如果我没有什么特别的。如前所述失败。
测试2:
在https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html之后,我在调用我的代码之前执行了此代码:
之前的一些错误
测试3:
如果我用我的个人密钥设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。AWS 库和 Spark Work
考虑到测试 3有效,我的代码有效。出于显而易见的原因,我不喜欢在周围维护钥匙。问题是:
如何在我的 Spark 作业上使用 AWS Batch (ECS) 创建的凭证?
aws-batch - 如何检索 AWS Batch 作业参数?
如何从 AWS Batch 作业请求中检索参数?假设我有一个作业提交者应用程序,它使用以下代码(在 C# 中)发送作业请求:
我现在想要做的是检索启动的 docker 应用程序中 submitJobRequest 的参数字段中的内容。我怎么做?它不是作为程序参数传入的,因为我已经测试过了(我看到的唯一参数是为我的工作定义的“命令”静态定义的)。我知道我可以通过容器覆盖设置环境变量,然后通过 Environment.GetEnvironmentVariable(在 C# 中)检索它们。但我不知道如何获取参数。谢谢。
amazon-web-services - AWS CloudWatch 规则以 AWS 批处理作为目标返回 FailedInvocation
嗨,我已经安排了 Cloudwatch规则,以便在每周三 GTM 14.15 运行,目标是 AWS Batch,它总是返回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
/li>arn:aws:iam::216314997889:role/awsInvokeActionOnEc2
/li>和信任关系
/li>
amazon-web-services - AWS批量限制单个主机上的容器数量
我有一些带有 GPU Tensorflow 作业的容器,如果其中 2 个以上在单个主机上同时执行,则只有 1 个会成功(2018-05-11 13:02:19.147869: E tensorflow/core/common_runtime/direct_session.cc:171] Internal: failed initializing StreamExecutor for CUDA device ordinal 0: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_ECC_UNCORRECTABLE
即它们无法正确共享 GPU)。
完美的场景如下:我有 10 个 GPU 作业和最多 5 个容器。前 5 个被执行,其他 5 个等待(此时,它们不等待而是尝试执行并失败),当一个完成时,第 6 个立即在同一主机上启动,然后是第 7 个、第 8 个、第 9 个、第 10 个。
我使用 p2.xlarge,并为 gpu 作业设置了 4 个 vCPU 和 42000 内存。根据 ec2instances.info,这台机器有 61.0 GiB 内存和 4 个 vCPU。但是,无论如何,批处理似乎同时调度多个容器,导致描述的失败。
到目前为止,我尝试使用vCPU
和memory
参数,但 Batch 的调度程序似乎忽略了这些。
有趣的是,相关 ECS 任务定义具有1/--
的值Hard/Soft memory limits (MiB)
,因此看起来批处理“作业定义”中的值不会传播到 ECS“任务定义”。
另一种选择是设置大量尝试,但是
- 它很丑
- 对于长期运行的工作,即使是大量工作也可能会筋疲力尽
- 我失去了对永远运行的工作的防御(例如配置错误)
- 不确定这种中断会如何影响已经运行的 Tensorflow 作业