从 Fargate 容器内运行 AWS Log Agent

问题描述 投票:0回答:2

尝试在 AWS ECS Fargate 上运行的 Docker 容器内运行 AWS Logs Agent。

这在 EC2 下已经运行良好好几年了。在 Fargate 上下文下,它似乎无法解析传递给它的任务角色。

任务角色的权限应该很好...我什至尝试授予它完整的 CloudWatch 权限以消除这一原因。

我已经成功破解了基于Python的启动器脚本,添加了一个

--debug
标志,这在日志中给了我这个:

Caught retryable HTTP exception while making metadata service request to
 http://169.254.169.254/latest/meta-data/iam/security-credentials

它似乎无法正确解析作为“任务角色”传递到任务中的凭据

amazon-cloudwatch amazon-ecs aws-fargate
2个回答
1
投票

我设法找到了一种黑客解决方法,这可能说明了我认为代理中的错误或不足之处。我必须使用 sed 破解启动器脚本,如下所示:

sed -i "s|HTTPS_PROXY|AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI HTTPS_PROXY|" 
/var/awslogs/bin/awslogs-agent-launcher.sh

这本质上取消了对保存用于检索任务角色的 URI 的 ENV 变量的引用,并将其传递给代理的启动器。

结果是这样的:

/usr/bin/env -i AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/f4ca7e30-b73f-4919-ae14-567b1262b27b (etc...)

完成此操作后,我重新启动日志代理,它会按预期工作。

请注意,您可以执行类似的操作来向启动器添加

--debug
标志,这对于尝试找出它误入歧途的位置非常有帮助。


0
投票

当您使用 FARGATE 配置执行 ECS 容器时,它会查找存储在容器内的凭证。但如果是 AWS ECS FARGATE 或 AWS EKS,它会从环境变量“AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”获取凭证,该变量基本上是 HTTP 端点。

请参阅下面的 AWS DOC 容器凭证提供者

© www.soinside.com 2019 - 2024. All rights reserved.