LoginSignup
7
7

More than 3 years have passed since last update.

Amazon ECS ネットワークモードを検証してみる

Last updated at Posted at 2020-03-06

Amazon ECSネットワークモードを検証してみるというよりも簡単に詳しくのような纏めてみる。

1.host

→ 80 ➡︎

一つのホストで同じポートを利用するタスクを複数起動することはできません。

既に 80番ポートで起動していたとします。

docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                 PORTS               NAMES
8a2b3e44e650        nginx:latest                     "nginx -g 'daemon of…"   8 minutes ago       Up 8 minutes                               ecs-task03-1-continer03-e49ee9ace5befbded001
5218a3f2e942        amazon/amazon-ecs-agent:latest   "/agent"                 4 hours ago         Up 4 hours (healthy)                       ecs-agent

では、同じ80番ポートで起動してみよう。

このように、理由: ["RESOURCE:PORTS"]となり、タスクの実行に失敗する。

image.png

詳細:APIエラーメッセージ

2.bridge

→ 80 ➡︎ 80
→ 8080 ➡︎ 8888

ECSインスタンス(EC2)のENIを複数のタスクが共有で利用します。

通常のdockerのbridge(default)だと思えばいい。

docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                 PORTS               NAMES
06b03ada9531        nginx:latest                     "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes           80/tcp              ecs-task-d0306-1-continer0307-e8eafff7f9e89ffc9901
0486fed8a8a8        nginx:latest                     "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes           80/tcp              ecs-task-d0306-1-continer0306-d2b58bbdf4b5e0917900
8c96ab8d534b        amazon/amazon-ecs-agent:latest   "/agent"                 6 hours ago         Up 6 hours (healthy)                       ecs-agent

"Containers": {
            "0486fed8a8a8f80458cb5f0c88711f06755e9624a583b7a8201bf63d77a0a091": {
                "Name": "ecs-task-d0306-1-continer0306-d2b58bbdf4b5e0917900",
                "EndpointID": "ed47b3b141de336c5467fc46a669886cc501797fb2aceac0135424c980787f00",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "06b03ada953195a4c67dc1c987144328aaa9baf8ae11bccc51d7def154dac139": {
                "Name": "ecs-task-d0306-1-continer0307-e8eafff7f9e89ffc9901",
                "EndpointID": "cc475cb74d5f2c2c1d36ec84fba985d5aa966a377057ce82433c2313d7468bd7",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }

3.awsvpc

→ 80 ENI ➡︎ 80
→ 80 ENI ➡︎ 80

ENIごとにポートを指定できるので、bridgeのように同じホストが利用できなくなることはない。

ちなみに、ENIの数には注意する必要がある。

例えば、t2.micro で起動していたとする。なので、ENI の制限は 2。
詳細:Elastic Network Interfaces

Amazon EC2インスタンスには、それらに接続できるネットワークインターフェースの数に制限があり、プライマリネットワークインターフェースは1つとしてカウントされる。

まず1つ目のタスクを コンテナポート 80 で作成する。

ENI をのぞいてみるとENIが自動的に作成されたことがわかる。

image.png

作成したコンテナ以外に、今まであった amazon-ecs-agent、新しく amazon-ecs-pause が作成されたことがわかる。

docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                       PORTS               NAMES
25cc25fa9157        nginx:latest                     "nginx -g 'daemon of…"   About an hour ago   Up About an hour                                 ecs-task-d01-1-continer-9cfadeeb8ba9faec1100
a2b51724dd8b        amazon/amazon-ecs-pause:0.1.0    "./pause"                About an hour ago   Up About an hour                                 ecs-task-d01-1-internalecspause-d4ba96ffa4d197ec2000
8c96ab8d534b        amazon/amazon-ecs-agent:latest   "/agent"                 About an hour ago   Up About an hour (healthy)                       ecs-agent

プライベートIPに対して応答があることが確認できる。

curl http://10.0.2.226
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

新しいタスクを起動してみるとENIに制限理由: ["RESOURCE:ENI"]でタスクの実行に失敗する。
image.png
詳細:APIエラーメッセージ


リンク

Amazon ECS 細かい箇所を整理してみた

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7