尝试在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
似乎无法正确解析作为“任务角色”传递给任务的凭据
答案 0 :(得分:0)
我设法找到了一种解决方法,这也许可以说明我认为是代理中的错误或功能不足的原因。我必须使用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
标志添加到启动器中,这对于试图弄清楚误入歧途非常有帮助。