AWS lambda layer로 가상 환경을 구축했습니다.
배경
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/"없이 할 수 있으면 좋겠지 만
Reference
이 문제에 관하여(AWS lambda layer로 가상 환경을 구축했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/satsukiya/items/ac955662b2d46b0a9c62
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
작업 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/"없이 할 수 있으면 좋겠지 만
Reference
이 문제에 관하여(AWS lambda layer로 가상 환경을 구축했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/satsukiya/items/ac955662b2d46b0a9c62
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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/"없이 할 수 있으면 좋겠지 만
Reference
이 문제에 관하여(AWS lambda layer로 가상 환경을 구축했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/satsukiya/items/ac955662b2d46b0a9c62
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 sys
sys.path.append('/opt/packages')
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/"없이 할 수 있으면 좋겠지 만
Reference
이 문제에 관하여(AWS lambda layer로 가상 환경을 구축했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/satsukiya/items/ac955662b2d46b0a9c62
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(AWS lambda layer로 가상 환경을 구축했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/satsukiya/items/ac955662b2d46b0a9c62텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)