티스토리 뷰
AWS Batch는 우리 개발자들이 흔히 알고 있는 바로 그 배치입니다
AWS Batch를 사용하면 업계 전반의 개발자, 과학자, 엔지니어가 수십만 개의 배치 컴퓨팅 작업을 효율적으로 실행하는 동시에 컴퓨팅 리소스를 최적화하여 결과 분석 및 문제 해결에 집중할 수 있는 기능을 제공합니다.
AWS 홈페이지에서는 이런게 설명이되어있는데요
활용 예로 DNA 시퀀싱, 트랜스코딩과 같은 것들이 설명되어있습니다
aws batch는 ecs를 통해 실행되고 ecs를 통해 실행된 인프라 리소스에 대한 청구만이 발생합니다
실제로 aws batch를 구성하면 내가 직접 생성하지 않았지만
aws batch를 통해 생성된 ecs 클러스터가 있는 것을 확인할 수 있습니다
AWS Batch를 이용하여 항상 실행되는 인스턴스를 유지하지 않으면서도 배치를 실행하는 작업을 해보겠습니다
AWS 배치는 크게 다음과 같은 구성요소로 되어있습니다
- 컴퓨팅환경
- 작업대기열
- 작업정의
그리고 바로 이 스택의 위에 개별 작업(task)이라는것이 존재합니다
컴퓨팅환경
배치 작업이 실행될때 사용되는 ecs 컨테이너의 인스턴스 타입, 네트워크 구성 등을 만들어 놓는 곳입니다
실제 배치에서 사용될 인프라 리소스를 의미합니다
배치 작업을 실행할때 원하는 작업 대기열 종류를 선택할 수 있는데
이후에 만들게될 작업대기열이 하나 이상의 컴퓨팅 환경에 매칭되고,
여러분은 이렇게 만들어진 각기 다른 컴퓨팅 환경을 갖고 있는 작업대기열중에 배치 작업의 용도와 필요에 따라
fargate 형식을 쓸지 ec2 타입을 쓸지, 혹은 spot 인스턴스 타입을 쓰고있는 작업 대기열을 쓸지 골라 쓰면 되겠습니다
컴퓨팅 환경은
- Fargate
- EC2
- EKS
세개의 환경 중에 골라서 만들 수 있습니다
빠르게 시작되어야하는 경우 fargate를 선택하고, 높은 수준의 처리량이 필요한 경우에 ec2를 선택하는 등의 약간의 가이드 정도가 있긴한데 여러분이 원하는 종류로 선택하시면 되겠습니다
컴퓨팅 환경에서 스팟인스턴스도 사용이 가능합니다
EC2 환경을 설정하고, 스팟인스턴스 사용을 체크하면 추가로 여러가지를 선택할 수 있는데
여기서 가격 최대 %를 너무 낮게 설정하였을때 해당 가격의 스팟인스턴스가 없는 경우 배치 작업이 실행이 되지 않게 된다고 합니다
주의하는것이 좋겠습니다
실행할 작업이 없을때는 인스턴스를 종료하기 위해 최소 vCPU를 0으로 설정할수 있습니다
인스턴스 유형에서 optimal은 최적의 인스턴스 유형을 자동으로 골라 사용합니다
배치가 긴 시간 동작하지 않는다면 spot으로 충분합니다
인스턴스 구성 이후에는 배치가 실행되는 리소스의 네트워크 설정도 필요합니다
작업대기열
이제 컴퓨팅 환경을 만들었으니
컴퓨팅 환경을 사용할 작업 대기열을 만들어야 합니다
작업 대기열도 마찬가지로 fargate, ec2, eks 중에 선택할 수 있습니다
작업 대기열에서 선택한 유형과 같은 종류의 컴퓨팅 환경을 연결할 수 있습니다
작업 대기열이 ec2 라면 컴퓨팅 환경도 ec2만 선택이 가능합니다
작업정의
컴퓨팅 환경도 만들었고, 컴퓨팅 환경을 연결한 작업대기열도 만들었습니다
작업 정의를 설정하기 전에 작업정의 전에서 미리 만들어두어야 할 역할이 있습니다
aws batch는 ECS를 활용한다고 말씀드렸는데요
그렇기 때문에 aws batch가 ecs 를 통해 작업을 실행할 수 있도록 관련 권한을 가지고 있는 역할을 설정해야합니다
IAM에서 역할을 생성합니다
엔터티 유형에 AWS 서비스를 선택하고 Elastic Container Service를 선택, 사용 사례로 Elastic Container Service Task를 선택합니다
그리고 권한에 AmazonECSTaskExecutionRolePolicy를 검색하여 추가합니다
신뢰관계에 아래와 같이 입력합니다
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
역할 이름으로 ecsTaskExecutionRole 으로 설정하고 저장합니다
이제 이 역할을 작업 정의에서 사용할 것입니다
그리고 준비물이 하나더 있습니다
aws batch는 ECR에 저장된 이미지를 기반으로 합니다
그래서 작업 정의시에 ECR에 저장된 레포지토리 URI를 입력해야합니다
ECR에 컨테이너 이미지를 업로드하는 방법은 아래의 링크를 참고하세요
https://trend21c.tistory.com/2385
이제 준비물 "IAM 역할"과 "ECR 이미지" 두개를 갖췄습니다
준비를 마쳤으니 순조롭게 작업 정의를 생성해봅시다
작업정의는 말 그대로 배치에 대한 것을 정의합니다
사용할 이미지, 명령어, 리소스, 재시도, 로깅 등
작업 정의의 실행 역할에서 우리가 이전에 만들었던 ecsTaskExecutionRole을 선택하면 됩니다
ECR 이미지 URI를 입력하고
해당 이미지의 컨테이너에서 실행할 명령어도 입력합니다
로깅에서는 awslogs를 선택하여 cloudwatch로 로그가 전송되도록 설정할 수 있습니다
드디어 이제 배치를 실행할 준비가 다 되었네요
작업을 만들어 봅시다
지금 만드는 작업이 곧 진짜 배치를 실행하는것입니다
이름은 구별용도로 작성하시면 되고
작업정의와, 작업 대기열을 우리가 만들었던 것 중에 원하시는 것을 고르면 됩니다
작업이 어떻게 실행되는지에 대한 정의와, 어떤 컴퓨팅환경을 통해 실행될지에 대한 내용이 서로 분리되어 구성되어 있다는 것을 다시금 알 수 있습니다
작업 정의의 값을 재정의 할 수 있습니다
그리고 작업을 생성하면 바로 배치가 실행됩니다
배치가 실행되지 않고 계속 runnable 상태에서 멈춰있는 경우가 있는데요
여러 이유가 있겠지만 저는 너무 낮은 자원을 설정해서 동작을 하지 않았더라구요
vcpu 2개, 메모리 4기가로 설정하니 정상적으로 잘 동작했습니다
이렇게 GUI를 이용하거나 CLI를 이용하여 작업을 생성하는 것으로 배치를 실행할수 있게 되었습니다
만들고보니 필요한게 더 생각납니다
배치가 완료되거나 실패할때 알림을 주고 싶기도하고,
cronjob처럼 배치를 정해진 시간에 실행하도록 하고 싶기도한데요
이 두가지는 다음 포스팅에서 이어서 작성해볼께요
'AWS' 카테고리의 다른 글
aws batch 작업 결과를 sns 알림받기 (0) | 2024.12.27 |
---|---|
aws batch를 cron 처럼 주기적으로 실행하기 (0) | 2024.12.26 |
ECR에 도커 이미지 푸시하기 (0) | 2024.12.16 |
AWS cloudwatch 지표필터 만들기 (0) | 2024.06.20 |
aws cloudfront에서 index.html의 캐싱을 막자 (0) | 2023.03.03 |
- Total
- Today
- Yesterday
- 애플
- JavaScript
- iPhone
- Apple
- CSS
- 벤처
- 게임
- 네이버
- 소프트웨어
- 아이디어
- 공모전
- 구글
- 웹표준
- 앱
- 안드로이드
- 자바스크립트
- 트위터
- 아이폰
- AWS
- android
- 경진대회
- php
- 앱스토어
- 창업
- 모바일
- 대학생
- 스마트폰
- 어플리케이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |