호출 방식 - 동기(Synchronous) 호출. 즉, 작업 호출 이후 결과값이 반환될때까지 기다림.
API GW, 함수 URL(간단하게 그 함수만 쓸때), 셀프테스트(테스트 함수)

Coldstart(요청후에 코드가 실제로 실행되기 까지 걸리는 시간)를 줄이는 것도 신경써야한다.
우분투 환경으로 VM에서 진행하였다.
먼저 우분투 환경에 python3.12설치
apt update && apt upgrade -y
apt install software-properties-common -y add-apt-repository ppa:deadsnakes/ppa
apt update -y
apt install python3.12 -y
이제 python에 가상환경을 구성
root@lambda:~# apt install -y python3.12-venv
# 가상환경 설치.
root@lambda:~# python3 -m venv venv
# venv 디렉토리에 가상환경 구성
root@lambda:~# source ./venv/bin/activate
# 가상환경 실행
(venv) root@lambda:~# pip install fastapi uvicorn
# 라이브러리 설치.
(venv) root@lambda:~# vi main.py
간단하게 main.py에 내용을 작성
from fastapi import FastAPI
from mangum import Mangum # lambda 실행에 필요한 handler
app = FastAPI()
@app.get("/")
def hello():
return {"Hello": "World from Lambda"}
handler = Mangum(app)
requirement 작성을 통해 필요한 라이브러리를 작성
(venv) root@lambda:~# vi requirements.txt
mangum
fastapi
(venv) root@lambda:~# mkdir arc
# 람다함수에 포함시킬 패키지목록 및 소스코드를 둘 경로를 생성.
(venv) root@lambda:~# cp -r ./* arc
# 현재디렉토리의 모든 파일 및 폴더(하위디렉토리 포함, -r) arc에 복사
(venv) root@lambda:~# cd arc
(venv) root@lambda:~/arc# rm -rf __pycache__/
(venv) root@lambda:~/arc# rm -rf arc
(venv) root@lambda:~/arc# rm -rf venv
# 제외시킬 파일 삭제
(venv) root@lambda:~/arc# pip install -r requirements.txt -t ./
# -r : 의존성패키지파일 목록지정. -t : 타겟디렉토리.
모듈파일(main.py) 과 requirements 파일을 압축한다.
(venv) root@lambda:~/arc# apt install -y zip
# 압축 명령 설치
(venv) root@lambda:~/arc# zip lambda.zip -r ./*
# 현재디렉토리의 모든 파일(./*) 및 하위디렉토리 포함하여 lamdba.zip 파일로 압축.
lambda 정책 파일 생성
cat > trust-policy.json << EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
위의 정책을 토대로 IAM Role을 생성해주는데 AWS CLI를 다운로드를 먼저 하고 한다,
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
(venv) root@lambda:~/arc# unzip awscliv2.zip
(venv) root@lambda:~/arc# ./aws/install
(venv) root@lambda:~/arc# aws ec2 describe-vpcs --region ap-northeast-2

명령이 잘 되었는지 확인이 필요
aws iam create-role --role-name lambda-fastapi-execution-role --assume-role-policy-document file://trust-policy.json
# lambda-fastapi-execution-role 이라는 이름의 역할을 생성.
이후 AWS Console에서 lamdba-fastapi-execution-role이 잘 생성됬는지 확인

lambda 함수 생성
(venv) root@lambda:~/arc# aws iam attach-role-policy --role-name lambda-fastapi-execution-role --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
# 정책 추가(로그 기록 볼 수 있는 권한)
ROLE_ARN=$(aws iam get-role --role-name lambda-fastapi-execution-role --query 'Role.Arn' --output text)
# 위에서 만든 Role의 arn을 ROLE_ARN 이라는 환경변수로 선언.
# 람다함수 만들때 역할을 지정해야하기 때문.
aws lambda create-function \
--function-name zip-lam \
--runtime python3.12 \
--role $ROLE_ARN \
--handler main.handler \
--timeout 30 \
--memory-size 512 \
--zip-file fileb://lambda.zip \
--region ap-northeast-2
# zip-lam 라는 이름의 람다함수 생성.
| 하이퍼바이저 가상화 | 컨테이너 가상화 | |
|---|---|---|
| 격리 수준 | 하드웨어 수준 | 프로세스 수준 |
| 자원 오버헤드 | 높음 | 낮음 |
| 보안 | 상대적으로 안전 | 상대적으로 취약 |
| 프로비저닝 속도 | 상대적으로 느림 guest VM 부터 구성 | 상대적으로 빠름. 호스트 H/W와 커널까지 공휴하기 때문. 따로 guset VM 및 커널을 구성할 필요가 없다. |
| 호환성 | 원하는 OS(커널)까지 설치 가능 | 원하는 커널을 선택 불가능. 호스트 커널에 호환되는 환경만 구성 가능 . 리눅스 기반 컨테이너만 가능. |
원래 어제 배웠던 내용들이지만 어제 과제 AWS로 3Tier Architecture 구성후 Cloudfront로 배포하는 과제로 인해 시간이 없어서 작성하지 못해 오늘 작성했다.