re:Invent 2018 - ALB 타깃그룹의 새로운 타입으로 AWS 람다 추가

애플리케이션 로드 밸런서 타깃그룹의 AWS 람다 타깃 타입 소개

AWS 람다AWS Lambda는 아마존 웹 서비스에서 제공하는 서버리스 애플리케이션 실행 환경입니다. 람다 함수를 AWS에 등록한 후, 내부 API를 통해서 호출하거나 S3, 키네시스Kinesis, SQS, 다이나모DBDynamoDB, 클라우드 트레일CloudTrail, SNS와 같은 AWS의 다른 서비스와 연동해서 사용할 수 있습니다. 또한 지금까지는 이를 외부에 HTTP(S) 프로토콜로 노출시키기 위해서 아마존 API 게이트웨이Amazon API Gateway를 사용해야만 했습니다. 이 기능은 유용하지만, 한 두개의 작은 인터페이스를 노출하는 용도로 사용하기에는 복잡한 편입니다.

AWS에서는 2018년 11월 29일 람다 함수를 애플리케이션 로드밸런서(ALB)를 통해서 호출 가능하다고 발표했습니다. 이를 통해 API 게이트웨이를 사용하지 않고도 기존의 로드 밸런서의 리스너로 람다 함수를 등록하는 것이 가능해졌습니다. 이 방법에도 장단점이 있습니다. 적절한 ALB가 있다면 람다를 호출하는 리스너만 추가해서 바로 사용할 수 있습니다. 하지만 람다 함수를 실행하기 위해 ALB를 새로 만들어야한다면 시간당 요금이 발생한다는 점을 고려할 필요가 있습니다. 기존의 아마존 API 게이트웨이와는 요금 방식이 완전히 다르므로 이를 고려해서 외부에 노출시키는 방법을 결정해야 합니다.

ALB 리스너 설정 상 달라지는 것은 없습니다. 이 기능을 좀 더 정확하게 설명해보자면, 타깃그룹의 새로운 타깃 타입으로 람다가 추가되었습니다. 람다를 호출하는 타깃그룹을 만들고 ALB 리스너에서 이 타깃그룹을 지정할 수 있습니다. 이를 통해 ALB 리스너를 통해 람다 함수가 호출됩니다. EC2 타깃그룹 웹콘솔에서는 타깃그룹과 람다 함수 등록을 한꺼번에 할 수 있습니다.

AWS 웹콘솔 - 람다 타입의 타깃그룹 생성 화면
AWS 웹콘솔 - 람다 타입의 타깃그룹 생성 화면
44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

awscli를 사용해 람다 타입의 타깃그룹 생성하기

awscli를 사용하는 경우에는 조금 더 복잡합니다. 여기서는 awscli를 사용해 타깃그룹을 생성하고, 람다 함수를 등록하는 방법을 간단히 소개하겠습니다.

먼저 다음 람다 함수를 hello_world.rb로 저장합니다.

이 파일을 hello_world.zip으로 압축합니다. lambda create-function 명령어로 람다 함수를 생성합니다.*

* 여기서는 람다 함수 생성시 사용할 IAM 역할이 있다고 가정합니다. IAM 역할에 대해서는 re:Invent 2018 - 람다(AWS Lambda), 프로그래밍 언어 루비(Ruby) 공식 지원을 발표에서 간략히 다루고 있으니 참고해주세요.

$ zip hello_world.zip hello_world.rb
$ aws lambda create-function \
  --function-name hello_ruby \
  --runtime ruby2.5 \
  --memory-size 128 \
  --handler hello_world.greeting \
  --role <ROLE_ARN> \
  --zip-file fileb://hello_world.zip

다음으로 타깃그룹을 만듭니다. 여기서 target-typelambda으로 지정합니다. 타깃그룹은 빈 상태로 만들어지기 때문에 이름과 타입만 지정하면 생성할 수 있습니다.*

* 이 글에서는 애플리케이션 로드 밸런스 리소스를 생성하지 않습니다. 클래식 로드 밸런서와 달리 애플리케이션 로드 밸런서는 타깃그룹과 분리되어있습니다.

$ aws elbv2 create-target-group \
  --name lambda-function-tg \
  --target-type lambda

타깃그룹이 정상적으로 생성되면 ARN 정보가 출력됩니다. 이 정보는 다음 명령어에 사용하니 기록해둡니다.

이제 람다 함수와 타깃그룹을 만들었으니 이 둘을 연결해줄 필요가 있습니다. 이에 앞서 할 일이 하나 더 있습니다. 람다 함수를 타깃그룹에서 호출하기 위해서는 타깃그룹에 이에 대한 권한을 부여할 필요가 있습니다. lambda add-permission 명령어로 타깃그룹에서 앞서 생성한 hello_ruby 람다 함수를 실행 가능하게 해줍니다. TARGET_GROUP_ARN에는 앞서 생성한 타깃그룹의 ARN을 지정합니다.

$ aws lambda add-permission \
  --function-name hello_ruby \
  --statement-id statement1 \
  --principal elasticloadbalancing.amazonaws.com \
  --action lambda:InvokeFunction \
  --source-arn <TARGET_GROUP_ARN>

이제 타깃그룹에 타깃(람다 함수)를 등록해줍니다. 타깃그룹의 ARN과 타깃의 ARN을 지정해주어야합니다. 이 때 targets 옵션은 Id=<LAMBDA_ARN> 형식으로 지정해줍니다.*

* I는 대문자이고, d는 소문자입니다. ID나 id로 입력할 경우 에러가 발생합니다.

$ aws elbv2 register-targets 
  --target-group-arn <TARGET_GROUP_ARN>
  --targets Id=<LAMBDA_ARN>

이걸로 람다를 타깃으로 타깃그룹을 만들었습니다. 여기서부터는 ALB에 리스터로 연결시켜주기만 하면 됩니다.

여기까지 새로운 타깃 타입을 사용하는 법을 알아보았습니다. 테스트 후에는 생성한 리소스를 삭제해주세요.

44BITS 로고

아마존 웹 서비스(AWS, Amazon Web Serivce)란?

🏷️ 키워드, 2020-01-20 - 아마존 웹 서비스는 아마존의 자회사로 같은 이름으로 퍼블릭 클라우드 컴퓨팅 서비스를 제공하고 있습니다. 대표적인 서비스로는 컴퓨팅 자원을 제공하는 EC2, 오브젝트 스토리지 S3, 프라이빗 클라우드 VPC, 권한 제어 IAM, 컨테이너 오케스트레이션 ECS, EKS 등이 있습니다.
44BITS 로고

AWS 람다(AWS Lambda)란?

🏷️ 키워드, 2020-02-08 - AWS 람다(AWS Lambda)는 아마존 웹서비스에서 제공하는 서버리스 컴퓨팅 서비스입니다. 2014년 AWS 리인벤트(AWS re:Invent)에서 처음 발표되었습니다. 서버리스 컴퓨팅은 애플리케이션을 실행하기 위핸 별도의 서버 준비 없이, 곧바로 코드를 실행해주는 서비스입니다.
도움이 되셨나요?
RSS 리더 피들리에서 최신 글을 구독할 수 있습니다.
트위터, 페이스북으로 44BITS의 새소식을 전해드립니다.
✔ 44BITS의 다른 활동도 확인해보세요. 다양한 채널에서 만나볼 수 있습니다.
✔ 따뜻한 댓글 하나와 피드백은 큰 힘이 됩니다.

의존성 관리 도구 캐스크(Cask)를 사용한 이맥스(Emacs) 환경설정

🗒 기사, 2014-06-01 - 이맥스(Emacs)를 확장하는 방대한 패키지들이 있습니다. 이러한 패키지들을 설치하다보면 관리가 점점 더 어려워집니다. 캐스크(Cask)는 이맥스 개발환경의 의존성을 관리해주는 도구입니다. 이 글에서는 캐스크를 사용해서 이맥스 사용자 환경설정을 관리하는 방법을 소개합니다.

만들면서 배우는 아마존 VPC(Amazon VPC) 입문: AWS 네트워크의 기초

🗒 기사, 2019-05-14 - 아마존 버추얼 프라이빗 클라우드(Amazon VPC)는 아마존 웹 서비스(Amazon Web Service)의 가장 기본이 되는 네트워크 서비스이자 리소스입니다. AWS에서 제공하는 대부분의 리소스들은 아마존 VPC를 기반으로 실행됩니다. 따라서 VPC를 이해하고 있어야 AWS 서비스를 십분 활용할 수 있습니다. 이 글에서는 기본 VPC와 같은 구성을 직접 만들어보면서 VPC의 기본 개념과 리소스들을 소개합니다.

개인 VPN 서버 클라우드 구축 가이드(feat. Algo)

🗒 기사, 2020-01-07 - Algo는 클라우드에 쉽게 설치해서 사용가능한 VPN 서버입니다. 이 글에서는 설치형 개인 VPN Algo의 설치 원리를 소개하고 아마존 라이트세일(Amazon Lightsail)에 배포하는 방법을 소개합니다. 그리고 iOS와 맥OS에서 와이어가드(WireGuard) 클라이언트로 VPN 서버를 사용하는 방법을 알려드립니다.