AWS에서 Serverless Architecture를 고려할 때 Lambda도 중요한 요소 같아요.

저도 Lambda를 좀 사용해보려고 하고 있고 몇 가지 포스팅도 남겼었던 것 같아요.


2017/03/01 - Lambda로 Slack에 메세지 작성하기를 위한 key 생성 및 URL 암호화


2016/12/08 - Lambda로 Slack에 메세지 작성하기



이번 포스팅에서는 Lambda에서 외부 라이브러리를 사용하는 것을 2개 정도의 포스팅으로 나눠서 작성해보려고 합니다. 


사용하는 Runtime 환경은 Python 2.7 이고요. 목표는 psycopg2 library를 사용해서 RDS에 접근하고 SELECT 문을 수행하는 것입니다. 여기서 문제는 Lambda에서 psycopg2를 기본적으로 지원해주지 않는다는 것입니다. 추가하는 방법은 그렇게 어렵지는 않습니다.


1. 로컬에 Lambda 개발 환경을 만들어주세요. 


  - virtualenv 를 사용해서 만들고 awscli를 설치해주세요.


  - 가상환경 생성 : virtualenv venv_for_lambda 


  - aws commandline interface 설치 : pip install awscli 


  - mkdir testForLambda




2. psycopg2는 컴파일 하시거나 인터넷에 있는 것을 다운로드 합니다.

 

  - 다운로드 : https://github.com/jkehler/awslambda-psycopg2


  - 위 사이트에 들어가 보시면 How to use가 있습니다. 그대로 하시면 됩니다. 즉 1에서 생성한 testForLambda 폴더에 psycopg2 폴더를 위치시키면 끝입니다. 




3. test.py를 생성하고 아래와 같은 코드를 추가해주세요.


import psycopg2

def lambda_handler(event, context):
    try:
        conn = psycopg2.connect("dbname='aaa' user='userName' host='rds.ap-northeast-2~~~~~' password='password' ")
    except:
        print "not connect"
        cur = conn.cursor()

    try:
        sqlString = "SELECT * FROM TableName "
        cur.execute(sqlString)
    except Exception as e:
        print str(e)
        print "cannot SQL Execute"

    rows = cur.fetchall()



connect 코드는 적절하게 수정해주세요.



4. 거의 다왔습니다. zip 파일을 만들면 되고요.

   - zip -r9 test.zip ./testForLambda/psycopg2 ./testForLambda/test.py


5. awscli를 사용해서 업로드 합니다. 

   - aws lambda create-function --region ap-northeast-2 --function-name testExternalLibrary --zip-file fileb://~/test.zip --role arn:aws:iam:000~~:role/roleName --handler test.lambda_handler --runtime python2.7 --timeout 10 --memory-size 128 --profile default 





6. AWS console Lambda로 이동해서 Test 해봅니다. 

   - 결과는 실패로 나올꺼에요 !! 이유는 다음 포스팅에서 !! 
   - 간단히 설명하면 5번 내용을 좀 더 추가하면 가능합니다. 



'클라우드 > AWS,아마존' 카테고리의 다른 글

Route53 - CloudFront 연결 팁  (0) 2017.11.03
AWS S3 Bucket Share  (0) 2017.05.03
AWS Lambda using External Library - 002  (0) 2017.04.30
AWS Lambda using External Library - 001  (0) 2017.04.30
AWS AMI 제거하기  (0) 2017.04.02
AWS 계정 삭제하기 (account close)  (0) 2017.03.16
Logs Export to S3 in AWS CloudWatch  (0) 2017.03.13
Log File to AWS CloudWatch  (0) 2017.03.04

+ Recent posts