Okay, I've followed the docs on How to create Task Definition using AWS console. I also created a cluster before creating Task Definition. Task (i.e. the container) is running using provided image URI which is on ECR. I can see logs nicely on CloudWatch as well as in ECS itself.
When I go to:
Amazon Elastic Container Service -> Clusters -> AwsTutorialECSCluster -> Tasks -> myTaskId -> Configuration
I can see public IP. The application in question is simple Spring Boot app with default settings.
@SpringBootApplication
@RestController
@RequestMapping("aws")
public class AwsTutorialApplication {
public static void main(String[] args) {
SpringApplication.run(AwsTutorialApplication.class, args);
}
@GetMapping("/hello")
public String helloAws(){
return "Hello from AWS!";
}
}
I cannot get response when I try any of the following:
http://publicIp:8080/aws/hello
http://publicIp:80/aws/hello
http://publicIp/aws/hello
While creating Task definition I also added the Role with managed policy: AwsTutorialECS_FullAccess_Role
I will pass json Task definition:
{
"taskDefinitionArn": "arn:aws:ecs:eu-central-1:myAccount:task-definition/NewTaskDefinition:1",
"containerDefinitions": [
{
"name": "spring-boot-container",
"image": "myAcc.dkr.ecr.eu-central-1.amazonaws.com/aws-tutorial:latest",
"cpu": 0,
"memory": 3072,
"portMappings": [
{
"name": "spring-boot-container-8080-tcp",
"containerPort": 8080,
"hostPort": 8080,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/NewTaskDefinition",
"awslogs-region": "eu-central-1",
"awslogs-stream-prefix": "ecs"
}
}
}
],
"family": "NewTaskDefinition",
"taskRoleArn": "arn:aws:iam::myAccount:role/AwsTutorialECS_FullAccess_Role",
"executionRoleArn": "arn:aws:iam::myAccount:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"revision": 1,
"volumes": [],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.ecr-auth"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.task-iam-role"
},
{
"name": "ecs.capability.execution-role-ecr-pull"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2",
"FARGATE"
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "1024",
"memory": "3072",
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
},
"registeredAt": "2023-03-21T18:20:52.034Z",
"registeredBy": "arn:aws:iam::accountiD:user/myUserName",
"tags": []
}
User has AdministratorAccess IAM role.
Why is this so complicated?!?
Update 1:
Based on the comments for security groups. I delete Task Definition, unregistered and stop Task. Recreated everything again. When I go to Deploy -> Run Task:
Still cannot hit an endpoint. Also, I disabled cors with @CrossOrigin and:
@Configuration
public class Config implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("*");
}
}