代码之家  ›  专栏  ›  技术社区  ›  Saqib Ali

如何使AWS ECS任务定义使EC2实例可公开访问?

  •  0
  • Saqib Ali  · 技术社区  · 6 年前

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

    我需要这个任务的每个EC2实例都能让3026端口向全世界公开。我如何修改这个JSON来做到这一点?

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

    我真的不想再这样做了。

    {
        "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"
                    }
                }
    
            }
        ]
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Simonluca Landi    6 年前

    我建议的方法是配置与任务关联的ECS服务,然后使用应用程序负载平衡器(ALB)将公共流量路由到该服务。

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

    另一个(更便宜的)选项是使用Amazon提供的EC2实例元数据API,从该API读取实例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"
                ],