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.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는 잊을 것 같았기 때문에 기사로 해 보았습니다. 소액이지만 실행 시간에 따라 돈이 걸리므로 실행 시간이 길고 자주 움직이면 주의하는 것이 좋네요.

좋은 웹페이지 즐겨찾기