AWS Lambda에 Pandas 올리기

팀 내에서는 Lambda 안에 파이썬 코드를 올려서 쓰고 있지만, 혹시 Pandas와 같은 라이브러리를 Lambda에 올리려면 어떻게 해야 할 지 궁금해서 정리해 본다.

이 예제에서는 Pandas를 Lambda Layer로 만들고, Layer를 Lambda 함수에 연결해서 사용해 보려고 한다.

AWS Lambda(Lambda Layer)의 제한

AWS Lambda에는 Lambda Layer라고 해서 의존성이 필요한 것들을 묶어서 별도의 계층으로 만들어 쓸 수 있도록 하고 있다.

하지만 이런 기능도 제한이 있으니 한 번 확인해 보자.

참고 문서

주요 제한 사항

  • 하나의 함수에서 사용할 수 있는 Layer 수: 5 개
  • 함수와 Layer를 모두 합하여 250 MB를 초과할 수 없음

Pandas Lambda Layer 만들기

Lambda Layer의 내용은 /opt 디렉터리에 들어가게 된다. 파이썬 코드의 경우 /opt/python이나 /opt/python/lib/python(버전-예:3.8)/site-packages 디렉터리에 풀릴 것이다.

요즘 좋아하는 노래들

제 인생의 즐거움 중 가장 큰 것들을 뽑으라면 축구와 락 페스티벌이라 할 수 있습니다. 근데 요즘은 코로나 때문에 락페든 축구든 직관이 불가능한 상황이죠. 그러다 보니 유튜브에서 락 페스티벌 공연 영상을 자주 봤었어요. 원래 알고 있던 노래도 있지만, 새로 알게된 노래들 중 최근에 자주 들었던 노래들을 소개해 드리려고 합니다. 한 편으로는 블로그에 GitHub Actions를 걸어놨는데, 이게 제대로 동작하는지 테스트해 보고 싶어서 쓰는 글이기도 합니다.

Idles - Danny Nedelko

원래 뮤직비디오도 좋지만, 개인적으로는 작년 글라스톤베리에서 공연했던 영상을 더 좋아합니다. 락페에서 일반적으로 나올 수 있는 요소-떼창, 슬램, 크라우드 서핑, …-들이 다 나오는데다가, 마지막에 보컬인 Joe Talbot이 많은 관중들 앞에서 눈물을 흘리는 모습과 아내가 올라와서 안아주는 모습이 정말 감동적이었어요.

Retrospect 2019

2020년이 된 지 4일이 되었지만, 지난 1년 간에 있었던 일들을 정리해 보려 합니다.

발표

AWS Summit Seoul 2019

커뮤니티 세션에서 저희 부서의 데이터 저장 기반 구축 사례를 소개했습니다. 다음 영상에서 확인하실 수 있습니다. (슬라이드는 여기를 눌러주세요)

PyCon Korea 외의 다른 행사에서 발표하는 건 처음이었는데요. 정말 많은 분들이 오셔서 긴장했는데, 어떻게든 잘 넘어갔던 것 같아요. 발표한 내용은 재작년(2018) 말 기준으로 구성했던 내용이고, 현재 저희 팀의 AWS 인프라는 많은 부분이 바뀐 상태입니다. 그리고 작년 AWS Summit을 기점으로 AWSKRUG 내 소모임도 가끔씩 참석하게 되었습니다.

신입 사원 교육 후기: 이상과 현실

연말에 회고를 쓰신 분들을 많이 보게 됩니다. 저는 여러 일들이 있어 이제서야 한숨 돌렸는데요. 작년 회고는 두 개의 글로 나누어 작성하려고 합니다. 먼저 최근에 진행했었던 신입사원 교육 후기(가르치는 사람의 입장에서)를 먼저 공유해 드립니다. 나머지 이야기는 이번 주말에 작성하려고 합니다.

어떻게 해서 신입 사원을 뽑게 되었는가?

저희 팀의 인프라 담당자는 저를 포함하여 두 명뿐이었습니다. 시간이 지나면서 저희가 갖고 있는 데이터를 기반으로 하는 서비스가 조금씩 늘어났고, 그러면서 업무가 늘어나는 상황이었습니다. 이에 처음에는 경력자를 뽑으려고 했으나, 어려웠던 상황이었는데요. 우연히 외부 교육을 갔다가 AWS 및 인프라 관련 교육을 받고 있는 분의 이력서를 받게 되었고, 채용을 진행하게 되었습니다.

AWS SAM을 사용하면서 느꼈던 것들

왜 SAM을 사용하게 되었나?

시스템 내부에서 관리하는 Lambda 함수들이 늘어나면서, 이를 관리할 방법을 찾아야 했다. 기존에는 Apex를 Lambda 함수 배포에 이용했지만, 뭔가 자동화된 방법을 찾고 싶었다.

그래서 Serverless Framework, Terraform, SAM과 같은 도구들을 검토해 봤다. 그러다가 SAM을 최종적으로 선택했는데, 이유는 다음과 같다.

  • Serverless Framework는 다양한 클라우드 벤더를 지원하지만, 다른 AWS 서비스를 연동하는 데 제약이 있지 않을까? 하는 막연한 생각이 들었다. (잘 찾아보니 내가 원하는 것들은 구현 가능할 것 같더라. 내가 잘못 생각했던 것 같다)

Hortonworks Sandbox를 AWS에서 사용하기

들어가며

최근에 ‘하둡과 스파크를 활용한 실용 데이터 과학’이라는 책을 읽고 따라해 보고 있다. 이 책에서는 실습을 위해 호튼웍스(Hortonworks)의 Sandbox 이미지를 사용해 보기를 권장하고 있다. 그런데 설치 방법을 찾다 보니, 권장 사양이 높은 것 같다는 생각이 들었다. 이 이미지를 VirtualBox에서 사용할 때, 메모리 용량이 8GB로 설정되어 있었다. 그런데 지금 내가 쓰고 있는 노트북의 메모리 용량이 8GB라 좀 어려울 것 같았다. 그래서 AWS에 이 이미지를 올려보게 되었다.

(주의: 이 글에서 설명하는 내용은 AWS의 Free Tier 범위를 넘어가므로 사용한 만큼 요금이 부과됩니다. 크레딧이 있거나 비용 지불이 가능한 경우에 사용하시기 바랍니다. 비용 발생에 대한 책임은 독자에게 있습니다.)

EC2에 Bitnami MongoDB 이미지 올리기

최근에 AWS에서 MongoDB와 호환되는 DocumentDB를 출시했지만, 아직 서울 리전에서는 사용할 수 없다.

(2019년 5월에 서울 리전에 출시되었습니다. 링크한 글을 확인해 주세요~)

그렇지만 필요에 따라 MongoDB를 쓸 일이 있을 것이다. AWS에서 Bitnami의 이미지를 활용해서 EC2에 MongoDB를 올려보고, 시험 삼아 데이터를 넣어보자.

EC2 설정

EC2 인스턴스를 생성하기 위해 AWS의 EC2 콘솔로 들어간다. 아래 스크린샷과 같은 화면이 나오면, ‘인스턴스 시작’을 누른다.

그리고 검색어에서 MongoDB를 입력하고, 왼쪽에서 AWS Marketplace를 누른다.

스크롤을 아래로 내리다 보면, ‘MongoDB Certified by Bitnami’가 있다. 오른쪽의 선택 버튼을 누른다.

2018년 회고

개인적으로는 변화가 많은 한 해였습니다. 업무의 분야가 바뀌었고, 새로운 환경에 적응해야 했으며, 주로 쓰는 프로그래밍 언어도 바뀌었습니다. 2018년에 일어났던 일들 중 주요한 몇 가지에 대해 다루어 보려고 합니다.

서비스를 만드는 경험

서비스를 만드는 기업으로 이직하겠다는 생각은 계속 했지만, 이를 행동으로 옮긴 건 작년이 처음이었습니다. 그 과정에서 제가 느낀 점은 두 가지로 요약할 수 있을 것 같아요.

1. 협업 이야기

저는 서비스를 기반부터 개발하는 경험이 부족했습니다. 교육 분야에서 비슷한 서비스를 개발한 사례가 많지 않아, 특히 데이터를 다루는 서비스를 어떻게 개발하는지에 대해 많이 찾아봤었습니다. 이 과정에서 많은 삽질이 있었습니다. 그리고 부서에 개발자가 많지 않은 상황이었는데, 중간에 개발자가 나오고 들어오는 경우가 있었습니다. 나갈 사람이 하던 일을 이어갈 수 있도록 하는 부분과, 새로 들어온 사람에게 개발하는 서비스가 어떤 의미가 있는지를 이야기 하는 데 많은 에너지를 쓴 것 같네요.

Netstat으로 리눅스 서버에서 클라이언트 접속 확인하기

회사에서 개발한 웹 서비스의 내부 테스트 버전을 배포하고, 다음과 같은 질문을 받았다.

박대리님, 서버에서 클라이언트가 몇 명이 접속 중인지 알 수 있는 방법이 있을까요?

사실 여러 사람을 대상으로 하는 웹 서비스를 개발하고 배포하는 건 처음이라, 이걸 어떻게 알 수 있는지 궁금하긴 했다.

그래서, how to get the number of connections from web server라는 키워드로 구글 검색을 해 보았다.

여기 나오는 문서들 중에서 가장 많이 언급되는 유틸리티가 netstat인데, 여기서 연결 개수를 어떻게 체크해 볼 수 있는지 알아보자.

파이썬 문자열 다루기 - str.format()

문자열을 다루다 보면 .format()을 사용하는데, .format()으로 어떻게 문자열 중간을 채워볼 지에 대해 알아보겠다. 이 글은 필요할 때 매번 찾아보다가 귀찮아서 정리해 본 것이다.

들어가기 전에…

혹시 C를 배워본 적이 있는지? C에는 printf()라는 함수가 있다. 변수의 내용을 표시하기 위해 아래 코드와 같이 %d, %f등의 문자열을 사용한 적이 있을 것이다.

int a = 0;
printf('%d', a);

파이썬 또한 이런 방법을 지원한다. 하지만 튜플이나 딕셔너리와 같은 자료형은 제대로 표시되지 않는 문제가 있다고 한다. 자세한 내용은 링크를 참조하자.