运行 Fargate 容器内的 AWS Log Agent

Running AWS Log Agent from inside a Fargate container

尝试 运行 docker 容器内的 AWS Logs 代理 运行 在 AWS ECS Fargate 上运行。

多年来,这在 EC2 下一直运行良好。在 Fargate 上下文中,它似乎无法解析传递给它的任务角色。

Task Role 的权限应该很好...我什至尝试给它完整的 CloudWatch 权限以消除它作为一个原因。

我已经成功破解了基于 python 的启动器脚本以添加一个 --debug 标志,它在日志中给了我这个:

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

似乎没有正确解析作为 'Task Role'

传递给任务的凭据

我设法找到了一个 hack 解决方法,它可以说明我认为是代理中的错误或不足之处。我不得不使用 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 标记,这对于找出误入歧途的位置非常有帮助。