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 파일 또한 바로 수정 가능.
클릭 몇 번으로 쉽게 생성 가능함.
그룹챗 기능을 통해 협업 및 교육용으로 유용함.
또한 File History 기능을 제공한다. 소스 파일 저장 시 자동적으로 버전이 기록된다.
배포 전에 소스를 날렸을 경우 File History를 통해 이전 버전 파일을 불러올 수 있다.
비록 싱가폴에서 C9을 쓰지만 Region 변경 후 어느 리전의 Lambda로도 코드 배포가 가능하다.
서울 리전에서도 이제 C9을 지원한다.
또한 SAM Application을 위한 AWS IDE Toolit 업데이트로 신규로 생성하는 C9에는 우측 Lambda Config 메뉴가 안 보일 수 있다.
만약 SAM Application이 아닌 단순 스크립트를 Lambda에 배포를 원할 경우에는 아래 이미지와 같이 Preferences -> AWS Settings에서 AWS Toolkit 옵션을 끄고 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/
npm install --prefix ./ nodemailer
내부 모듈 import 시 No module named 'module' 에러가 발생의 경우 아래 참고(삽질...ㅜ)
https://www.python2.net/questions-27719.htm
디버깅 기능도 제공.
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
환경 변수는 설정 메뉴에서 변경
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
그럴 경우 아래 블로그를 참고하자..
Cloud9 용량 부족의 경우 아래 참고
cloud9 ENOSPC: no space left on device
EBS 용량 늘려주고 아래 쉘 실행 시키면 된다.