是否有简单的方法来运行附加的ECS任务或仅在容器运行时跟踪日志(即显示所有关联日志后分离)?
使用 AWS CLI (1.17.0) 和 ecs-cli (1.21.0),我已经非常接近以下两个命令:
aws ecs run-task --cluster "mycluster" --task-definition testhelloworldjob --launch-type FARGATE --network-configuration etc.etc.etc.
ecs-cli logs --task-id {TASK_ID_HERE_FROM_OUTPUT_OF_PREVIOUS_COMMAND} --follow
我目前对上述方法有两个问题:
ecs-cli logs
澄清一下,我来自许多其他容器编排工具/技术,它们似乎非常无缝地支持这一点。以下是一些工具及其相关命令的示例,它们可以产生我想要的结果:
Docker CLI:
ecs-cli logs
Docker-ComposeYaml
K8 KubectlYaml
kubectl apply -f ./hello-k8.yaml && kubectl logs --follow hello-world
是目前最好的选择。
ecs-cli
,然后在通过 SSH 连接到运行该任务的 EC2 容器实例后从终端查看日志文件。
您可以做的另一件事是通过 SSH 连接到之前运行的 EC2 容器实例,然后使用syslog
在其中自行运行该 AWS ECS 任务的容器,一旦测试完成,您可以停止并删除该任务容器,然后通过 AWS ECS 启动该任务。
注意:您可以使用 AWS SSM Session Manager 以避免使用 EC2 密钥对并添加 SSH 入站规则。
使用
docker run
aws ecs wait tasks-running
--since
我试图使其易于调用,因此它做了一些工作来确定日志组,如果您已经知道它,则可以将其删除。你可以这样称呼它
# Prints logs like 'tail -f' for an ecs task
function tail_task_logs {
local TASKID=$1
local CLUSTER
local TASK_DEFINITION
local LGROUP
CLUSTER=$(echo "$TASKID" | cut -d/ -f1,2 | sed 's/task/cluster/')
# Lookup the log group name
TASK_DEFINITION=$(aws ecs describe-tasks \
--cluster "$CLUSTER" \
--tasks "$TASKID" \
--query 'tasks[0].taskDefinitionArn' \
--output text)
LGROUP=$(aws ecs describe-task-definition \
--task-definition "$TASK_DEFINITION" \
--query 'taskDefinition.containerDefinitions[0].logConfiguration.options."awslogs-group"' \
--output text)
# Start tailing once container is running
SINCE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
echo "Waiting for task to start.."
aws ecs wait tasks-running \
--cluster "$CLUSTER" \
--tasks "$TASKID"
STATUS="None"
while [[ $STATUS == "None" ]]; do
# print new messages
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
aws logs tail "$LGROUP" --since "$SINCE"
SINCE="$NOW"
sleep 2
# Check if container is still running
STATUS=$(aws ecs describe-tasks \
--cluster "$CLUSTER" \
--tasks "$TASKID" \
--query 'tasks[0].stopCode' \
--output text)
done
# Print final messages
aws logs tail "$LGROUP" --since "$SINCE"
echo "Container exited: $STATUS"
}
您也许可以使用
tail_task_logs "some-task-id"
进行简化,但我想要一个没有额外依赖项的版本。