cloud9에서 lambda를 이동할 때의주의 사항 (No module named ~ 오류 등)
소개
AWS 관련으로 cloud9에서 lambda를 움직일 때 조금 망설이는 적이 있었기 때문에 그 근처를 정리해 갑니다. lambda는 서버리스로 프로그램을 실행해 주므로 매우 편리하고, 나도 스크래핑 등의 정기 실행을 위해서 사용하기 시작했습니다.
이 기사는 주로 처음으로 cloud9, lambda를 사용하는 방향이 될 것이라고 생각합니다.
실천
우선 새롭게 cloud9의 환경을 작성. 이름은 example으로 둡니다.
이것이 끝나면 아래와 같은 화면으로 이동합니다. 화면 오른쪽에 표시되어 있는 한자의 「켜기」와 같은 버튼을 클릭한 다음, Create a new Lambda function(이미지의 주황색 부분)을 클릭하여 lambda-function을 작성할 수 있습니다.
function명은 적당히 결정해(여기에서는 sample), Select runtime의 곳에서 사용할 언어를 선택합니다. (아래 이미지) 이번에는 파이썬을 사용하여 스크래핑에 사용하는 BeautifulSoup 라이브러리의 import가 성공할 때까지를 써 가므로 "python3.6"을 선택합니다. 그 외의 설정은 특히 괴롭히지 않아 괜찮다고 생각합니다.
home/ec2-user/environment에 sample 디렉토리가 있다고 생각합니다.
그런 다음 home/ec2-user/environment/sample/sample에서 lambda_function.py를 열어보십시오. 여기에 프로그램을 실행해 가는 코드를 써 가게 됩니다.
lambda_function.pyfrom bs4 import BeautifulSoup
def lambda_handler(event, context):
return 'success'
이번은 연습이므로 이것만 씁니다. bs4에서 BeautifulSoup를 import 할 수 있으면 success가 돌아옵니다.
그럼 bs4를 install하겠습니다.
우선
sudo pip install --upgrade pip
에서 pip를 최신 버전으로 업그레이드하십시오.
다음
pip install bs4
실행. (Permission denied 오류가 발생하면 끝에 --user를 추가합니다.)
성공적으로 설치가 성공했습니다.
즉시 lambda_function을 실행해보십시오. 화면 오른쪽의 Local Functions에서 sample을 선택하고 Run the selected Lambda function을 클릭합니다.
그러면 Unable to import module 'sample/lambda_function': No module named 'bs4'
그리고 오류가 발생합니다. bs4의 install은 성공해야하지만 bs4를 찾을 수 없다고합니다. 왜?
대답으로서는, lambda는 서버리스로 움직이기 때문에, lambda의 작업용 파일(sample)내에서 완결되어 있을 필요가 있다 (사용하는 라이브러리는 파일내에 넣어 두어야 한다)로부터입니다.
해결하기 위해
cd sample
pip install bs4 -t .
(-t 및 디렉토리 이름으로 install 대상 지정)
lambda_function을 다시 움직여보십시오.
success로 돌아오면 성공입니다.
마지막으로 remote에 lambda 파일을 배포하면 종료됩니다. (화면 오른쪽 상단)
프로그램을 정기적으로 실행하려면 Amazon EventBridge에서 설정할 수 있습니다.
결론
pip 커맨드의 -t는 잊을 것 같았기 때문에 기사로 해 보았습니다. 소액이지만 실행 시간에 따라 돈이 걸리므로 실행 시간이 길고 자주 움직이면 주의하는 것이 좋네요.
Reference
이 문제에 관하여(cloud9에서 lambda를 이동할 때의주의 사항 (No module named ~ 오류 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuto_hori/items/3764cf8363d2a529f1d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 새롭게 cloud9의 환경을 작성. 이름은 example으로 둡니다.
이것이 끝나면 아래와 같은 화면으로 이동합니다. 화면 오른쪽에 표시되어 있는 한자의 「켜기」와 같은 버튼을 클릭한 다음, Create a new Lambda function(이미지의 주황색 부분)을 클릭하여 lambda-function을 작성할 수 있습니다.
function명은 적당히 결정해(여기에서는 sample), Select runtime의 곳에서 사용할 언어를 선택합니다. (아래 이미지) 이번에는 파이썬을 사용하여 스크래핑에 사용하는 BeautifulSoup 라이브러리의 import가 성공할 때까지를 써 가므로 "python3.6"을 선택합니다. 그 외의 설정은 특히 괴롭히지 않아 괜찮다고 생각합니다.
home/ec2-user/environment에 sample 디렉토리가 있다고 생각합니다.
그런 다음 home/ec2-user/environment/sample/sample에서 lambda_function.py를 열어보십시오. 여기에 프로그램을 실행해 가는 코드를 써 가게 됩니다.
lambda_function.py
from bs4 import BeautifulSoup
def lambda_handler(event, context):
return 'success'
이번은 연습이므로 이것만 씁니다. bs4에서 BeautifulSoup를 import 할 수 있으면 success가 돌아옵니다.
그럼 bs4를 install하겠습니다.
우선
sudo pip install --upgrade pip
에서 pip를 최신 버전으로 업그레이드하십시오.
다음
pip install bs4
실행. (Permission denied 오류가 발생하면 끝에 --user를 추가합니다.)
성공적으로 설치가 성공했습니다.
즉시 lambda_function을 실행해보십시오. 화면 오른쪽의 Local Functions에서 sample을 선택하고 Run the selected Lambda function을 클릭합니다.
그러면 Unable to import module 'sample/lambda_function': No module named 'bs4'
그리고 오류가 발생합니다. bs4의 install은 성공해야하지만 bs4를 찾을 수 없다고합니다. 왜?
대답으로서는, lambda는 서버리스로 움직이기 때문에, lambda의 작업용 파일(sample)내에서 완결되어 있을 필요가 있다 (사용하는 라이브러리는 파일내에 넣어 두어야 한다)로부터입니다.
해결하기 위해
cd sample
pip install bs4 -t .
(-t 및 디렉토리 이름으로 install 대상 지정)
lambda_function을 다시 움직여보십시오.
success로 돌아오면 성공입니다.
마지막으로 remote에 lambda 파일을 배포하면 종료됩니다. (화면 오른쪽 상단)
프로그램을 정기적으로 실행하려면 Amazon EventBridge에서 설정할 수 있습니다.
결론
pip 커맨드의 -t는 잊을 것 같았기 때문에 기사로 해 보았습니다. 소액이지만 실행 시간에 따라 돈이 걸리므로 실행 시간이 길고 자주 움직이면 주의하는 것이 좋네요.
Reference
이 문제에 관하여(cloud9에서 lambda를 이동할 때의주의 사항 (No module named ~ 오류 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuto_hori/items/3764cf8363d2a529f1d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(cloud9에서 lambda를 이동할 때의주의 사항 (No module named ~ 오류 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuto_hori/items/3764cf8363d2a529f1d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)