Lambda함수의 리턴값을 ALB를 통해 페이지에 표시하기

2021.11.25

안녕하세요, 임채정입니다.
오늘은 람다 함수와 ALB를 만들어서 람다 함수를 실행시켰을 때 ALB를 통새 인터넷 화면에 출력하는 방법을 정리해보려고 합니다.

아젠다

  1. 람다 함수 작성
  2. ALB 작성
  3. 테스트1
  4. 람다 함수의 코드 내용 변경
  5. 테스트2
  6. 로그 확인

1. 람다 함수 작성

먼저 람다 함수부터 작성해보겠습니다.
새로운 함수를 작성하기 위해 [함수 생성] 버튼을 눌러줍니다.

새로운 함수를 생성할 것이기 때문에 [새로 작성]을 클릭하고, 이름과 런타임을 입력합니다.
함수 이름 : lambda-alb
럼타임 : Python 3.9

그리고 생성을 해주면 람다 함수가 작성되었습니다.

2. ALB 작성

이번에는 ALB를 작성해주겠습니다.
로그 밸런서를 생성해줍니다.

저희가 이번에 작성할 ALB(Application Load Balancer)을 선택합니다.

다음의 정보를 입력합니다.
로그 밸런서 이름 : alb-lambda-demo
AZ : 모두 선택

다음으로는 보안 그룹을 설정해주기 위해 새로운 보안 그룹을 생성해줍니다.

보안 그룹 이름 : elb-sg
인바운드 그룹 : HTTP 80 내IP

보안그룹이 생성이 됐으면 로그 밸런스 작성 페이지로 돌아가서 만든 보안 그룹(elb-sg)을 선택합니다.

마지막으로 리스너 및 라우팅 부분에서 대상그룹을 지정해 줍니다.
아직 대상그룹을 작성하지 않았기 때문에 [대상그룹 생성]을 눌러줍니다.

대상 유형 선택 : Lambda 함수
대상 그룹 이름 : tg-lambda
을 선택, 입력해준 후에 [다음]을 눌러줍니다.

대상 등록을 하기 위해 위에서 작성해준 람다 함수(lambda-alb)를 선택합니다.

그리고 [대상그룹을 생성]을 클릭하면 성공적으로 대상그룹이 작성되었습니다.

다시 ALB 생성 페이지로 돌아와서 아까 만든 대상 그룹을 선택합니다.

그리고 생성을 하면 ALB가 성공적으로 작성되었습니다.

람다에서 확인을 해보면 ALB가 트리거로 추가되어 있는걸 확인할 수 있습니다.

3. 테스트1

실제로 테스트 해보기 위해 ALB페이지에서 DNS이름을 복사해서 인터넷에 접속을 해봤습니다.

그러면 페이지는 이동되지 않지만 어떤 파일이 다운로드가 됩니다.

다운로드된 파일을 확인을 해보면 현재 람다 함수인 lambda-alb의 리턴값인 Hello from Lambda!이 입력되어 있는 걸 확인할 수 있습니다.

하지만 이번 블로그에서는 ALB의 DNS 페이지로 이동되었을 때 리턴값이 화면에 표시되도록 만들고 싶기때문에 람다 함수를 변경해보겠습니다.

4. 람다 함수의 코드 내용 변경

람다함수를 변경을 해봅시다.
람다 함수의 변경 코드는 아래 URL을 참고했습니다.

함수의 코드를 변경해줍니다.
리턴값으로 받는 값은 body<h1> 태그 사이에 넣어줍니다.

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        "statusCode": 200,
        "statusDescription": "200 OK",
        "isBase64Encoded": False,
        "headers": {
            "Content-Type": "text/html"
        },
        "body": "<h1>Hello from Lambda!</h1>"
    }

코드를 변경한 후 적용을 하기 위해서 코드 위에 있는 [Deploy]를 누르면, Changes not deployed로 되어 있는 것이 Changes not deployed으로 바꾸면서 초록색 배경으로 변경됩니다.

이렇게 되면 이제 LB의 DNS 이름으로 인터넷에 접속했을 때 파일을 다운받는 것이 아니라 화면에 표시를 합니다.
실제로 테스트를 다시 한 번 해봅시다.

5. 테스트2

테스트1에서와 똑같이 ALB페이지에서 DNS이름을 복사해서 인터넷에 접속을 합니다.

이번에는 아까와는 다르게 화면이 이동하면서 리턴값인 Hello from Lambda!가 화면에 성공적으로 출력되었습니다.

6. 로그 확인

마지막으로 람다 함수로 돌아가서 실행된 로그를 한 번 확인해보겠습니다.
람다 함수에서 [모니터링] > [로그]에 들어가면 함수가 실행되면서 남은 로그를 확인할 수 있습니다.
로그의 [LogStream]을 클릭해서 더 자세한 로그를 확인해보겠습니다.

메시지 중에 requestContext라고 쓰인 부분을 클릭하면 자세하게 볼 수 있는데 이 로그에서 실행된 람다 함수에 대한 자세한 정보를 확인할 수 있습니다.