运行 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
标记,这对于找出误入歧途的位置非常有帮助。
尝试 运行 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
标记,这对于找出误入歧途的位置非常有帮助。