【PF-1】APIGateway・Lambda

10688 단어 AWSSPAtech

API 구성


다음 API 구조를 사용하여 생성
 ▼/
  ▼ /ctrl
   ▼ /users
      GET
      OPTIONS
      POST
    ▼/{user_id}
       DELETE
       GET
       OPTIONS
       PATCH

lambda 프록시 병합 설정


DynamoDB의 섹션 키는 user_id이기 때문에 lambda에서 경로 파라미터user_id를 이용하려고 합니다.
따라서 /ctrl/users/{user_id} 정하의 방법Lambda 에이전트 통합을 설정했다.
경로 매개 변수는 lambda에서 다음과 같은 방식으로 수신합니다
def lambda_handler(event, context):
    id = event["pathParameters"]['user_id']
    // ・・・

lambda 프록시 통합을 설정할 때 주의사항


lambda에서 클라이언트가 요청한 값을 사용할 때


lambda 프록시 통합을 설정하지 않으면 lambda에서 요청 주체의 내용을 수신하고 처리할 수 있습니다.
def lambda_handler(event, context):
    postResponse = table.put_item(
        Item={
            'user_id': event['user_id'],
            'comment': event['comment'],
            'first_name': event['first_name'],
            'last_name': event['last_name'],
            'mail': event['mail']
        }
    )
만약에 한 측이 lambda 프록시 합병을 설정한다면 다음과 같이 해야 한다.
def lambda_handler(event, context):
    postResponse = table.put_item(
        Item={
            'user_id': event['body']['user_id'],
            'comment': event['body']['comment'],
            'first_name': event['body']['first_name'],
            'last_name': event['body']['last_name'],
            'mail': event['body']['mail']
        }
    )
Lamba 에이전트가 통합된 상황에서 APIGateway가 진행했기 때문전체 클라이언트 요청을 백엔드 Lambda 함수의 입력 이벤트 매개 변수에 매핑

CORS의 유효성


lambda 프록시 통합을 설정하지 않으면 REST API 리소스에서 CORS 지원 활성화 가능합니다.
다른 한편, lambda 프록시 통합을 설정한 경우 응답 헤더에 직접 기록해야 한다
return {
        'statusCode': 200,
        'headers': {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": event['httpMethod']
        },
        'body': json.dumps(・・・)
    }

lambda 함수


모든 방법은 lambda 함수를 준비했고 각각의 lambda 함수는 DynamoDB에 로그인된 테이블에서 데이터를 조작합니다.
기본적으로 개발자 가이드를 따라 묘사할 수 있다.
업데이트에 주의하기만 하면 다음과 같다.
event_body = json.loads(event['body'])
updateResponse = table.update_item(
Key=partition_key,
UpdateExpression="set first_name=:fn, last_name=:ln, mail=:mail",
ExpressionAttributeValues={
    ':fn': event_body['first_name'],
    ':ln': event_body['last_name'],
    ':mail': event_body['mail']
},
ReturnValues="UPDATED_NEW"
)
API Gateway에서 건네준 event['body']stringjson.loads인 것 같아서 할 필요가 있다.
또한 다이나모DB에 등록된 값에 대한 업데이트는 UpdateExpression에서 업데이트된 다이나모DB 테이블의column명을 :xx(xx는 임의의 문자)로 변경하고ExpressionAttributeValues에서 각각 업데이트된 값을 설정한다.

좋은 웹페이지 즐겨찾기