일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- credentials
- sqs
- RDS
- Operator
- airflow
- celery
- git book
- executor
- lambda
- SecretsManager
- dynamic task mapping
- authoring
- DAG
- kinesis
- testing
- Data Firehose
- AWS
- pipeline
- S3
- dagrun
- XCOM
- boto3
- Concept
- github actions
- Task
- ci/cd
- TaskFlow
- mysql
- Scheduling
- Git
- Today
- Total
CS
계층(Layer): Lambda 함수의 종속 항목 추가 본문
(python3 기준입니다.)
AWS Lambda에 사용할 코드를 작성할 때 웬만하면 라이브러리를 사용할 것입니다. 그런데 Lambda에서 모든 라이브러리를 지원하지는 않습니다. 따라서 미지원 라이브러리를 사용하는 함수는 실패하게 됩니다. Lambda 함수에 라이브러리를 패키징할 수도 있는 것 같지만, Lambda에서는 따로 '계층(Layer)'이라는 것을 제공하고 있습니다. 계층은 라이브러리 같은 종속 항목을 따로 저장해 둘 수 있는 기능입니다. 자주 쓰는 라이브러리로 계층을 만들어 놓으면 다른 Lambda에도 재사용할 수 있어 편한 것 같습니다.
사용 방법
콘솔에서 계층이 필요한 Lambda 함수의 코드 탭 ▷ 계층 ▷ [Add a Layer] 버튼을 클릭하여 계층을 선택하면 됩니다.
아키텍처는 보통 'x86_64'를 사용하면 될 것 같습니다.
계층 소스로 'AWS 계층', '사용자 지정 계층', 'ARN 지정' 세 가지를 선택할 수 있습니다.
- AWS 계층은 AWS에서 제공하는 계층인데, 이름만 보고는 뭐가 포함된 건지 모르겠습니다.
- 사용자 지정 계층은 스스로 생성한 계층을 고를 수 있습니다.
- ARN 지정은 남이 만든 계층을 ARN을 통하여 사용할 수 있습니다.
이 페이지에서 어떤 분이 만드신 여러 python3.9용 계층 ARN을 찾을 수 있습니다. 누가 만드신지는 모르겠지만 감사를 전합니다.
계층 생성
python3 라이브러리 중 AWS RDS에 접근할 때 주로 쓰는 pymysql을 계층으로 저장하도록 하겠습니다.
우선 라이브러리를 다운받아야 합니다. 저는 pip을 쓰겠습니다.
# 형식
python -m pip install -t [디렉토리명] [라이브러리명]
# pymysql 설치
python3 -m pip install -t python pymysql
pip을 사용할 때 'python -m' 부분 없이 사용해도 되지만,
python 버전에 따라 이후 어떤 일이 일어날지 확실하지 않기 때문에 환경의 python 버전이나 라이브러리 버전을 참고하는 게 좋을 것 같습니다.
디렉토리명을 'python'으로 한 이유는 Lambda 계층을 생성할 때
[zip 파일명]
└── python
└── [라이브러리 폴더들]
이런 식으로 구성해야 하기 때문입니다.
따라서
python
├── PyMySQL-1.0.3.dist-info
└── pymysql
이 상태에서 디렉토리를 하나 더 생성하여 python 디렉토리를 넣고 python 디렉토리가 아닌 그 상위 디렉토리를 압축하는 등, 결과적으로 zip을 풀었을 때 python 디렉토리가 나오도록 해야 합니다.
그런 zip 파일을 생성하였다면,
콘솔에서 Lambda ▷ 왼쪽 메뉴에서 추가 리소스 ▷ 계층을 선택한 후 계층 생성 버튼을 클릭하여 계층명이나 설명 등을 기재한 후 zip 파일을 업로드하여 계층을 생성하면 됩니다.
계층을 생성하였다면 계층 소스에서 사용자 지정 계층을 선택한 후 해당 계층을 선택하면 됩니다.
'AWS' 카테고리의 다른 글
Boto3를 위한 AWS Credentials 구성하기 (0) | 2023.06.05 |
---|---|
AWS SQS 써보기: 다른 서비스에 정보를 전달(메시지 큐) (0) | 2023.06.02 |
Serverless 프레임워크: AWS Lambda를 인프라 생각 없이 배포 (0) | 2023.05.30 |
AWS Lambda: 서버 생각 없이 함수 실행 (0) | 2023.05.29 |
AWS Secrets Manager: 암호를 하드 코딩하지 않고 저장하고 불러오기 (0) | 2023.05.27 |