본문 바로가기

Dev Tools/Cloud9

AWS Cloud9

Cloud9은 웹기반 IDE로 EC2 Docker 기반으로 구성.

현재 사용 가능한 곳은 Singapore / N.Virginia / Ohio / Ireland / Oregon.

Node.js, Python, PHP, Java, Ruby, Go 등 다양한 프로그래밍 언어를 지원.

AWS 관련 다양한 패키지들이 설치되어 있음. 또한 Lambda와 연동 가능하다.

 

Lambda 코드의 경우 Lambda 화면에서 스크립트를 작성하거나, Local 환경에서 APEX와 같은 플러그인? 혹은 toolkit을 통해 Lambda 코드를 구성하고 배포했음. 또한 패키지가 필요한 경우 zip 파일을 Lambda에 업로드. 그 경우 Lambda 화면에서 코드 수정 불가했음.

 

Cloud9을 사용할 경우 Local 환경 구성이 필요없으며, zip 파일 또한 바로 수정 가능.

Cloud9 생성화면
Cloud9 터미널

클릭 몇 번으로 쉽게 생성 가능함.

c9 화면(Group 챗 기능)

그룹챗 기능을 통해 협업 및 교육용으로 유용함. 

Lambda로 바로 Deploy 가능

또한 File History 기능을 제공한다. 소스 파일 저장 시 자동적으로 버전이 기록된다.

FIle History

배포 전에 소스를 날렸을 경우 File History를 통해 이전 버전 파일을 불러올 수 있다.

 

비록 싱가폴에서 C9을 쓰지만 Region 변경 후 어느 리전의 Lambda로도 코드 배포가 가능하다.

 

서울 리전에서도 이제 C9을 지원한다. 

 

또한 SAM Application을 위한 AWS IDE Toolit 업데이트로 신규로 생성하는 C9에는 우측 Lambda Config 메뉴가 안 보일 수 있다.

Cloud9 Lambda

 

만약 SAM Application이 아닌 단순 스크립트를 Lambda에 배포를 원할 경우에는 아래 이미지와 같이 Preferences -> AWS Settings에서 AWS Toolkit 옵션을 끄고 Cloud9을 재실행하면 된다.

Cloud9

또한 Lambda 배포용으로 C9을 쓴다면 미리 C9을 통해 Lambda Function을 생성하고, C9 내의 Lambda 기능을 통해 디버깅 해야 한다.

 

C9 내에서 소스 실행과 Lambda 내의 실행의 경우 패키지 경로가 다르기 때문이다. 때문에 패키지를 설치할 때도 경로를 지정해줘야 한다. Node든 Python이든...

https://aws.amazon.com/ko/premiumsupport/knowledge-center/cloud9-deploy-lambda-external-libraries/

 

AWS Cloud9을 사용하여 외부 라이브러리와 함께 Lambda 함수 배포

AWS Cloud9을 사용하여 개발된 AWS Lambda 함수에 추가 외부 라이브러리를 사용하려고 합니다. 이러한 라이브러리에서 모듈을 가져와서 배포 시 Lambda 함수에 포함하려면 어떻게 해야 합니까?

aws.amazon.com

 

npm install --prefix ./ nodemailer

 

내부 모듈 import 시  No module named 'module' 에러가 발생의 경우 아래 참고(삽질...ㅜ)

https://www.python2.net/questions-27719.htm

 

amazon web services - AWS Cloud9 Lambda에서 Python 파일 가져 오기

AWS Cloud9를 사용하여 간단한 람다 함수를 구축했습니다. 이제 람다가 조금 더하기를 원합니다. 그래서 몇 가지 기능을 가진 다른 파이썬 파일을 만들고 같은 디렉토리에 저장했습니다. myLambdaName

www.python2.net

디버깅 메뉴(Call Stack, 변수 Type, Breakpoints까지)

디버깅 기능도 제공.

 

C9과는 별개지만 아래와 같은 Framework를 통해 Lambda 함수를 배포할 수 있음.

 

SAM / SERVERLESS / ZAPPA 등 서버리스 프레임워크를 통해 기존처럼 코딩하고, Lambda에 바로 배포가 가능.

express 코드(SERVERLESS 예시)를 그대로 Lambda로 배포하면 event trigger 형태로 알아서 변환 배포함.

 

node v8 설치는 nvm install 8.10 / nvm alias default 8.10

python 환경 설정

python3 -m venv ./venv

source venv/bin/activate

deactivate

alias python=python3

환경 변수는 설정 메뉴에서 변경

c9 환경 설정

 

stop my envir 설정은 30분동안 액션이 없으면 알아서 EC2가 stop.

터미널도 잘 동작하니, AWS에 대한 서비스 테스트 시에도 유용함.

 

주의사항

혹시나 C9이 구동되고 있는 EC2를 정지 시켰다면 C9 환경은 다시 살릴 수가 없으니 꼭 주의해야 한다. 삭제가 아닌 정지라도 구성한 C9 환경이 날아가버리니 주의해야 한다! (아흑...)

 

또한 C9에서 소스 파일들이 많아지기 시작하면 아래와 같은 메시지를 받을 수도 있다.

(C9이 먹통이 되고, Lambda에 배포가 되지 않는 현상)

Your environment is running out of inodes, please increase 'fs.inotify.max_user.watches' limit

그럴 경우 아래 블로그를 참고하자..

 

리눅스 커널 inotify(7). inotify watch limit 늘리기.

Introduction

www.binaryflavor.com

Cloud9 용량 부족의 경우 아래 참고

cloud9 ENOSPC: no space left on device

EBS 용량 늘려주고 아래 쉘 실행 시키면 된다.

 

 

Moving an environment and resizing or encrypting Amazon EBS volumes - AWS Cloud9

If you don't close all of the web browser tabs that are currently displaying the environment, AWS Cloud9 might interfere with allowing you to complete this procedure. Specifically, AWS Cloud9 might try at the wrong time during this procedure to restart the

docs.aws.amazon.com