안녕하세요
이번 시간에는 AWS Lambda에 대해 알아보고 2가지 방법으로 외부 모듈을 적용하는 실습을 진행하겠습니다.
1. Lambda 란?
AWS Lambda는 Amazon Web Services의 서비스 중 하나로, 서버리스 아키텍처를 구현할 때 사용됩니다. 이는 개발자가 애플리케이션 코드를 실행하는 데 필요한 서버 인프라를 관리할 필요 없이 코드 실행에 집중할 수 있도록 도와줍니다.
2. Lambda의 장점
1. 서버리스 아키텍처
AWS Lambda를 사용하면 서버 인프라를 구축, 관리할 필요가 없으므로 개발자는 애플리케이션 코드에 집중할 수 있습니다.
2. 사용한 만큼 비용 지불
AWS Lambda는 코드 실행 시간에 따라 과금됩니다. 따라서 코드가 실행되지 않을 때는 비용이 들지 않습니다.
3. 확장성
AWS Lambda는 자동으로 코드를 확장하여 대규모 트래픽을 처리할 수 있습니다. 이는 개발자가 확장성에 대한 걱정 없이 코드를 작성할 수 있도록 해줍니다.
4. 다양한 이벤트 트리거
AWS Lambda는 여러 가지 이벤트 트리거를 지원합니다. 이를 통해 다양한 서비스와 통합하여 사용할 수 있습니다.
5. 보안
AWS Lambda는 암호화된 서버리스 아키텍처를 제공하여 애플리케이션 보안에 더욱 신경을 쓸 필요가 없도록 해줍니다.
6. 다양한 프로그래밍 언어 지원
AWS Lambda는 다양한 프로그래밍 언어를 지원합니다. 따라서 개발자는 선호하는 언어로 코드를 작성할 수 있습니다.
3. Lambda에 외부 모듈 적용하는 방법
AWS Lambda에서 외부 모듈을 사용하는 방법에는 두 가지가 있습니다. 첫 번째는 ZIP 파일을 사용하여 모듈을 업로드하는 것이고, 두 번째는 Lambda 계층을 사용하여 모듈을 업로드하는 것입니다.
1. ZIP 파일을 사용하여 모듈 업로드하기
Lambda 함수에서 외부 모듈을 사용하려면 모듈을 함수와 함께 업로드해야 합니다. 이를 위해 일반적으로 ZIP 파일을 사용합니다.
ZIP 파일에는 Lambda 함수에서 사용하는 코드와 해당 코드가 호출하는 외부 모듈의 라이브러리가 포함됩니다. ZIP 파일을 생성한 후 Lambda 콘솔 또는 AWS CLI를 사용하여 함수를 만들 때 업로드합니다. Lambda 함수가 실행될 때 모든 코드와 모듈이 로드되고 실행됩니다.
장점
(1) 모든 코드와 모듈이 함께 업로드되기 때문에 Lambda 함수를 실행하는 데 필요한 모든 것이 포함됩니다.
(2) 라이브러리가 매우 작거나 사용하는 라이브러리가 적은 경우 유용합니다.
단점
(1) Lambda 함수의 크기가 증가하여 배포 및 업데이트가 느려질 수 있습니다.
(2) Lambda 함수의 코드 변경 시 새로운 ZIP 파일을 만들어야 합니다.
2. Lambda 계층을 사용하여 모듈 업로드하기
Lambda 계층은 여러 Lambda 함수에서 공유할 수 있는 코드 및 라이브러리의 집합입니다. 모듈이 계층에 추가되면 모든 함수에서 해당 모듈을 사용할 수 있습니다. 계층은 Lambda 함수에서 코드와 모듈을 분리하여 Lambda 함수의 크기를 줄이고 코드 재사용성을 높입니다.
Lambda 함수에서 사용하려는 모듈을 계층에 추가하면 해당 모듈은 계층의 ARN(Amazon 리소스 이름)을 통해 함수에서 참조할 수 있습니다. 계층을 만들 때는 Python 패키지의 최상위 디렉터리를 압축하여 계층으로 업로드해야 합니다.
장점
(1) Lambda 함수의 크기가 작아지므로 배포 및 업데이트가 빠릅니다.
(2) 코드 재사용성이 높아지므로 Lambda 함수를 여러 개 만들 때 유용합니다.
단점
(1) 계층을 사용하려면 AWS 계정에 Lambda 계층을 생성하고, 계층에 모듈을 추가해야합니다. 이 작업은 ZIP 파일을 사용하는 방법보다 복잡합니다.
(2) 계층에 추가된 모듈이 모든 함수에서 사용되지 않는 경우 계층의 크기가 증가하여 비용이 발생할 수 있습니다.
(3) 계층을 사용하려면 AWS CLI 또는 AWS Management 콘솔을 사용하여 계층을 생성해야합니다.
(4) 계층을 생성한 후 계층 버전을 만들고 ARN을 기록해야 합니다.
(5) 계층 버전 ARN을 사용하여 Lambda 함수에서 모듈을 호출합니다.
(6) 모듈이 자주 업데이트되는 경우 계층의 모듈도 함께 업데이트해야 하므로 관리 부담이 있습니다.
(7) 계층은 Lambda 함수에서 사용되지 않는 경우에도 요금이 부과됩니다.
ZIP 파일을 사용하는 방법은 라이브러리 크기가 작은 경우나 사용자 정의 라이브러리를 재사용하는 경우에 유용합니다. 계층을 사용하는 방법은 Lambda 함수의 크기를 줄이고 코드 재사용성을 높이는데 유용하며, 라이브러리의 크기가 크거나 여러 Lambda 함수에서 재사용될 때 유용합니다. 선택은 개발자가 직접 판단하고 상황에 맞게 선택하면 됩니다.
4. Lambda 외부 모듈 적용 실습하기
1. ZIP 파일을 사용하여 모듈 업로드하기
바탕화면에 [python] 이름의 폴더를 만들어 줍니다. Lambda에서 외부 모듈을 인식할 때 python인 폴더를 인식하기 때문에 폴더 이름은 [python]으로 지정합니다.
[cmd]를 실행합니다.
pip install datetime -t .
바탕화면에 생성한 [python] 폴더 경로로 들어가서 다음과 같은 명령어로 datetime 모듈을 설치합니다.
다음과 같이 python 폴더 안에 datetime 모듈이 설치된 것을 확인할 수 있습니다.
다음과 같이 python 폴더를 [python]이라는 ZIP 파일로 압축합니다.
AWS 콘솔에 접속하여 Lambda 서비스를 검색한 후 선택합니다.
우측 상단에 [함수 생성]이라는 버튼이 있는데 버튼을 눌러 함수를 생성합니다.
다음과 같이 함수 이름, 런타임, 아키텍처를 설정한 후 [함수 생성]을 눌러 함수를 생성합니다.
다음과 같이 함수가 생성된 것을 확인할 수 있는데 Lambda는 이벤트 기반으로 동작하기 때문에 이벤트를 설정해주어야 합니다. 다음과 같이 [Configure test event]를 눌러 이벤트를 추가합니다.
그러면 다음과 같이 [Test]를 눌렀을 때 정상적으로 코드가 동작합니다.
외부 모듈을 사용하기 위해서는 코드 소스 우측 상단에 있는 [업로드] - [.zip 파일]을 선택합니다.
[업로드] 버튼을 눌러 아까 압축했던 python.zip 파일을 업로드한 후 [저장]합니다.
테스트하려고 했더니 배포 패키지가 너무 커서 인라인 코드 편집을 활성화할 수 없다는 메시지가 뜹니다.
Lambda에서는 코드와 패키지를 합쳐서 250MB까지 지원하고 있지만 방금 함수를 만들었고 패키지도 3.2MB 밖에 되지 않습니다. 이렇게 활성화를 제한하는 이유는 2가지가 있습니다.
(1) 보안
인라인 코드 편집을 통해 코드를 수정하는 것은 불가능하며, 코드는 암호화되어 저장됩니다. 따라서 패키지의 크기가 작은 경우에도 AWS Lambda는 인라인 코드 편집을 사용할 수 없도록 설정하여, 코드 보안을 유지할 수 있습니다.
(2) 성능
패키지의 크기가 클수록 AWS Lambda는 함수를 다운로드하고 메모리에 로드하는 데 시간이 더 오래 걸립니다. 따라서 함수가 실행되기 전에 패키지를 다운로드하고 로드해야 하는 경우, 불필요한 지연이 발생할 수 있습니다.
따라서 인라인 코드 편집으로 외부 모듈이 적용됐는지 확인해 보기 위해서는 SAM (Serverless Application Model)을 사용해야 하기 때문에 다음 실습인 Lambda 계층을 사용하여 모듈 업로드로 확인해 보겠습니다.
2. Lambda 계층을 사용하여 모듈 업로드하기
똑같은 방법으로 함수를 생성합니다.
좌측 대시보드 화면에서 [계층]을 선택한 후 [계층 생성]을 선택합니다.
다음과 같이 계층 구성한 후 [생성]을 눌러줍니다.
Lambda 함수로 돌아와 계층을 적용하기 위해 하단에 보이는 계층에서 [Add a layer]를 선택합니다.
다음과 같이 [사용자 지정 계층]으로 만들어준 계층을 추가합니다.
위에서와 같이 테스트 이벤트를 구성합니다.
import json
import datetime
def lambda_handler(event, context):
day = datetime.datetime.now()
print(day)
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
다음과 같이 인라인 코드 편집기에서 datetime 모듈을 사용하여 현재 날짜를 출력합니다.
이렇게 계층을 이용하여 외부 모듈을 사용할 수 있습니다.
이번 시간에는 AWS Lambda에 대해 알아보고 Python 외부 모듈 적용하는 실습을 진행했습니다.
감사합니다.
'Cloud > Amazon Cloud' 카테고리의 다른 글
[AWS] API Gateway REST API에 대해 알아보고 GET 메서드 실습하기 (0) | 2023.04.27 |
---|---|
[AWS] API Gateway에 대해 알아보고 간단한 HTTP API 실습하기 (0) | 2023.04.26 |
[AWS] AWS SAM을 이용한 로컬 환경에서 Lambda-MySQL 연동하기 (0) | 2023.04.25 |
[AWS] AWS CLI에 대해 알아보고 설치 및 IAM 생성 후 기본 설정하기 (0) | 2023.04.25 |
[AWS] Boto3를 이용해 CloudWatch에서 메트릭 데이터 가져오기 (0) | 2023.04.13 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!