유누킴

AWS Lambda로 FCM 전송하기 본문

Tech/Others

AWS Lambda로 FCM 전송하기

Yunhoo_kim 2019. 4. 2. 09:43
728x90

1. AWS Lambda 란 무엇인가.

Amazon Web Service에서 제공하는 Serverless function이다.

Serverless는 말 그대로 서버가 없는 실행 코드들을 의미한다.

그럼 궁금할 것이다. 어떻게 관리하는 서버가 없는데 코드가 돌아가? 결국은 서버가 있는거잖아!

맞다. 서버가 없는 실행 코드는 없다.

다만 내가 관리하는 서버가 없을뿐.

Serverless는 Cloud를 제공하는 서버에 나의 코드를 실행하는 시스템이다.

나는 개발팀인 것이고, AWS, GCP는 우리의 배포 및 운영 팀이 되는 것이다.

우리가 만든 코드에 필요한 의존성을 명시하고 코드를 클라우드 서버로 올려놓게 되면, 코드 실행은 클라우드 사에서 책임 지므로 우리는 관리하는 서버가 없어진다. 이러므로 Serverless가 된다.

나는 현재 이 Lambda를 통해서 서버에서 Third party api call(문자 전송, 푸시 전송, 이메일 전송, 이미지 업로드 등) 서버에게 블락킹 코드를 실행하는 부분을 lambda를 사용해서 활용하고 있다. (초기 스타트업에겐 lambda는 사랑입니다.)

2. Lambda 생성법(python)

** Aws cli 환경 설정은 되어있다는 가정입니다. (설정 방법에 대한 포스팅 예정)

virtualenv lambda-venv
source lambda-venv/bin/activate
pip install pyFCM
cd lambda-venv/lib/python3.7/site-packages
zip -r9 ../Lambda/fcmpush.zip * # 압축해줍니다.
cd ~/lambda_env/fcmpush/ 
zip -g fcmpush.zip fcmpush.py
aws lambda create-function --function-name apiFCMServer \
	--zip-file fileb://~/Lambda/pyfcm.zip \
    --role IAM역할 \
	--handler fcmpush.fcmPush \
	--runtime python3.6

 

  1. 람다를 배포할 가상 환경을 생성합니다.
  2.  생성한 가상환경에 필요한 패키지를 설치한 뒤 site-packages를 zip파일로 압축합니다.
  3. 배포 하려고 하는 코드를 패키지를 압축한 zip파일 안에 넣어줍니다.
  4. aws-cli를 통해서 함수를 생성해줍니다.
  5. function-name : 함수를 호출할때 사용할 이름
    zip-file : 생성한 zip 파일의 경로
    role : lambda를 생성할 때 사용할 iam role
    handler : 실제 람다가 실행할 함수
    runtime : 어떤 플랫폼을 사용할 지 선택

3. Lambda 업데이트

 

aws lambda update-function-code --function-name apiFCMServer \
	--zip-file fileb://zip 경로

4. Lambda 호출

import boto3
client = boto3.client("lambda")
client.invoke(FunctionName="apiFCMServer", InvocationType="Event", Payload=bytes(json.dumps(payload), "utf-8"))

 

Source Code: https://github.com/Yunhoo-Kim/fcmLambda

 

Yunhoo-Kim/fcmLambda

fcmLambda. Contribute to Yunhoo-Kim/fcmLambda development by creating an account on GitHub.

github.com