비밀번호

커뮤니티2

  • 구름조금속초10.5맑음북춘천12.0맑음철원12.6맑음동두천13.8구름조금파주11.2구름많음대관령9.2맑음춘천13.0박무백령도9.5구름많음북강릉12.3구름많음강릉12.5구름조금동해10.9맑음서울12.6맑음인천10.5구름조금원주13.4맑음울릉도12.6맑음수원11.7구름조금영월12.9맑음충주11.6맑음서산13.0구름조금울진11.1맑음청주13.7맑음대전14.1구름조금추풍령12.9맑음안동12.7맑음상주12.8맑음포항15.1맑음군산12.4맑음대구14.0맑음전주14.2맑음울산13.8맑음창원15.4맑음광주13.0맑음부산14.2맑음통영13.7맑음목포11.3맑음여수13.7맑음흑산도12.2맑음완도14.4맑음고창12.7맑음순천12.8맑음홍성13.7맑음서청주14.1구름많음제주12.4맑음고산13.2구름조금성산14.2구름조금서귀포14.7맑음진주13.3맑음강화10.3맑음양평11.7구름조금이천12.7구름조금인제11.7맑음홍천12.4구름많음태백10.3구름조금정선군12.2맑음제천12.0맑음보은13.2맑음천안12.7맑음보령13.1맑음부여13.3구름조금금산13.9맑음세종13.6맑음부안14.1맑음임실13.4맑음정읍14.0맑음남원12.9구름조금장수13.0맑음고창군14.6맑음영광군13.2맑음김해시14.1맑음순창군12.8맑음북창원14.6맑음양산시15.7맑음보성군14.3구름조금강진군13.6구름조금장흥13.5구름조금해남12.9구름조금고흥14.6맑음의령군14.9구름조금함양군14.9맑음광양시14.7맑음진도군12.0맑음봉화12.3구름조금영주12.9구름조금문경14.3맑음청송군13.3맑음영덕15.4맑음의성13.4맑음구미14.5맑음영천14.3맑음경주시14.8구름조금거창13.1맑음합천14.1맑음밀양13.8맑음산청14.1맑음거제13.6맑음남해13.4맑음북부산15.0
  • 2025.04.04(금)

데이터 엔지니어링데이터 엔지니어링

Airflow AwsEcsExecutor Fargate 워커 사용 시 ECR 태스크 정의 설정

이전 포스트중 AwsEcsExecutor를 사용하는 Airflow의 DAG및 Task 작성법과 무중단 배포를 적었습니다. 이번에는 Airflow worker를 실행할 ECS 내의 태스크 정의를 설정하는 법에 대해 다룹니다.

 

ECS에서 Fargate를 실행하기 위해선 Task definition detail(태스크 정의)를 설정해야 합니다.

이는 Fargate 노드의 리소스 프로비저닝, 실행할 이미지 등을 설정하기위해 필요한 과정입니다.

 

위는 테스크 정의의 인프라 요구 사항 항목입니다. 테스크의 인프라를 정의하는데 쓰입니다.

여기서 테스크 크기 설정은 테스크 실행 시에 오버라이드가 가능하므로 따로 설정하지 않아도 됩니다.

 

테스크 역할은 테스크가 실행되는 동안 부여받을 역할입니다. 작업중에 S3 또는 Lambda 등 권한이 필요한 작업이 있을 경우 따로 액세스 키를 사용하지 않아도 역할을 통해 사용할 수 있습니다.

 

테스크 실행 역할은 테스크 실행 시에 필요한 역할로 이미지를 가져올 ECR의 인증 권한 등이 필요하며, 이는 AWS에서 자동으로 생성됩니다.

 

위는 작업 실행 시 띄울 컨테이너들의 정의입니다.

컨테이너 이름과 이미지 URI를 지정하며 컨테이너 관련 여러가지 설정을 할 수 있습니다.

워커로 실행 시에는 Airflow가 설치되어있어야 하므로 기본적으로 Airflow 이미지를 베이스로 사용합니다.

https://hub.docker.com/r/apache/airflow

컨테이너의 리소스 할당 제한 또한 Executor 설정에서 오버라이드 가능하므로 따로 설정하지 않습니다.

 

이외 필요한 환경 변수 및 환경 파일 등을 설정하며

로그 설정의 경우 Remote Logging을 사용할 경우 따로 설정하지 않아도 되며 CloudWatch 로그 또한 사용할 수 있습니다.

 

필요한 경우 임시 스토리지를 추가로 설정할 수 있습니다. 기본적으로 Fargate 노드 당 20GiB의 기본 스토리지가 제공됩니다.

 


{

    "taskDefinitionArn": "<태스크 정의 ARN>",

    "containerDefinitions": [

        {

            "name": "worker",

            "image": "<이미지 URI>",

            "cpu": 0,

            "portMappings": [],

            "essential": true,

            "environment": [],

            "mountPoints": [],

            "volumesFrom": [],

            "systemControls": []

        }

    ],

    "family": "airflow-worker",

    "executionRoleArn": "<워커 테스크 실행 역할 ARN>",

    "networkMode": "awsvpc",

    "revision": 3,

    "volumes": [],

    "status": "ACTIVE",

    "requiresAttributes": [

        {

            "name": "com.amazonaws.ecs.capability.ecr-auth"

        },

        {

            "name": "ecs.capability.execution-role-ecr-pull"

        },

        {

            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"

        },

        {

            "name": "ecs.capability.task-eni"

        }

    ],

    "placementConstraints": [],

    "compatibilities": [

        "EC2",

        "FARGATE"

    ],

    "requiresCompatibilities": [

        "FARGATE"

    ],

    "cpu": "256",

    "memory": "512",

    "runtimePlatform": {

        "cpuArchitecture": "ARM64",

        "operatingSystemFamily": "LINUX"

    },

    "registeredAt": "2024-08-08T02:03:40.669Z",

    "registeredBy": "<생성 유저 ARN>",

    "tags": []

}

 

테스크 정의는 JSON으로도 작성될 수 있으며 콘솔 UI에서 설정할 수 없는 세부적인 설정이 가능하므로 문서를 참고해서 작성하실 수 있습니다.

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/task_definitions.html

전체댓글0

검색결과는 총 25건 입니다.    글쓰기
1 2