FinOps

[Lambda] awscli Layer 설정

김붕어87 2025. 4. 16. 11:44
반응형
개요
Lambda에는 기본적으로 AWS CLI가 없음
Lambda 환경은 Python, Node.js 등 런타임만 포함됨
aws 명령어는 기본 환경에 포함되어 있지 않음
그래서 aws s3 cp, aws kms encrypt 같은 CLI 명령어를 쓰고 싶으면 직접 포함시켜야 해요

Lambda는 코드 사이즈 제한이 있어서, 자주 쓰는 도구나 바이너리는 Layer로 따로 만들어서 붙입니다

 

 

1.awscli Layer 사용하는 곳

"STOP Fargate POD" Lambda 함수에서 aws cli를 사용합니다.

kubectl scale --replicas=0 deploy/이름 명령어를 날리기 위해서는 eks(aws eks update-kubeconfig) 인증을 받아야합니다.

eks 인증을 받을 때 aws cli가 필요합니다.

 

 

 

2. awscli Layer에서 사용할 파이썬 라이브러리 만들기

  • aws cli Layer 구성 순서
    • awscli 명령어 + python 라이브러리 내용을 zip파일로 만들기 
    • Lambda Layer에 zip 파일 업로드 및 구성
    • Lambda 함수에 awscli Layer 연결

 

 

2-1. AWS EC2 생성 

2-2. Python 등 필수 패키지 설치

EC2 서버 로그인 

# --- 1. 필수 패키지 설치 ---
# python 명령어 설치
sudo apt update                                             # 패키지 목록 업데이트
sudo apt install -y pip python3 python3-pip python3-venv zip dos2unix curl   # 파이썬, 압축, 줄바꿈 변환 등 유틸 설치

# python 라이브러리 설치 awscli 등
pip3 install --upgrade pip
pip3 install awscli botocore s3transfer jmespath

 

 

 

2-3. aws cli 설치

# aws cli 설치
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

 

 

2-4. kubectl cli 설치

# kubectl cli 설치
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

 

 

2-5. 가상환경 생성

# --- 2. 가상환경 생성 및 활성화 ---
python3 -m venv ~/venv_awscli                              # 가상환경 생성
source ~/venv_awscli/bin/activate                          # 가상환경 진입

 

2-6. 파이썬 라이브러리 zip 파일 생성하기

# Lambda Layer용 폴더 생성
mkdir -p ~/lambda_layer/python                            # site-packages 넣을 디렉토리 생성
mkdir -p ~/lambda_layer/bin                               # awscli, kubectl 넣을 디렉토리 생성


# aws cli 명령어 복사
which aws                                                     # aws cli 명령어 위치
cp ~/venv_awscli/bin/aws ~/lambda_layer/bin/                  # aws 실행파일 복사

sed -i '1s|.*|#!/var/lang/bin/python|' ~/lambda_layer/bin/aws # awscli Lambda용 인터프리터로 변경
vi ~/lambda_layer/bin/aws                                     # /var/lang/bin/python 으로 바꿨는지 확인인
#!/var/lang/bin/python                                        # 첫줄에 내용이 들어가 있는지 확인

dos2unix ~/lambda_layer/bin/aws                                # CRLF → LF 줄바꿈 변환


# kubectl cli 명령어 복사 
which kubectl                                           # kubectl 명령어 위치
cp /usr/bin/kubectl ~/lambda_layer/bin/                 # kubectl 복사


# 가상환경에서 AWS CLI 파이썬 라이브러리 설치
pip install awscli                                         # awscli 설치 (site-packages에 들어감)


# aws cli 파이썬 라이브러리 복사
python3 --version
python3 -c "import site; print(site.getsitepackages())"     # 라이브러리 경로 확인
cp -r ~/venv_awscli/lib/python3.9/site-packages/* ~/lambda_layer/python/  # awscli 관련 라이브러리 복사
ls -d ~/lambda_layer/python/*                               # 복사 확인 



# zip 파일 압축 
cd ~/lambda_layer
zip -r awscli-layer.zip .                                # 현재 폴더 내용만 압축

 

 

 

 

 

3. awscli Layer 만들기

  1. AWS Console -> Lambda -> 계층 -> 계층 생성 
  2. 이름 : awscli-layer 이름 넣기
  3. .zip 파일 업로드 : 파일 선택
  4. 호환 아키텍처 : x86_64
  5. 호환 런타임 : Python 3.9 (사용할 언어 코드 선택)
  6. 생성

4. awscli Layer 연결하기

  1. AWS Console -> Lambda -> 함수 -> StopFargate_POD 클릭
  2. 코드 탭 -> 계층 -> "Add a Layer" 클릭
  3. 사용자 지정 계층 선택
  4. 사용자 지정 계층 : awscli-layer 선택
  5. 버전 : 버전 선택
  6. 추가 

 

 

 

 

반응형

'FinOps' 카테고리의 다른 글

[Lambda] 업무시간 외 AuroraDB Stop/Start  (0) 2025.04.14
[Lambda] 업무시간 외 EC2 Stop/Start  (0) 2025.04.14