ECS Fargate で strace してみた記事。
Fargate PV 1.4.0 から strace できます
Fargate では PV 1.4.0 から strace が実行できるように、 CAP_SYS_PTRACE
のサポートが入っている。
Fargate タスクが CAP_SYS_PTRACE Linux 機能のサポートを開始
...
たとえば、お客様の一部は、strace などのツールを実行する必要があると表明しています。
CAP_SYS_PTRACE をタスク定義で追加する
タスク定義のJSONで追加できるオプション linuxParameters
として capabilities
として SYS_PTRACE
を追加する。
https://docs.aws.amazon.com/AmazonECS/latest/userguide/task_definition_parameters.html#container_definition_linuxparameters
"linuxParameters": { "capabilities": { "add": [ "SYS_PTRACE" ], "drop": null } },
やってみる
Nginx のタスク追加してみて、ECS Execで入ってstraceしてみた。
SYS_PTRACEなし
❯❯❯ aws ecs execute-command --cluster test --task xxxxxxxxxxxxxxxxx --interactive --command /bin/bash root@ip-172-31-24-236:/# strace nginx strace: test_ptrace_get_syscall_info: PTRACE_TRACEME: Operation not permitted strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted +++ exited with 1 +++
SYS_PTRACEあり
❯❯❯ aws ecs execute-command --cluster test --task xxxxxxxxxxxxxxxxx --interactive --command /bin/bash root@ip-172-31-2-221:/# strace nginx execve("/usr/sbin/nginx", ["nginx"], 0x7fff4092db70 /* 18 vars */) = 0 brk(NULL) = 0x559407f87000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=16186, ...}) = 0 mmap(NULL, 16186, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9c1b26e000 close(3) = 0 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\21\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0644, st_size=14592, ...}) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9c1b26c000 mmap(NULL, 16656, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9c1b267000 mmap(0x7f9c1b268000, 4096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7f9c1b268000 mmap(0x7f9c1b269000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f9c1b269000 mmap(0x7f9c1b26a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f9c1b26a000 close(3) = 0 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@l\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=146968, ...}) = 0 mmap(NULL, 132288, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9c1b246000 mmap(0x7f9c1b24c000, 61440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f9c1b24c000 mmap(0x7f9c1b25b000, 24576, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x7f9c1b25b000 mmap(0x7f9c1b261000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7f9c1b261000 mmap(0x7f9c1b263000, 13504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f9c1b263000 close(3)
でけた。