以下是我的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"
}
}
}
]
}
答案 0 :(得分:0)
我建议的方法是配置与您的任务关联的ECS服务,然后使用应用程序负载平衡器(ALB)将公共流量路由到该服务。
另一个(便宜的)选项是使用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实用程序。
此外,您需要更改任务docker映像的ENTRYPOINT
才能运行脚本,例如:
"entryPoint": [
"./script_to_setup_SG.sh && ./entrypoint_deployment.sh"
],