AWS lambda layer로 가상 환경을 구축했습니다.

9828 단어 람다파이썬AWS

배경



Python3.6 이후로 venv 를 사용하여 pip한 패키지를 저장하고 있었습니다만, AWS상에서 할 수 없을까 조사하고 있으면 layer라고 하는 저렴한 기능이 있었으므로 사용해 보았다.

venv



작업 PC에서 이것으로 OK
python -m venv [仮想環境名]

./[仮想環境名]/bin/activate
([仮想環境名]) pip install [パッケージ名]

패키지용 zip 만들기



AWS lambda를 사용하여 웹 스크래핑 -Development(웹 스크래핑) 와 마찬가지로 AWS에 업로드하기 위해 zip 파일을 만듭니다.
mkdir packages
cd packages
pip install [パッケージ] -t ./
pip install [パッケージ] -t ./
......
zip -r ./myDeploymentPackage.zip ./packages

레이어



pip 환경을 만들려면 레이어를 만듭니다.



개발 (오류)



여기서 AWS lambda를 사용하여 웹 스크래핑 -Development(웹 스크래핑) 에서 beautifulsoup을 사용한 코드를 작성해 보겠습니다.
import json
import requests
from bs4 import BeautifulSoup

def lambda_handler(event, context):
    # TODO implement

    response = requests.get('https://mainichi.jp/editorial/')
    soup = BeautifulSoup(response.text)
    pages = soup.find("ul", class_="list-typeD")
    articles = pages.find_all("article")
    links = [ "https:" + a.a.get("href") for a in articles]

    return {
        'statusCode': 200,
        'links' : links
    }

그렇다면,
{
  "errorMessage": "Unable to import module 'lambda_function'"
}

import 오류가 발생합니다.

Lambda@Python의 레이어를 사용할 때의 기본 주의점(레이어에 올린 파일을 import 할 수 없는 사람용) - 주의점
를 보면, zip 파일은 /opt/ 아래에 압축이 풀리는 것 같습니다.

이 경우라면, /opt/packages/ 에 작업용 PC에 pip로 인스톨한 패키지가 있으므로,
import sys
sys.path.append('/opt/packages')

당신은 사전에 경로를 통해 있어야합니다.

Development (modified)


import sys
sys.path.append('/opt/packages')
import json
import requests
from bs4 import BeautifulSoup


def lambda_handler(event, context):
    # TODO implement

    response = requests.get('https://mainichi.jp/editorial/')
    soup = BeautifulSoup(response.text)
    pages = soup.find("ul", class_="list-typeD")
    articles = pages.find_all("article")
    links = [ "https:" + a.a.get("href") for a in articles]

    return {
        'statusCode': 200,
        'links' : links
    }
{
  "statusCode": 200,
  "links": [
    "https://mainichi.jp/articles/20201120/ddm/005/070/067000c",
    "https://mainichi.jp/articles/20201120/ddm/005/070/065000c",
    "https://mainichi.jp/articles/20201119/ddm/005/070/119000c",
    "https://mainichi.jp/articles/20201119/ddm/005/070/118000c",
    "https://mainichi.jp/articles/20201118/ddm/005/070/115000c",
    "https://mainichi.jp/articles/20201118/ddm/005/070/114000c",
    "https://mainichi.jp/articles/20201117/ddm/005/070/114000c",
    "https://mainichi.jp/articles/20201117/ddm/005/070/113000c",
    "https://mainichi.jp/articles/20201116/ddm/005/070/043000c"
  ]
}

Post Scripting



zip으로 압축 할 때 "/packages/"없이 할 수 있으면 좋겠지 만

좋은 웹페이지 즐겨찾기