Ch 04. 서버리스 어플리케이션 개발
13. IAM 정책 및 역할 만들기
14. Lambda 함수작성 A - 데이터 읽기
15. Lambda 함수작성 B - 데이터 삽입
람다서버 역할에 맞는 권한 설정이 필요하다
dynamo 접근권한이 필요한 lambda의 IAM 정책을 생성해 본다.

dynamo서비스를 선택후 상황에 맞는 작업을 선택하면 한다. 기능을 상펴보기 위함이니 모든 기능과 모든 리소스를 사용한다.

정책 이름 입력후 정책을 생성한다.

다음으로 역할을 추가한다. 어떤 서비스에게 정책을 할당하는 기능이다.

람다를 선택후 다음권한을 클릭한다.

추가한 정책 선택 후 다음.


정책을 생성하고 정책을 사요할 역할을 만드는 작업으로 사용할 서비스에 알맞는 권한을 부여할 수 있는 ami를 알아봤다.
lambda 작성 - dynamo read
docs.aws.amazon.com/ko_kr/lambda/latest/dg/lambda-runtimes.html
AWS Lambda 런타임 - AWS Lambda
AWS Lambda 런타임 AWS Lambda는 런타임 사용을 통해 여러 언어를 지원합니다. 함수를 생성할 때 런타임을 선택하며, 함수의 구성을 업데이트하여 런타임을 변경할 수 있습니다. 기반 실행 환경은 함
docs.aws.amazon.com
dynamo에서 데이터를 읽어오는 함수를 작성한다.


함수이름과 함수 환경을 선택한다 그리고 다른 서비스에 접근 하기 위한 역할을 할당한다. 함수 생성 후 함수 작성창이 나타난다.

boto3공식 문서를 참고하여 lambda 함수를 작성한다.
boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#table
DynamoDB — Boto3 Docs 1.16.19 documentation
TableName (string) -- [REQUIRED] Name of the table for which the customer wants to check the continuous backups and point in time recovery settings.
boto3.amazonaws.com
dynamo의 conference테이블에서 데이터를 가져오는 함수이다.
import json
import os
import boto3
from boto3.dynamodb.conditions import Key
def lambda_handler(event, context):
# TODO implement
user_id = event.get('user_id', None)
conf_type = event.get('type', None)
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['TABLE_NAME'])
if user_id == '*':
table.scan()
else:
if conf_type:
q = Key('user_id').eq(user_id) & Key('type').eq(conf_type)
else:
q = Key('user_id').eq(user_id)
r = table.query(
KeyConditionExpression = q
)
print(context)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!'),
'items':r['Items'],
'event':event
}
table 대한 내용은 환경변수로 입력 받을 수 있다.

함수 테스트를 위한 기능을 제공한다.

테스트에 대한 결과를 상단의 로그영역에서 확인 할 수 있다.

모니터링 탭에서는 cloudwatch를 통한 함수 호출 로그를 확인 할 수 있다.

lambda 작성 - dynamo write
함수이름과 런타임 환경을 설정하고 권한을 부여한다.

사용된 코드는 아래와 같다. event로 들어온 데이터를 dynamo에 입력하고 sns topci에 메세지를 publishing한다.
import json
import os
import boto3
def lambda_handler(event, context):
# TODO implement
user_id = event.get('user_id', None)
conf_type = event.get('type', None)
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['TABLE_NAME'])
r1 = table.put_item(
Item=event
)
sns = boto3.resource('sns')
topic = sns.Topic(os.environ['ARN'])
r2 = topic.publish(
Message=user_id,
Subject=conf_type
)
#print(r2)
#print(r1)
return {
'statusCode': 200,
"event":event
}
함수에대한 버전 관리 기능과 리소스 배분 기능을 제공 한다. 실무에서 많이 사용되는 기능이라고 한다.

18일 차 마무리
dynamo, sns와 연결되는 lamba 함수를 작성하였다. ami를 충분히 이해해야 aws서비스를 문제없이 사용할 수 있다. 이제 labmda를 사용한 서버리스 프로젝트의 시작이며 ec2로 서버를 구성할때와는 전혀 다른 환경이라 매우 새롭다.
현재 수강 중인 강의는 아래와 같다
올인원 패키지 : AWS/Docker 클라우드 서버구축👉https://bit.ly/3bFlm0e