
Client가 직접 Lambda 함수를 직접 호출할 수 있지만, 이를 위해서는 cli에게 IAM 권환이 있어야하고, 로드밸런서를 통해 cli와 Lambda 사이에 권한을 둘 수 있다.
->but Lambda 함수가 HTTP 엔드포인트로 노출된다.(노출된 엔드포인트는 웹에서 직접 엑세스될 위험이 있다)
AWS의 API Gateway에 들어가면 API 유형을 선택할 수 있다. 일단 REST API를 개발해보자.

간단한 설정을 진행하고 API를 생성해보자.

리소스 생성을 하자(테스트에 사용할 lambda 함수도 만들자)
# 람다 함수에 사용할 코드
import json
def lambda_handler(event, context):
# TODO implement
body = "Hello from Lambda!"
statusCode = 200
return {
"statusCode": statusCode,
"body": json.dumps(body),
"headers" : {
"Content-Type" : "application/json"
}
}
람다함수의 ARN(Amazon 리소스 이름, )를 통해 Gateway와 통합하자
람다가 재전송해주는 것을 확인하기 위해 프록시 통합을 켜주자

설정을 완료하면 APi Gateway가 Lambda를 호출하는 것을 볼 수 있다

정책 문서에서 API Gateway가 Lambda 함수를 호출할 수 있도록 허용함을 볼 수 있다.
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "5ccc40dc-0e8b-5dc3-b3ee-e770825536b8",
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:ap-northeast-2:054402936539:function:api-gateway-get",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:execute-api:ap-northeast-2:054402936539:s19wemh2e6/*/GET/"
}
}
}
]
}
이제 api를 테스트해보자
아래의 테스트를 통해 Get요청을 보내보자.(응답 본문과 헤더를 확인할 수 있고, 로그도 잘 찍혀있다)

람다 함수로 어떤 것들이 전송되는지도 확인해보자
소스 코드에print(event)를 추가해서 배포하고 다시 테스트를 진행하면 CloudWatch에서 로그를 확인할 수 있다

API Gateway UI에서말고 웹 브라우저에서 접근가능하게 작업을 해보자

https://s19wemh2e6.execute-api.ap-northeast-2.amazonaws.com/dev배포를 완료하면 호출 URL이 생긴다. 이를 통해 웹 브라우저에서 접근해보자

위와 같이 손쉽게 클릭 몇번으로 배포할 수 있다.
단계: API의 서로 다른 버전이나 상태를 나타내는 환경을 의미(각 단계는 독립적인 엔드포인트를 가진다)
이를 통해 우리는 같은 API에 대해 서로 다른 환경을 설정하고 관리할 수 있다.
예를 들어, 'dev' 단계는 개발자가 새로운 기능을 개발하거나 기존 기능을 수정하는 곳일 수 있습니다. 개발자는 'dev' 단계에서 코드를 테스트하고, 모든 변경 사항이 정상적으로 작동하는 것을 확인한 후에 다음 단계로 넘어갈 수 있습니다.
그 다음 단계는 'test'가 될 수 있습니다. 이 단계에서는 'dev' 단계에서 개발된 기능이 실제 서비스 환경에서 어떻게 작동하는지를 테스트합니다. 만약 이 단계에서 문제가 발견되면 개발자는 다시 'dev' 단계로 돌아가 문제를 해결할 수 있습니다. 마지막으로, 'prod' 단계는 실제 서비스 환경을 의미합니다. 이 단계에서는 사용자가 실제로 사용하는 API가 호스팅됩니다. 'dev'와 'test' 단계에서 모든 테스트가 끝난 후, 그 변경 사항들이 'prod' 단계로 배포됩니다.
새 버전을 발행하자(v1, v2)

버전을 발행하고 나면 각 버전마다 별칭을 지정할 수 있다.

이제 API Gateway에서 올바른 별칭과 연결하자
람다 함수를 연결할 때 주의 api-gateway-get:${stageVariables, lambdaAlias}
- 아니 이 부분은 강의와 현재 AWS와 달라서 계속 오류 발생
예를 들어, 배포의 10%를 카나리 배포로 설정하면, 새로운 API 버전의 트래픽은 전체 트래픽의 10%만 받게 됩니다. 이를 통해 새 버전에서 발생할 수 있는 문제를 식별하고, 전체 사용자에게 영향을 미치기 전에 수정할 수 있습니다.
API 게이트웨이를 백엔드와 통합할 수 있는 여러 방식
HTTP_PROXY는 일반적인 HTTP 엔드포인트와 통합하려는 경우에 사용되며, AWS_PROXY(Lambda Proxy)는 AWS Lambda 함수와 통합하려는 경우에 사용됩니다.
매핑 템플릿은 요청 또는 응답 데이터를 변환하는 데 사용됩니다.
예를 들어, SOAP 서비스와 통합하는 경우 클라이언트로부터 받은 JSON 요청을 XML로 변환하여 서버에 전달하고, 서버로부터 받은 XML 응답을 다시 JSON으로 변환하여 클라이언트에게 반환할 수 있습니다. 이런 과정을 통해 서로 다른 데이터 형식을 가진 시스템 간에 원활한 통신이 가능합니다.

SOAP API, REST API
SOAP 메시지는 XML 형식을 사용한다. 반면에 REST는 JSON 형식을 지원하며, 구조가 더 간단하다.
