[SCRIPT] 명령 한 번으로 Lambda Layer 쉽게 추가하기

0. INTRO

  • 코딩을 하다보면 외부 library들을 이용해야하는 경우가 정말 많다. Lambda의 Python 환경에서는 기본적으로 미리 설치가 되어 제공되는 라이브러리들이 있으며 해당 목록은 >InsideLambda< 사이트에서 확인이 가능하다.
  • 하지만 이 외에서 pandas나 numpy 등 따로 설치가 필요한 라이브러리들 같은 경우 아래의 두 가지 방법을 통해 Lambda 함수에 import가 가능하다.
    1. Import 하려는 라이브러리 구성 파일들을 업로드하여 Lambda Layer를 생성하고 Lambda 함수에서 해당 Layer를 추가한다.
    2. 라이브러리 설치 파일 및 Lambda 코드 파일을 zip으로 압축한 후 Lambda 함수에 Upload 한다.

    이러한 방법들이 있지만 구성 파일들 압축하고 또 콘솔에 와서 서비스들 클릭 후 업로드 하는 등 손이 많이가고 귀찮은 작업이다. 게다가 만약에 zip파일 내부 디렉토리 구성을 잘못했다면 Layer를 만들었어도 적용이 안될 수 있다.

  • 아래 shell script는 이러한 귀찮은 과정들을 생략하고 명령어 한 번에 원하는 라이브러리의 Layer를 만들어주기 위해 구성되었다.

1. LAMBDA LAYER ADD SCRIPT

  1. UBUNTU Version
    • 1-1. shell script 최초 실행 일 때

         #!bin/bash/
      
         # 변수 받기
         library=$1
         current=$PWD
      
         # Ubuntu update & python install
         sudo apt update
         sudo apt install python3.8
         sudo apt install zip
      
         # aws cli install
         curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
         unzip awscliv2.zip
         sudo ./aws/install
         sleep 1
              
         # Download documents related to the library
         curl -O https://bootstrap.pypa.io/get-pip.py
         python3.8 get-pip.py --user
         sleep 1
         mkdir $current/$library
         cd $current/$library
         mkdir python
         python3.8 -m pip install $library -t python/
         sleep 1
         zip -r layer.zip python
         sleep 1
         aws lambda publish-layer-version --layer-name $library-layer --zip-file fileb://layer.zip \
         --compatible-runtimes python3.7 python3.8 python3.9 --region ap-northeast-2
         sleep 1
         rm -rf $current/$library
         echo $library has been add to the lambda layer.
      
    • 1-2. 최초 layer 추가 후 계속적으로 추가할 때

         #!bin/bash
      
         library=$1
         current=$PWD
         echo $library
         mkdir $current/$library
         cd $current/$library
         mkdir python
         python3.8 -m pip install $library -t python/
         sleep 1
         zip -r layer.zip python
         sleep 1
         aws lambda publish-layer-version --layer-name $library-layer --zip-file fileb://layer.zip \
         --compatible-runtimes python3.7 python3.8 python3.9 --region ap-northeast-2
         sleep 1
         rm -rf $current/$library
         echo $library has been add to the lambda layer.
      

      bash add_layer.sh “라이브러리 명” ex) bash add_layer.sh pandas

  2. CENTOS Version

     #!bin/bash
    
     curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
     unzip awscliv2.zip
     sudo ./aws/install
     sudo amazon-linux-extras install python3.8
     sleep 1
     curl -O https://bootstrap.pypa.io/get-pip.py
     sleep 1
     mkdir python 
     python3.8 get-pip.py --user
     sleep 1
     python3.8 -m pip install pandas -t python/
     sleep 1
     zip -r layer.zip python
     sleep 1
     aws lambda publish-layer-version --layer-name test-layer --zip-file fileb://layer.zip \
     --compatible-runtimes python3.7 python3.8 python3.9 --region ap-northeast-2
    

    bash add_layer.sh “라이브러리 명” ex) bash add_layer.sh pandas

Leave a comment