首页 > 解决方案 > 如何使 AWS ECS 任务定义使 EC2 实例可公开访问?

问题描述

下面是我对 ECS 的 AWS 任务定义。

我需要这个任务的每个 EC2 实例让世界可以公开访问端口 3026。我怎样才能修改这个 JSON 来做到这一点?

目前,在服务运行此任务后,我手动查找 EC2 实例,然后手动添加一个安全组,允许从该端口的 0.0.0.0/0 进入。

但我真的很想知道如何让这个 JSON 做到这一点,所以我不再需要手动去做。

{
    "family": "myproj",
    "requiresCompatibilities": [
        "EC2"
    ],
    "containerDefinitions": [
        {
            "memory": 500,
            "memoryReservation": 350,
            "name": "myproj",
            "image": "blah.dkr.ecr.us-east-1.amazonaws.com/myproj:latest",
            "essential": true,
            "portMappings": [
                {
                    "hostPort": 3026,
                    "containerPort": 8000,
                    "protocol": "tcp"
                }
            ],
            "entryPoint": [
                "./entrypoint_deployment.sh"
            ],
            "environment" : [
                { "name" : "DB_HOST", "value" : "blah.blah.us-east-1.rds.amazonaws.com" }
            ],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/myproj",
                    "awslogs-region": "us-east-1",
                    "awslogs-stream-prefix": "ecs"
                }
            }

        }
    ]
}

标签: amazon-web-servicesdockeramazon-ecs

解决方案


我建议的方法是配置与您的任务关联的 ECS 服务,然后使用 Application Load Balancer (ALB) 将公共流量路由到该服务。

本指南应该可以帮助您:https ://aws.amazon.com/blogs/compute/microservice-delivery-with-amazon-ecs-and-application-load-balancers/

另一个(更便宜的)选项是使用 Amazon 提供的 EC2 实例元数据 API,从该 API 读取 instance_id 值,并在容器启动时使用“aws-cli”实用程序更新安全组。像这样的脚本应该可以工作(在容器内运行):

export SECURITY_GROUP=sg-12345678
export INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
aws ec2 modify-instance-attribute --instance-id INSTANCE_ID --groups $SECURITY_GROUP

您需要SECURITY_GROUP相应地设置并在您正在运行的任务的 docker 映像中安装 aws ec2 实用程序。此外,您需要更改ENTRYPOINT任务 docker 映像以运行脚本,例如:

"entryPoint": [
                "./script_to_setup_SG.sh && ./entrypoint_deployment.sh"
            ],

推荐阅读