- tl;dr
- ãªã
- ãããªæãã§...
- ãããªæãã«...
- å®è£ ã«ããã£ã¦å¾ãç¥è¦ç
- 以ä¸
tl;dr
ãç¡æ²æ±°ãã¦ããã¾ã. ã¡ããã¨ä»äºããã¦ãã¾ãã, ãã£ã±ã§ã.
Fargate ã§åãã¦ãã Scheduled Task (ãããããããå¦ç) ãã©ã®ããã CPU ãã¡ã¢ãªã使ç¨ãã¦ããã®ãç¥ãããã¦, å¹¾ã¤ãã®æè¡ãçµã¿åããã¦å®è£ ãã¦ã¿ã¾ããã®ã§ç´¹ä»ããã¦é ãã¾ã.
ä¸å¿, ãã®ä»çµãä»è¾¼ãã å¾, æ°ã¥ãã¦ããªãã£ãå¹¾ã¤ãã®åé¡ã«ã¤ãã¦æ°ã¥ããã¨ãåºæ¥ãããã¦, æéãããã¦ãä»è¾¼ãã§è¯ãã£ããªã¨æãããã¨ãããã¾ãã.
ãªã
ãªã, ãããå¦çã® CPU ãã¡ã¢ãªã®ä½¿ç¨éãç¥ãããã£ãã®ã.
- ã¿ã¹ã¯ã«å²ãå½ã¦ã¦ããã³ã³ãããªã½ã¼ã¹ã¿ã¤ãã¯ç¹ã«ææ¨ãç¡ã決ããã®ã§, æ¬å½ã«ãã®ãªã½ã¼ã¹ã¿ã¤ããæ£ããã®ãç¥ããã
- ãã¾ã«çºçãã¦ããã¡ã¢ãªä¸è¶³ã«ãããããå¦ç失æã®æã«ã©ã®ãããã¡ã¢ãªã使ã£ã¦ããã®ãç¥ããã
- ä»å¾ã®ããã©ã¼ãã³ã¹æ¹åã«å½¹ç«ã¦ãã
ã¨ããçç±ãããããã§ã.
Lambda ã§é¢æ°ãå®è¡ããã¨, ä¸å³ã®ããã«å®è¡çµæã®ãã°ã«ã©ã®ããããªã½ã¼ã¹ã使ã£ãã®ããåºåããã¾ã. ããã¨åããã¨ãå®ç¾ãããã£ãã®ã§ãï¼
ãããªæãã§...
ãããªæãã§... (1)
- ãããå¦çã³ã³ããã¨ã¯å¥ã®ã³ã³ããã§ãªã½ã¼ã¹ä½¿ç¨éãåéããéãªã¹ã¯ãªãã (ã¨ãããã, å ¬éæ¤è¨ä¸) ãåãã
- ãããå¦çã³ã³ããã®å®è¡ãã°ã«ãªã½ã¼ã¹çµ±è¨æ å ±ã JSON ã§å·®ãè¾¼ã
- ãã°ã CloudWatch Logs çµç±ã§ Elasticsearch ã«çªã£è¾¼ã
- Elasticsearch ä¸ã§ Kibana ã使ã£ã¦å¯è¦åãã
- ãããå¦çã®çµæ㯠CloudWatch Events ãä»ã㦠Lambda çµç±ã§ Slack ã®æå®ãããã£ã³ãã«ã«éä¿¡ (æåæã¨å¤±ææã¯ããããç°ãªããã£ã³ãã«ã«éä¿¡)
ãããªæãã§... (2)
ãããå¦çã®ãã°ã«ä½¿ç¨éã®çµ±è¨æ å ±ãå·®ãè¾¼ãããã«ãªãã¾ãã.
ãããªæãã«...
ãªãã¾ãã
CloudWatch Logs ãã Amazon Elasticsearch ã«æµãã¦ããããã¨ã§, Kibana ã§å¯è¦ååºæ¥ãããã«ããªãã¾ãã.
- Task Count ã§ã¯, æç³»åã«ã¿ã¹ã¯ã®å®è¡æ°ã確èªåºæ¥ã¾ã
- Task Duration ã§ã¯, ãã®åã®éã, å種ãããå¦çã®ãããå¦çæ¯ã®å®è¡æéã確èªåºæ¥ã¾ã
- Task Resource Usage Average, ãããä¸çªããããã£ããã¨ã§, å種ããããã©ã®ç¨åº¦ãªã½ã¼ã¹ã使ã£ã¦ããã®ããã¼ããããã使ã£ã¦å¤§éæã«ç¢ºèªãããã¨ãåºæ¥ã¾ã
å®è£ ã«ããã£ã¦å¾ãç¥è¦ç
Task metadata endpoint
ECS ã®ã³ã³ããã¨ã¼ã¸ã§ã³ããæä¾ããã¿ã¹ã¯ã¡ã¿ãã¼ã¿ãã³ã³ããã®å種ã¡ããªã¯ã¹ãè¿ãã¨ã³ããã¤ã³ãã§, 2 ã¤ã®ãã¼ã¸ã§ã³ãæä¾ãã¦ãã¾ã. ä»åã¯ãã¼ã¸ã§ã³ã 3 ãå©ç¨ãã¦ãã¾ã.
ã³ã³ããå
ã§ã¯ ${ECS_CONTAINER_METADATA_URI}
ã¨ããç°å¢å¤æ°ã«å®ç¾©ããã¦ãã¦, 以ä¸ã®ããã« curl çã§ã¢ã¯ã»ã¹ãããã¨ã§, JSON ã«ããã¬ã¹ãã³ã¹ãå¾ããã¾ã.
curl ${ECS_CONTAINER_METADATA_URI}
以ä¸ã®ããã«ã¬ã¹ãã³ã¹ãè¿ã£ã¦ãã¾ã. (以ä¸ã®ä¾ã¯ ecs-cli local up
ãå®è¡ãã¦, ãã¼ã«ã«ç°å¢ã«æ¬ä¼¼çã« ECS ç°å¢ãèµ·åããéã«åå¾åºæ¥ãæ
å ±ã§ã, å®éã® ECS ã¯ã©ã¹ã¿ã®ã¬ã¹ãã³ã¹ã¨ç°ãªãå ´åãããããããã¾ããã®ã§ãäºæ¿ãã ãã )
bash-4.2# curl -s ${ECS_CONTAINER_METADATA_URI} | python -m json.tool { "CreatedAt": "2019-08-26T09:15:20Z", "DesiredStatus": "RUNNING", "DockerId": "51fc052d80ed5556130b55c9ff9c40c7b9181b3c2b6f996982cac85da8d40a15", "DockerName": "ecs-cli_amazon_linux2_1", "Image": "amazonlinux-ruby:collector", "ImageID": "sha256:1248b3d7615e4d3be4a3733fc5d5d22ed331137ebe76a76e13e3de710bc2dd4a", "KnownStatus": "RUNNING", "Labels": { "com.docker.compose.config-hash": "6964544214e2426d3a7d019db7766196f0ea386536d8a753a693f77878c5e962", "com.docker.compose.container-number": "1", "com.docker.compose.oneoff": "False", "com.docker.compose.project": "ecs-cli", "com.docker.compose.service": "amazon_linux2", "com.docker.compose.version": "1.24.1", "ecs-local.task-definition-input.type": "local", "ecs-local.task-definition-input.value": "/path/to/test-definition.json" }, "Limits": {}, "Name": "ecs-cli_amazon_linux2_1", "Networks": [ { "IPv4Addresses": [ "169.254.170.4" ], "NetworkMode": "ecs-local-network" } ], "StartedAt": "2019-08-26T09:15:20Z", "Type": "NORMAL", "Volumes": [ { "Destination": "/src", "Source": "/path/to/src" } ] }
Task metadata endpoint ã«ã¯, 以ä¸ã®ããã«å¹¾ã¤ãã®ãã¹ãæä¾ããã¦ãã¾ã.
${ECS_CONTAINER_METADATA_URI}/task
${ECS_CONTAINER_METADATA_URI}/stats
${ECS_CONTAINER_METADATA_URI}/task/stats
ã³ã³ããã® CPU 使ç¨çãã¡ã¢ãªã®ä½¿ç¨é㯠${ECS_CONTAINER_METADATA_URI}/task/stats
ã¯å©ç¨ãã¦åå¾ãã¦ãã¾ã. 以ä¸ã®ãããªã¬ã¹ãã³ã¹ãè¿ã£ã¦ãã¾ã.
bash-4.2# curl -s ${ECS_CONTAINER_METADATA_URI}/task/stats | python -m json.tool { "51fc052d80ed5556130b55c9ff9c40c7b9181b3c2b6f996982cac85da8d40a15": { "blkio_stats": { "io_merged_recursive": [], "io_queue_recursive": [], "io_service_bytes_recursive": [], "io_service_time_recursive": [], "io_serviced_recursive": [], "io_time_recursive": [], "io_wait_time_recursive": [], "sectors_recursive": [] }, "cpu_stats": { "cpu_usage": { "percpu_usage": [ 649634389 ], "total_usage": 649634389, "usage_in_kernelmode": 80000000, "usage_in_usermode": 520000000 }, "online_cpus": 1, "system_cpu_usage": 1031550000000, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "memory_stats": { "limit": 8362110976, "max_usage": 32415744, ... "precpu_stats": { "cpu_usage": { "percpu_usage": [ 1874101880 ], "total_usage": 1874101880, "usage_in_kernelmode": 240000000, "usage_in_usermode": 1540000000 }, "online_cpus": 1, "system_cpu_usage": 1030560000000, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "preread": "2019-08-31T15:42:47.119425377Z", "read": "2019-08-31T15:42:48.123613175Z", "storage_stats": {} } }
ã³ã³ãããã¶ã¤ã³ãã¿ã¼ã³
ç¹ã«ä½ãèãã, ECS Task ã«ãããå¦çç¨ã®ã³ã³ããã¨ãã®ãªã½ã¼ã¹ãç£è¦ããã³ã³ãããé ç½®ãã¦, ãªã½ã¼ã¹ã®ä½¿ç¨éãè¨æ¸¬ããããã«å®è£ ãé²ãã¾ããã, ãã®å®è£ ã¯ã³ã³ãããã¶ã¤ã³ãã¿ã¼ã³ã«ç §ããåãããã¨ãµã¤ãã«ã¼ãã¿ã¼ã³, ãããã¯, ã¢ããã¿ãã¿ã¼ã³ã«è©²å½ããããã§ã.
ã³ã³ãããã¶ã¤ã³ãã¿ã¼ã³ã¨ã¯, Design patterns for container-based distributed systems ã¨ããè«æã«æ²è¼ããã¦ãã, ã³ã³ããã·ã¹ãã ã®å®è£ ãã¿ã¼ã³ã§, ãµã¤ãã«ã¼ãã¿ã¼ã³ã¯, ä¸å³ã®ããã«ã¡ã¤ã³å¦çãè¡ãã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã¨ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã®ãã°ãåéãã¦ä»ã®ã·ã¹ãã ã«è»¢éããçºã®è£å©ã³ã³ãããä¸ç·ã«ãããã¤ããå®è£ ãã¿ã¼ã³ã§ã.
â» Design patterns for container-based distributed systems ããå¼ç¨
ä»åã®å®è£
ãä¸å³ã«ãã¦ã¯ãã㨠Application Pod
ã, ããã ECS ã® Task
ã¨ãªã, Log Saving Sidecar Container
ããªã½ã¼ã¹ä½¿ç¨éãåéã㦠CloudWatch Logs ã«éä¿¡ããã³ã³ããã¨ãããã¨ã«ãªãã¾ã.
ã¾ã, ã¢ããã¿ãã¿ã¼ã³ã«ã¤ãã¦ã¯, ä¸å³ããã«ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã«å¯¾ãã¦, ç£è¦ã¤ã³ã¿ã¼ãã§ã¼ã¹ãæä¾ããéã«ç¨ããããå®è£ ãã¿ã¼ã³ã§, è¤æ°ã®ç°ãªã£ãã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã«å¯¾ãã¦, çµ±ä¸ããã¤ã³ã¿ã¼ãã§ã¼ã¹ã§ã¢ãã¿ãªã³ã°ãæ½ãããå ´åçã«å©ç¨ããã¾ã.
â» Design patterns for container-based distributed systems ããå¼ç¨
å°, å ã«æ²åºããè«æã¯è±èªã§æ¸ããã¦ãã, è±æ¤ 8 ç´ã®èªåã«ã¯ã¾ã£ããèªããªãã£ãã®ã§, Qiita ã«æ稿ããã¦ãã, ã³ã³ããã»ãã¶ã¤ã³ã»ãã¿ã¼ã³ã®è«æè¦ç´ ãé常ã«è©³ããè¦ç´ããã¦ããã®ã§åèã«ããã¦é ãã¾ãã. æé£ããããã¾ãã.
ãªã½ã¼ã¹ (CPU 使ç¨ç, Memory 使ç¨é) ã®è¨ç®æ¹æ³
Task metadata endpoint ãå©ç¨ãã¦, ã³ã³ããã®ãªã½ã¼ã¹ä½¿ç¨éã®ç£è¦ãè¡ãããã¨ã¯ãããã¾ããã, ã©ã®ããã« CPU 使ç¨çãã¡ã¢ãªä½¿ç¨éãç®åºããã®ãé常ã«æ©ã¿ã¾ãã. (èªåãåã« Docker ã®ç¥èãä¸è¶³ãã¦ããã ãã§ãã...)
åæ²ã«ãªã£ã¦ãã¾ãã¾ãã, Task metadata endpoint ããåå¾åºæ¥ãæ å ±ã¯ä»¥ä¸ã®éãã§ã.
bash-4.2# curl -s ${ECS_CONTAINER_METADATA_URI}/task/stats | python -m json.tool { "51fc052d80ed5556130b55c9ff9c40c7b9181b3c2b6f996982cac85da8d40a15": { "blkio_stats": { "io_merged_recursive": [], "io_queue_recursive": [], "io_service_bytes_recursive": [], "io_service_time_recursive": [], "io_serviced_recursive": [], "io_time_recursive": [], "io_wait_time_recursive": [], "sectors_recursive": [] }, "cpu_stats": { "cpu_usage": { "percpu_usage": [ 649634389 ], "total_usage": 649634389, "usage_in_kernelmode": 80000000, "usage_in_usermode": 520000000 }, "online_cpus": 1, "system_cpu_usage": 1031550000000, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "memory_stats": { "limit": 8362110976, "max_usage": 32415744, ... "precpu_stats": { "cpu_usage": { "percpu_usage": [ 1874101880 ], "total_usage": 1874101880, "usage_in_kernelmode": 240000000, "usage_in_usermode": 1540000000 }, "online_cpus": 1, "system_cpu_usage": 1030560000000, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "preread": "2019-08-31T15:42:47.119425377Z", "read": "2019-08-31T15:42:48.123613175Z", "storage_stats": {} } }
ãã®çµæã¯, 以ä¸ã® Docker Engine API ã®ã¬ã¹ãã³ã¹ãã®ãã®ãªã®ã§, åããããªã³ã³ãããªã½ã¼ã¹ãç£è¦ãããã¼ã«ã®å®è£ ãåèã«ããã¦é ãã¾ãã.
GET /containers/{id}/stats
å®éã«åèã«ããã®ã, Mackrel ã® mackerel-container-agent ã«ããã¦, ã³ã³ãããªã½ã¼ã¹ãåå¾ãã¦è¨ç®ãã¦ããé¨åã§ã. 以ä¸ã«ã³ã¼ãã®ä¸é¨ãæ²è¼ãã¾ã.
以ä¸ã¯ CPU 使ç¨çãè¨ç®ãã¦ããé¨åã§ã.
// https://github.com/mackerelio/mackerel-container-agent/blob/ce7cb283a3cdbc690127c6f67c44bdce7b140619/platform/ecs/metric.go#L112-L115 func calculateCPUMetrics(prev, curr *dockerTypes.StatsJSON, timeDelta time.Duration) float64 { // calculate used cpu cores. (1core == 100.0) return float64(curr.CPUStats.CPUUsage.TotalUsage-prev.CPUStats.CPUUsage.TotalUsage) / float64(timeDelta.Nanoseconds()) * 100 }
${ECS_CONTAINER_METADATA_URI}/task/stats
(/containers/{id}/stats
) ã«ã¢ã¯ã»ã¹ããã¨, 以ä¸ã®ããã«, cpu_stats
㨠precpu_stats
ã® 2 ã¤ã® CPU 使ç¨æé (ããç§)
(ãã®æç¹ã§ã¯ã¾ã 使ç¨ç
ã§ã¯ãªã) ãã¬ã¹ãã³ã¹ã¨ãã¦è¿ã£ã¦ãã¾ã.
"cpu_stats": { "cpu_usage": { "total_usage": 1255134650, "percpu_usage": [ 1255134650 ], "usage_in_kernelmode": 160000000, "usage_in_usermode": 1070000000 }, "system_cpu_usage": 5705400000000, "online_cpus": 1, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "precpu_stats": { "cpu_usage": { "total_usage": 1255134650, "percpu_usage": [ 1255134650 ], "usage_in_kernelmode": 160000000, "usage_in_usermode": 1070000000 }, "system_cpu_usage": 5704430000000, "online_cpus": 1, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } },
ä»åã¯, 以ä¸ã® Ruby ã³ã¼ãã®ããã«, ãã® 2 ã¤ã® CPU 使ç¨æéã®å·®åãå©ç¨ãã¦ä½¿ç¨çãè¨ç®ãã¦ãã¾ã. 1 ç§æ¯ã«ãã¼ã¿ãåéãã¦ããçº, 1000000000
ããç§ã§å²ãç®ãã¦ãã¾ãã, åç´ã«ãã¼ã¿åéããæé (1 ç§) æ¯ã®å²ãç®ã§æ¬å½ã«æ£ããçµæãå¾ããã¦ããã®ãã¡ãã£ã¨èªä¿¡ãç¡ãã®ã§, ããå°ãåå¼·ãããã¨æãã¾ã
def calc_cpu_percent(current, previous, interval = 1000000000) ((current['cpu_usage']['total_usage'].to_f - previous['cpu_usage']['total_usage'].to_f) / interval.to_f * 100).round(3) end
ã¡ãªã¿ã«, cpu_stats
ã precpu_stats
ã«ã¤ãã¦ã¯, Docker Engine API ã®ãã®ãããã§å®ç¾©ããã¦ãã¾ã.
æ´ã«, 以ä¸ã¯ã¡ã¢ãªä½¿ç¨éãè¨ç®ãã¦ããé¨åã§ã.
// https://github.com/mackerelio/mackerel-container-agent/blob/ce7cb283a3cdbc690127c6f67c44bdce7b140619/platform/ecs/metric.go#L117-L119 func calculateMemoryMetrics(stats *dockerTypes.StatsJSON) float64 { return float64(stats.MemoryStats.Usage - stats.MemoryStats.Stats["cache"]) }
ã¡ã¢ãªä½¿ç¨éã®è¨ç®ã¯ã·ã³ãã«ã ã¨æãã¾ã. ${ECS_CONTAINER_METADATA_URI}/task/stats
(/containers/{id}/stats
) ã«ã¢ã¯ã»ã¹ããã¨, 以ä¸ã®ããã«, "memory_stats
ãã¬ã¹ãã³ã¹ã¨ãã¦è¿ã£ã¦ãã¾ã.
"memory_stats": { "usage": 1015808, "max_usage": 109654016, "stats": { "active_anon": 299008, "active_file": 0, "cache": 102400, "dirty": 0, "hierarchical_memory_limit": 9223372036854772000, "hierarchical_memsw_limit": 0, "inactive_anon": 0, "inactive_file": 0, "mapped_file": 0, "pgfault": 3069, "pgmajfault": 0, "pgpgin": 53097, "pgpgout": 53053, "rss": 212992, "rss_huge": 0, "total_active_anon": 299008, "total_active_file": 0, "total_cache": 102400, "total_dirty": 0, "total_inactive_anon": 0, "total_inactive_file": 0, "total_mapped_file": 0, "total_pgfault": 3069, "total_pgmajfault": 0, "total_pgpgin": 53097, "total_pgpgout": 53053, "total_rss": 212992, "total_rss_huge": 0, "total_unevictable": 0, "total_writeback": 0, "unevictable": 0, "writeback": 0 }, "limit": 8362110976 }
ä»åã¯, CPU 使ç¨çã®è¨ç®ã¨åæ§ã« mackerel-container-agent ã«å£ã£ã¦, 以ä¸ã® Ruby ã³ã¼ãã®ããã«è¨ç®ãã¦ãã¾ã.
def calc_memory_size(memory_stat) ((memory_stat['usage'] - memory_stat['stats']['cache']).to_f / (1024.0 * 1024.0)).round(3) end
memory_stats
ã«ã¤ãã¦ã¯, Docker Engine API ã®ãã®ãããã§å®ç¾©ããã¦ãã¾ã.
ã³ã³ããã®èµ·åé åºã®å¶å¾¡
ä»å, ãã®ãªã½ã¼ã¹ä½¿ç¨éåéã®ä»çµã¿ãå®è£ ããã«ããã£ã¦, ä¸çªè©¦è¡é¯èª¤ãã (ä»å¾ã試è¡é¯èª¤ããããããªãããª...) ã®ã, ã³ã³ããã®èµ·åé åºã®èª¿æ´ã§ã.
ECS ã§ã¯, ä»å¹´ã® 3 æã« Amazon ECS ãã³ã³ããã®ä¾åé¢ä¿ã®ç®¡çãå¼·å ã¨ããçºè¡¨ããã¦ãã, Task Definition å ã§ã³ã³ããèµ·åé åº (ä¾åé¢ä¿) ãæå®ããã, ã³ã³ããåæ¢ã®ã¿ã¤ã ã¢ã¦ããæå®åºæ¥ãæ©è½ã®æä¾ãéå§ãã¦ãã¾ã.
å®éã« Task Definition å ã§ã¯, 以ä¸ã®ããã«è¨å®ãã¦ãã¾ã.
{ "name": "task-monitor", "image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxx/task-monitor:dev", "essential": true, "workingDirectory": "/app", ... ç¥ ... "stopTimeout": 120, "dependsOn": [ { "containerName": "batch", "condition": "START" } ] }
ã³ã³ããã®ä¾åé¢ä¿ã«ã¤ãã¦ã¯, dependsOn
ãã¼ã«æå®ãã¾ã. ä¸è¨ã®ä¾ã§ã¯, task-monitor
ã¨ããã³ã³ããã®èµ·åã¯, batch
ã¨ããã³ã³ããã® START
ã¨ããã¹ãã¼ã¿ã¹ãæ¤è¨¼ãã¦, START
ã§ããã°èµ·åãããã¨ãæå³ãã¦ãã¾ã. batch
ã³ã³ããã¯ãã®åã®éã, å®éã«ãããå¦çãè¡ãã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã§ã. å½åã¯, ãã®ä¾åé¢ä¿ãéã«è¨å®ãã¦ãã¾ããã, ãããå¦çãèµ·åããªãã¨ããç¶æ³ã¯çµ¶å¯¾ã«é¿ãããã£ãã®ã§ (task-monitor
ã®èµ·åã«å¤±æããããããå¦çãèµ°ããªããã¨ã«ãªãã®ã¯ãã¡), batch
ã³ã³ãããå
ã«èµ·åãããããã«ãã¾ãã.
ã³ã³ããåæ¢ã®ã¿ã¤ã ã¢ã¦ã㯠stopTimeout
ãã¼ã«æå®ãã¾ã. æ大㯠120 ç§ã§, ä»åã¯ä¸è¨ã®éã, æ大㮠120 ç§ãè¨å®ãã¦ãã¾ã. ãã® stopTimeout
ã¯, ä¾åããã³ã³ãã (ä¸è¨ã®ä¾ã§ã¯, task-monitor
ã³ã³ãããä¾åãã¦ããã®ã¯ batch
ã³ã³ãã) ãç°å¸¸çµäºããéã«, å³åº§ã« task-monitor
ãå¼·å¶çµäºãããã®ã§ã¯ãªã, stopTimeout
ã§æå®ããç§æ°ã ãå¾
æ©ããä¸ã§åæ¢ãããã¨ãåºæ¥ãæ©è½ã§ã. æ¬å½ã«ãã®ãã©ã¡ã¼ã¿ãå¿
è¦ãªã®ã, 120 ç§ãå¾
æ©ããå¿
è¦ããããçã®èª²é¡ã¯æ®ã£ã¦ãã¾ãã, æ¤è¨¼æ®µéã§ã¯, ãã®ãã©ã¡ã¼ã¿ãã¤ãã¦ãããã¨ã§, å®å®ç¨¼åã確èªããã®ã§, è¨å®ããã¾ã¾ã«ãã¦ãã¾ã.
詳細ã«ã¤ãã¦ã¯, ãã¡ã ã, ãã¡ã ã«è¨è¼ããã¦ãã¾ã.
以ä¸
ãã¯ã, N çªç ããçã ããå 容ã§ãã, ECS ã®å é¨å®è£ ãã³ã³ãããªã½ã¼ã¹ã®åéçã§é常ã«åå¼·ã«ãªã£ãã®ã§ã¼ã ã§ãã.