f-lab-edu / retry-lee

0 stars 1 forks source link

[System Design] ECS 생성 #34

Closed sypatrick closed 1 month ago

sypatrick commented 2 months ago
  1. Task definition 설정
  2. Service 설정
sypatrick commented 2 months ago

8~10시간 예상

sypatrick commented 1 month ago

예상시간 초과

이유

  1. Task Definition 생성 후 Service에서 배포할때 실패
  2. Task Definition 수정 후 Service 생성하여 배포시까지 시간이 대략 15분정도 걸려 한번 테스트하는데 있어서 시간이 너무 소요된다.
  3. 이것저것 테스트 해보다 확인해보니 15분 걸렸던 이유가 ECR 에 접근하지 못하고 계속 시도하였기 때문이었다. (IAM 역할에서 권한 부여 해주니, 이건 어느정도 해소 되었다.)
  4. 15분 걸리던게, 5분정도로 줄긴했지만 여전히 이벤트 로그에서는 배포 실패했는데, ENI 가 존재하지 않다는 오류와 함께 뭔지 찾아보니, task 실행되면서 자동으로 네트워크 인터페이스가 생성되는데, 배포 실패하면 자동으로 삭제되어 존재하지 않는다는 오류가 제일 마지막에 나타났던것.
  5. 종료코드 1 이라는 에러 메시지도 같이 나오는데, aws에서 찾아보니 이는 어플리케이션 실행 실패일 확률이 높다고 하여 로컬에서 aws cli 설치후 docker image 를 ecr로 push 하기도 하고, ecr에서 로컬로 받아와 실행시켜 보면 정상작동함.
  6. cloud watch 라는 서비스에서 어플리케이션 로그 확인을 할 수 있다는 것을 알게되어 확인해보니 Could not obtain connection to query metadata 오류와 함께 Null Pointer Exception 발생, DB 연결 문제라는 것을 확인했다.
  7. RDS 데이터베이스에 적용된 보안그룹을 아예 생각하지 못하고 있었는데, 이 보안그룹의 인바운드 규칙이 현재 내 로컬 PC 에서만 접근이 되게 되어있었다.
  8. 해당 인바운드규칙에 ECS Service 에서 적용하는 보안그룹을 추가
  9. 배포 완료.
  10. 부여된 퍼블릭 IP 로 어플리케이션 동작하는 것 확인. ( 3.36.99.107:8081/ )

로컬테스트

  1. aws cli로 docker image 생성해서 ECR에 업로드
  2. ECR에서 pull 해서 docker desktop에서 실행
  3. API 요청보내면 DB에 저장되는 것 까지 확인.
sypatrick commented 1 month ago

Task Definition

{
    "taskDefinitionArn": "arn:aws:ecs:ap-northeast-2:992382387989:task-definition/retry-lee-user:6",
    "containerDefinitions": [
        {
            "name": "api-user",
            "image": "992382387989.dkr.ecr.ap-northeast-2.amazonaws.com/sypatrick/retry-lee:latest-user",
            "cpu": 0,
            "portMappings": [
                {
                    "name": "api-user-8081-tcp",
                    "containerPort": 8081,
                    "hostPort": 8081,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": true,
            "environment": [],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "ulimits": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/retry-lee-user",
                    "mode": "non-blocking",
                    "awslogs-create-group": "true",
                    "max-buffer-size": "25m",
                    "awslogs-region": "ap-northeast-2",
                    "awslogs-stream-prefix": "ecs"
                },
                "secretOptions": []
            },
            "systemControls": []
        }
    ],
    "family": "retry-lee-user",
    "taskRoleArn": "arn:aws:iam::992382387989:role/ECSrole_patrick",
    "executionRoleArn": "arn:aws:iam::992382387989:role/ECSrole_patrick",
    "networkMode": "awsvpc",
    "revision": 6,
    "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.docker-remote-api.1.28"
        },
        {
            "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": "2024-09-10T10:31:49.740Z",
    "registeredBy": "arn:aws:iam::992382387989:root",
    "tags": []
}