我正在使用 AWS Batch 并已开始使用数组作业。
AWS_BATCH_JOB_ARRAY_INDEX作为环境变量传递给容器。
数组大小是否以某种方式传递?必须知道该指数是与 5 个职位相关还是与 1000 个职位相关。目前,我将其作为我自己的环境变量传递,但认为该信息已经以某种方式传递到容器。
我不知道如何通过 Fargate 平台运行 AWS Batch。我想做的就是发出 hello world echo 并将文件写入 S3。
我收到以下错误:
CannotPullContainerError: pull image manifest has been retried 5 time(s): failed to resolve ref public.ecr.aws/amazonlinux/amazonlinux:latest: failed to do request: Head "https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/latest": dial tcp [ID]: i/o timeout
Run Code Online (Sandbox Code Playgroud)
这是我注册的工作定义:
{
"jobDefinitionName": "fargate-hello-world",
"type": "container",
"containerProperties": {
"image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
"command": [
"echo",
"Hello world",
"|",
"aws",
"s3",
"cp",
"-",
"s3://[BUCKET-NAME]/test.txt"
],
"jobRoleArn": "arn:aws:iam::[ID]:role/ecsTaskExecutionRole",
"executionRoleArn": "arn:aws:iam::[ID]:role/ecsTaskExecutionRole",
"resourceRequirements": [
{
"value": "2.0",
"type": "VCPU"
},
{
"value": "4096",
"type": "MEMORY"
}
]
},
"platformCapabilities": [ …Run Code Online (Sandbox Code Playgroud) 考虑一下aws批处理作业定义:
MyJobDefinition:
Type: "AWS::Batch::JobDefinition"
Properties:
Type: container
Parameters: {}
JobDefinitionName: "my-job-name"
ContainerProperties:
Command:
- "java"
- "-jar"
- "my-application-SNAPSHOT.jar"
- "--param1"
- "Ref::param1"
- "--param2"
- "Ref::param2"
Run Code Online (Sandbox Code Playgroud)
调用哪个结果:
java -jar my-application-SNAPSHOT.jar --param1 someValue1 --param2 someValue2
Run Code Online (Sandbox Code Playgroud)
如何更改作业定义以使其喜欢(注意等号):
java -jar my-application-SNAPSHOT.jar --param1=someValue1 --param2=someValue2
Run Code Online (Sandbox Code Playgroud)
请注意,Ref::param1它不是cloudformation模板参数,而是批量作业参数.
我正在寻找一种方法,通过将剩余的作业保留在队列中来限制正在运行的批处理作业的数量。aws批处理可以吗?
我有一个 docker 映像,通过它我可以创建一个 aws 批处理作业定义。在 docker 中,我正在打印一些语句。作业运行并显示成功消息。但是 Cloudwatch 中没有日志。它说没有找到任何事件。甚至不是工作的开始和结束时间。
我也设置了环境变量ECS_AVAILABLE_LOGGING_DRIVERS = awslogs,但我仍然没有看到任何日志。
需要什么额外配置?
我正在使用AWS Batch。我的目标是通过适用于C ++的AWS开发工具包创建一个多节点并行作业。为此,我按照此处的说明创建了工作定义。
我正在使用AWS C ++ SDK,并且注意到当我尝试覆盖环境变量或命令时,实际上什么都没有转移到作业中。
有趣的是,对于使用常规作业定义(而不是多节点作业)的作业,相同的代码可以很好地工作:
#include <aws/batch/BatchClient.h>
#include <aws/batch/model/ContainerOverrides.h>
#include <aws/batch/model/KeyValuePair.h>
#include <aws/batch/model/SubmitJobRequest.h>
#include <aws/core/Aws.h>
#include <aws/core/utils/Outcome.h>
int main(void)
{
Aws::SDKOptions options;
Aws::InitAPI(options);
Aws::Batch::BatchClient batchClient;
Aws::Batch::Model::SubmitJobRequest submitJobRequest;
Aws::Batch::Model::SubmitJobOutcome submitJobOutcome;
Aws::Batch::Model::ContainerOverrides containerOverrides;
Aws::Batch::Model::KeyValuePair envVariable;
envVariable.SetName("foo");
envVariable.SetValue("bar");
containerOverrides.AddEnvironment(envVariable); // This does nothing for a multi-node job definition.
containerOverrides.AddCommand("foobarbaz"); // This does nothing for a multi-node job definition.
submitJobRequest.SetJobName("myjob");
submitJobRequest.SetJobDefinition("arn:aws:...."); // This string is an example. I have used the actual job definition ARN.
submitJobRequest.SetJobQueue("arn:aws:...."); // This string …Run Code Online (Sandbox Code Playgroud) 是否有直接集成点或连接器来将 AWS Batch 作业与 DataDog 集成?要检索日志和基础设施指标?
到目前为止,我遇到的是 DataDog 转发器,它可以将日志从 Cloudwatch 转发到 DataDog,但没有任何基础设施指标?
我在运行 AWS 批处理作业时收到以下错误:
ResourceInitializationError:无法提取机密或注册表身份验证:执行资源检索失败:无法检索 ecr 注册表身份验证:服务调用已重试 3 次:RequestError:发送请求失败,原因是:发布 https://api.ecr。 us-east-1.amazonaws.com/:拨打 tcp 54.239.19.155:443:i/o 超时
我正在为 AWS 批量计算环境使用 Fargate 选项。
我的 VPC 包含一个具有“自动分配公共 IPv4 地址”的子网、一个互联网网关和一个匹配的路由表。我认为这可能是我的 VPC 中的问题,因此为了验证这一点,我在 VPC 中启动了一个新的 EC2 实例,并在 EC2 实例中运行curl 到https://api.ecr.us-east-1 .amazonaws.com。卷曲可以毫无问题地连接。
可能是什么问题呢?
如何从 AWS Batch 作业请求中检索参数?假设我有一个作业提交者应用程序,它使用以下代码(C# 语言)发送作业请求:
SubmitJobRequest submitJobRequest = new SubmitJobRequest()
{
JobName = "MyJobName",
JobQueue = "MyJobQueue",
JobDefinition = "MyJobDefinition:1",
Parameters = new Dictionary<string, string>() { {"Foo", "Bar" } },
};
SubmitJobResponse submitJobResponse = AWSBatchClient.SubmitJob(submitJobRequest);
Run Code Online (Sandbox Code Playgroud)
我现在想要做的是检索启动的 Docker 应用程序中的 SubmitJobRequest 中的参数字段中的内容。我怎么做?正如我所测试的那样,它没有作为程序参数传递(我看到的唯一参数是为“命令”我的作业定义静态定义的参数)。我知道我可以通过容器覆盖设置环境变量,然后通过 Environment.GetEnvironmentVariable (在 C# 中)检索它们。但我不知道如何获取参数。谢谢。
我正在尝试将我的弹性文件系统(EFS)安装在我的docker容器中,以便它可以与AWS批处理一起使用.这是我做的:
创建针对弹性容器服务(ECS)进行了优化的新AMI.我在这里遵循了这个指南,以确保它有ECS.我还将mount挂载到/etc/fstab文件中,并在重启后验证我的EFS是否正在挂载(/ mnt/efs).
用我的新AMI测试了EC2实例并验证我可以拉出docker容器并通过它传递我的挂载点
docker run --volume /mnt/efs:/home/efs -it mycontainer:latest
以交互方式运行docker镜像会在efs中显示我的数据
使用我的新AMI 设置新的计算环境,该AMI在引导时安装EFS.
创建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)aws-batch ×10
docker ×3
amazon-ecs ×2
amazon-s3 ×1
aws-fargate ×1
aws-sdk ×1
aws-sdk-cpp ×1
datadog ×1
timeout ×1