amazon-web-services - 如何获取 Fargate ecs 容器的 TaskId
问题描述
类似于这个问题如何从 ECS 容器中获取任务 ID?但我想得到TaskId
我的Fargate
任务。你怎么能做到这一点?像其他人一样,我想要这个来记录信息。
我正在运行一个带有 ELK 堆栈的 Spring App 进行日志记录,如果可能的话,我希望将其包含TaskId
在日志中。
编辑 我实际上从来没有让这个工作顺便说一句,这是我的代码:
private String getTaskIdInternal() {
String url = System.getenv("ECS_CONTAINER_METADATA_URI_V4") + "/task";
logger.info("Getting ecsMetaDataURL={}", url);
if (url == null) {
throw new RuntimeException("ECS_CONTAINER_METADATA_URI_V4 env variable not defined");
}
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<JsonNode> response = restTemplate.getForEntity(url, JsonNode.class);
logger.info("ecsMetaData={}", response);
JsonNode map = response.getBody();
String taskArn = map.get("TaskARN").asText();
String[] splitTaskArn = taskArn.split("/");
String taskId = splitTaskArn[splitTaskArn.length - 1];
logger.info("ecsTaskId={}", taskId);
return taskId;
}
但我总是得到这个堆栈跟踪:
Could not get the taskId from ECS. exception=org.springframework.web.client.HttpClientErrorException: 403 Forbidden
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:118)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:103)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:732)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:690)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:646)
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:325)
解决方案
如果您尝试在 Fargate for ECS 中获取任务 ID,您可以使用元数据端点。
假设您使用1.4.0
的是 Fargate 版本,您可以通过对${ECS_CONTAINER_METADATA_URI_V4}/task
.
来自此端点的示例响应如下
{
"Cluster": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:cluster/default",
"TaskARN": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:task/default/febee046097849aba589d4435207c04a",
"Family": "query-metadata",
"Revision": "7",
"DesiredStatus": "RUNNING",
"KnownStatus": "RUNNING",
"Limits": {
"CPU": 0.25,
"Memory": 512
},
"PullStartedAt": "2020-03-26T22:25:40.420726088Z",
"PullStoppedAt": "2020-03-26T22:26:22.235177616Z",
"AvailabilityZone": "us-west-2c",
"Containers": [
{
"DockerId": "febee046097849aba589d4435207c04aquery-metadata",
"Name": "query-metadata",
"DockerName": "query-metadata",
"Image": "mreferre/eksutils",
"ImageID": "sha256:1b146e73f801617610dcb00441c6423e7c85a7583dd4a65ed1be03cb0e123311",
"Labels": {
"com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:cluster/default",
"com.amazonaws.ecs.container-name": "query-metadata",
"com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:task/default/febee046097849aba589d4435207c04a",
"com.amazonaws.ecs.task-definition-family": "query-metadata",
"com.amazonaws.ecs.task-definition-version": "7"
},
"DesiredStatus": "RUNNING",
"KnownStatus": "RUNNING",
"Limits": {
"CPU": 2
},
"CreatedAt": "2020-03-26T22:26:24.534553758Z",
"StartedAt": "2020-03-26T22:26:24.534553758Z",
"Type": "NORMAL",
"Networks": [
{
"NetworkMode": "awsvpc",
"IPv4Addresses": [
"10.0.0.108"
],
"AttachmentIndex": 0,
"IPv4SubnetCIDRBlock": "10.0.0.0/24",
"MACAddress": "0a:62:17:7a:36:68",
"DomainNameServers": [
"10.0.0.2"
],
"DomainNameSearchList": [
"us-west-2.compute.internal"
],
"PrivateDNSName": "ip-10-0-0-108.us-west-2.compute.internal",
"SubnetGatewayIpv4Address": ""
}
]
}
]
}
如您所见,您需要解析TaskARN
以获取 TaskID(如果您用“/”分割,它是 ARN 的最后一部分。
亚马逊确实在应注意的文档中指定了以下内容。
对于使用 Fargate 启动类型和 1.4.0 之前的平台版本的任务,支持任务元数据版本 3 和 2 端点。有关详细信息,请参阅任务元数据端点版本 3或任务元数据端点版本 2。
推荐阅读
- php - 在 PHP 中将令牌保存为字符串
- python - 用 pos_tags 字典替换 DataFrame 中的值
- jquery - 应用过滤器后,照片滑动打开错误的图像
- python - 邮件ID不能被刮
- node.js - NodeJS Express BasePath 与 Nginx
- mysqli - 无法登录到 phpmyadmin (mysqli_real_connect(): (HY000/2002))
- ios - 滚动 UITextView 到特定文本
- javascript - 将 (.odd + .even) 添加到 XML 应用程序
- jquery - 如何隐藏自定义选择列表中的选定选项?
- php - PHP读取文件否则另一个文件