이 자습서에서는 HTTP 요청을 사용하여 Lambda 함수를 간접 호출하는 REST API를 생성합니다. Lambda 함수는 DynamoDB 테이블에서 생성, 읽기, 업데이트 및 삭제(CRUD) 작업을 수행합니다. 이 함수는 여기서 데모용으로 제공되지만, 모든 Lambda 함수를 간접 호출할 수 있는 API Gateway REST API를 구성하는 방법을 배울 수 있습니다.

API Gateway를 사용하면 Lambda 함수를 간접 호출할 수 있는 안전한 HTTP 엔드포인트가 사용자에게 제공되며, 트래픽을 제한하고 API 간접 호출을 자동으로 검증 및 승인하여 함수에 대한 대량의 간접 호출을 관리할 수 있습니다. 또한 API Gateway는 AWS Identity and Access Management(IAM) 및 Amazon Cognito를 사용하여 유연한 보안 제어 기능을 제공합니다. 이는 애플리케이션을 호출하기 위해 사전 승인이 필요한 사용 사례에 유용합니다.
작은 정보
Lambda는 HTTP 엔드포인트를 통해 함수를 간접적으로 호출하는 두 가지 방법인 API 게이트웨이와 Lambda 함수 URL을 제공합니다. 사용 사례에 가장 적합한 방법을 잘 모르는 경우 HTTP 요청을 사용하여 Lambda 함수를 간접 호출하는 메서드 선택 섹션을 참조하세요.
이 자습서를 완료하는 과정에서 다음 단계를 거치게 됩니다.
-
Python 또는 Node.js 언어로 Lambda 함수를 생성하고 구성하여 DynamoDB 테이블에 대해 작업을 수행합니다.
-
API Gateway에서 REST API를 생성하여 Lambda 함수에 연결합니다.
-
DynamoDB 테이블을 정의한 후 콘솔에서 Lambda 함수를 사용하여 테스트합니다.
-
터미널에서 curl을 사용하여 API를 배포하고 전체 설정을 테스트합니다.
이 단계를 완료하면 API Gateway를 사용하여 어떤 규모에서든 Lambda 함수를 안전하게 간접 호출할 수 있는 HTTP 엔드포인트를 생성하는 방법을 배우게 됩니다. 또한 API를 배포하는 방법과 콘솔에서 API를 테스트하는 방법, 그리고 터미널에서 HTTP 요청을 보내 AI를 테스트하는 방법을 배우게 됩니다.
Sections
사전 조건
아직 AWS Command Line Interface를 설치하지 않은 경우 AWS CLI의 최신 버전 설치 또는 업데이트에서 설명하는 단계에 따라 설치하세요.
이 자습서에서는 명령을 실행할 셸 또는 명령줄 터미널이 필요합니다. Linux 및 macOS에서는 선호하는 셸과 패키지 관리자를 사용합니다.
참고
Windows에서는 Lambda와 함께 일반적으로 사용하는 일부 Bash CLI 명령(예:zip
)은 운영 체제의 기본 제공 터미널에서 지원되지 않습니다. Ubuntu와 Bash의 Windows 통합 버전을 가져오려면 Linux용 Windows Subsystem을 설치
권한 정책 생성

Lambda 함수의 실행 역할을 생성하려면 먼저 권한 정책을 생성하여 필요한 AWS 리소스에 액세스할 권한을 함수에 부여해야 합니다. 이 자습서에서는 이 정책을 통해 Lambda가 DynamoDB 테이블에서 CRUD 작업을 수행하고 Amazon CloudWatch Logs 로그에 쓸 수 있도록 합니다.
정책 생성
-
IAM 콘솔에서 정책 페이지
를 엽니다. -
정책 생성(Create Policy)을 선택합니다.
-
JSON 탭에서 다음과 같은 사용자 지정 정책을 JSON 편집기에 붙여 넣습니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1428341300017", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "", "Resource": "*", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow" } ] }
-
다음: 태그를 선택합니다.
-
다음: 검토(Next: Review)를 선택합니다.
-
정책 검토의 이름에
lambda-apigateway-policy
를 입력합니다. -
정책 생성을 선택합니다.
실행 역할 만들기

실행 역할은 AWS 서비스 및 리소스에 액세스할 수 있는 권한을 Lambda 함수에 부여하는 AWS Identity and Access Management(IAM) 역할입니다. 함수가 DynamoDB 테이블에 대해 작업을 수행할 수 있도록 하려면 이전 단계에서 생성한 권한 정책을 연결합니다.
실행 역할을 생성하고 사용자 지정 권한 정책을 연결하려면
-
IAM 콘솔에서 역할 페이지
를 엽니다. -
역할 생성을 선택합니다.
-
신뢰할 수 있는 엔터티의 유형으로 AWS 서비스를 선택한 다음 사용 사례로 Lambda를 선택합니다.
-
Next(다음)를 선택합니다.
-
정책 검색 상자에
lambda-apigateway-policy
를 입력합니다. -
검색 결과에서 생성한 정책(
lambda-apigateway-policy
)을 선택한 후, 다음(Next)을 선택합니다. -
Role details(역할 세부 정보)에서 Role name(역할 이름)에
lambda-apigateway-role
을 입력한 다음 Create role(역할 생성)을 선택합니다.
자습서 뒷부분에서는 방금 생성한 역할의 Amazon 리소스 이름(ARN)이 필요합니다. IAM 콘솔의 Roles(역할) 페이지에서 역할의 이름(lambda-apigateway-role
)을 선택하고 Summary(요약) 페이지에 표시된 Role ARN(역할 ARN)을 복사합니다.
함수 생성

다음 코드 예제는 API Gateway로부터 생성하려는 DynamoDB 테이블과 일부 페이로드 데이터에 대해 수행할 작업을 지정하는 이벤트 입력을 수신합니다. 수신된 파라미터가 유효하면 함수가 테이블에 대해 요청된 작업을 수행합니다.
예 index.mjs
region
설정에 유의하세요. 함수를 배포하고 DynamoDB 테이블을 생성하는 AWS 리전과 일치해야 합니다.
import { DynamoDBDocumentClient, PutCommand, GetCommand,
UpdateCommand, DeleteCommand} from "@aws-sdk/lib-dynamodb";
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
const ddbClient = new DynamoDBClient({ region: "us-east-2
" });
const ddbDocClient = DynamoDBDocumentClient.from(ddbClient);
// Define the name of the DDB table to perform the CRUD operations on
const tablename = "lambda-apigateway";
/**
* Provide an event that contains the following keys:
*
* - operation: one of 'create,' 'read,' 'update,' 'delete,' or 'echo'
* - payload: a JSON object containing the parameters for the table item
* to perform the operation on
*/
export const handler = async (event, context) => {
const operation = event.operation;
if (operation == 'echo'){
return(event.payload);
}
else {
event.payload.TableName = tablename;
let response;
switch (operation) {
case 'create':
response = await ddbDocClient.send(new PutCommand(event.payload));
break;
case 'read':
response = await ddbDocClient.send(new GetCommand(event.payload));
break;
case 'update':
response = ddbDocClient.send(new UpdateCommand(event.payload));
break;
case 'delete':
response = ddbDocClient.send(new DeleteCommand(event.payload));
break;
default:
response = 'Unknown operation: ${operation}';
}
console.log(response);
return response;
}
};
참고
이 예제에서는 DynamoDB 테이블의 이름이 함수 코드에 변수로 정의됩니다. 실제 애플리케이션에서는 이 파라미터를 환경 변수로 전달하고 테이블 이름을 하드 코딩하지 않는 것이 좋습니다. 자세한 내용은 AWS Lambda 환경 변수 사용 섹션을 참조하세요.
함수를 만들려면
-
코드 예제를 이름이
index.mjs
인 파일로 저장하고 필요한 경우 코드에 지정된 AWS 리전을 편집합니다. 코드에 지정된 리전은 자습서 뒷부분에서 DynamoDB 테이블을 생성하는 리전과 동일해야 합니다. -
다음
zip
명령을 사용하여 배포 패키지를 생성합니다.zip function.zip index.mjs
-
create-function
AWS CLI 명령을 사용하여 Lambda 함수를 생성합니다.role
파라미터에 이전에 복사한 실행 역할의 Amazon 리소스 이름(ARN)을 입력합니다.aws lambda create-function \ --function-name LambdaFunctionOverHttps \ --zip-file fileb://function.zip \ --handler index.handler \ --runtime nodejs22.x \ --role
arn:aws:iam::123456789012:role/service-role/lambda-apigateway-role
AWS CLI를 사용하여 함수 간접 호출

함수를 API Gateway와 통합하기 전에 함수를 성공적으로 배포했는지 확인합니다. API Gateway API가 Lambda로 전송할 파라미터를 포함하는 테스트 이벤트를 생성하고 AWS CLI invoke
명령을 사용하여 함수를 실행합니다.
AWS CLI를 사용하여 Lambda 함수를 간접 호출하려면
-
다음 JSON을
input.txt
라는 파일로 저장합니다.{ "operation": "echo", "payload": { "somekey1": "somevalue1", "somekey2": "somevalue2" } }
-
다음
invoke
AWS CLI 명령을 실행합니다.aws lambda invoke \ --function-name LambdaFunctionOverHttps \ --payload file://input.txt outputfile.txt \ --cli-binary-format raw-in-base64-out
cli-binary-format 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. 이 설정을 기본 설정으로 지정하려면
aws configure set cli-binary-format raw-in-base64-out
을(를) 실행하세요. 자세한 내용은 AWS CLI 지원되는 글로벌 명령줄 옵션을 AWS Command Line Interface 사용 설명서 버전 2에서 참조하세요.다음과 같은 응답이 표시되어야 합니다.
{ "StatusCode": 200, "ExecutedVersion": "LATEST" }
-
함수가 JSON 테스트 이벤트에 지정된
echo
작업을 수행했는지 확인합니다.outputfile.txt
파일을 검사하여 다음 항목이 포함되어 있는지 확인합니다.{"somekey1": "somevalue1", "somekey2": "somevalue2"}
API Gateway를 사용하여 REST API 생성

이 단계에서는 Lambda 함수를 간접 호출하는 데 사용할 API Gateway REST API를 생성합니다.
API를 생성하려면
-
API Gateway 콘솔
을 엽니다. -
API 생성(Create API)을 선택합니다.
-
REST API 상자에서 빌드를 선택합니다.
-
API 세부 정보에서 새 API를 선택한 상태로 두고 API 이름에
DynamoDBOperations
를 입력합니다. -
API 생성(Create API)을 선택합니다.
REST API에서 리소스 생성

API에 HTTP 메서드를 추가하려면 먼저 해당 메서드가 작동하는 데 필요한 리소스를 생성해야 합니다. 여기서는 DynamoDB 테이블을 관리하기 위한 리소스를 생성합니다.
리소스를 생성하려면
-
API Gateway 콘솔
의 사용하는 API에 대한 리소스 페이지에서 리소스 생성을 선택합니다. -
리소스 세부 정보에서 리소스 이름에
DynamoDBManager
를 입력합니다. -
리소스 생성을 선택합니다.
HTTP POST 메서드 생성

이 단계에서는 DynamoDBManager
리소스의 메서드(POST
)를 생성합니다. 이 POST
메서드를 Lambda 함수에 연결하여 이 메서드가 HTTP 요청을 수신하면 API Gateway가 Lambda 함수를 간접 호출하도록 합니다.
참고
이 자습서에서는 HTTP 메서드(POST
)를 하나 사용하여 DynamoDB 테이블에 대해 모든 작업을 수행하는 단일 Lambda 함수를 간접 호출합니다. 실제 애플리케이션에서는 각 작업마다 서로 다른 Lambda 함수와 HTTP 메서드를 사용하는 것이 좋습니다. 자세한 내용은 Serverless Land의 The Lambda monolith
POST 메서드를 생성하려면
-
API의 리소스 페이지에서
/DynamoDBManager
리소스가 강조 표시되어 있는지 확인합니다. 그런 다음, 메서드 창에서 메서드 생성을 선택하세요. -
메서드 유형에서 POST를 선택합니다.
-
통합 유형에서 Lambda 함수를 선택한 상태로 둡니다.
-
Lambda 함수에서 함수의 Amazon 리소스 이름(ARN)(
LambdaFunctionOverHttps
)을 선택합니다. -
메서드 생성을 선택합니다.
DynamoDB 테이블 생성

Lambda 함수가 CRUD 작업을 수행할 빈 DynamoDB 테이블을 생성합니다.
DynamoDB 테이블을 생성하려면
-
DynamoDB 콘솔의 테이블 페이지
를 엽니다. -
테이블 생성을 선택합니다.
-
테이블 세부 정보에서 다음을 수행합니다.
-
테이블 이름에
lambda-apigateway
을(를) 입력합니다. -
파티션 키에서
id
를 입력하고 데이터 유형을 문자열로 설정합니다.
-
-
Table settings(테이블 설정)에서 Default settings(기본 설정)을 그대로 둡니다.
-
테이블 생성을 선택합니다.
API Gateway, Lambda 및 DynamoDB의 통합 테스트

이제 API Gateway API 메서드와 Lambda 함수 및 DynamoDB 테이블의 통합을 테스트할 준비가 되었습니다. API Gateway 콘솔을 사용하여 콘솔의 테스트 함수를 통해 POST
메서드에 직접 요청을 보냅니다. 이 단계에서는 먼저 create
작업을 사용하여 DynamoDB 테이블에 새 항목을 추가한 다음 update
작업을 사용하여 해당 항목을 수정합니다.
테스트 1: DynamoDB 테이블에 새 항목을 생성하려면
-
API Gateway 콘솔
에서 API( DynamoDBOperations
)를 선택합니다. -
DynamoDBManager
리소스에서 POST 메서드를 선택합니다. -
테스트 탭을 선택합니다. 탭을 표시하려면 오른쪽 화살표 버튼을 선택해야 할 수도 있습니다.
-
메서드 테스트에서 쿼리 문자열과 헤더는 비워 둡니다. 요청 본문에 다음 JSON을 붙여넣습니다.
{ "operation": "create", "payload": { "Item": { "id": "1234ABCD", "number": 5 } } }
-
테스트를 선택합니다.
테스트가 완료될 때 표시되는 결과에
200
상태가 표시되어야 합니다. 이 상태 코드는create
작업이 성공했음을 나타냅니다.이를 확인하려면 DynamoDB 테이블에 새 항목이 포함되어 있는지 확인합니다.
-
DynamoDB 콘솔의 Tables
(테이블) 페이지를 열고 lambda-apigateway
테이블을 선택합니다. -
Explore table items(테이블 항목 탐색)를 선택합니다. Items returned(반환된 항목) 창에 ID가
1234ABCD
이고 number(번호)가5
인 항목이 하나 표시되어야 합니다. 예시:
테스트 2: DynamoDB 테이블의 항목을 업데이트하려면
-
API Gateway 콘솔
에서 POST 메서드의 테스트 탭으로 돌아갑니다. -
메서드 테스트에서 쿼리 문자열과 헤더는 비워 둡니다. 요청 본문에 다음 JSON을 붙여넣습니다.
{ "operation": "update", "payload": { "Key": { "id": "1234ABCD" }, "UpdateExpression": "SET #num = :newNum", "ExpressionAttributeNames": { "#num": "number" }, "ExpressionAttributeValues": { ":newNum": 10 } } }
-
테스트를 선택합니다.
테스트가 완료될 때 표시되는 결과에
200
상태가 표시되어야 합니다. 이 상태 코드는update
작업이 성공했음을 나타냅니다.이를 확인하려면 DynamoDB 테이블의 항목이 수정되었는지 확인하세요.
-
DynamoDB 콘솔의 Tables
(테이블) 페이지를 열고 lambda-apigateway
테이블을 선택합니다. -
Explore table items(테이블 항목 탐색)를 선택합니다. Items returned(반환된 항목) 창에 ID가
1234ABCD
이고 number(번호)가10
인 항목이 하나 표시되어야 합니다.
API 배포

클라이언트가 API를 호출하기 위해서는 배포 및 연결된 단계를 생성해야 합니다. 단계는 메서드와 통합을 포함한 API의 스냅샷을 나타냅니다.
API를 배포하려면
-
API Gateway 콘솔
의 APIs(API) 페이지를 열고 DynamoDBOperations
API를 선택합니다. -
API의 리소스 페이지에서 API 배포를 선택합니다.
-
단계에서 *새 단계*를 선택하고 단계 이름에
test
를 입력합니다. -
배포(Deploy)를 선택합니다.
-
단계 세부 정보 창에서 간접 호출 URL을 복사합니다. 다음 단계에서는 이 URL을 사용하여 HTTP 요청을 통해 함수를 간접 호출합니다.
curl을 사용하여 HTTP 요청을 통해 함수 간접 호출

이제 API에 HTTP 요청을 전송하여 Lambda 함수를 간접 호출할 수 있습니다. 이 단계에서는 DynamoDB 테이블에 새 항목을 생성한 다음, 해당 항목에 대한 읽기, 업데이트 및 삭제 작업을 수행합니다.
curl을 사용하여 DynamoDB 테이블에 항목을 생성하려면
-
이전 단계에서 복사한 간접 호출 URL을 사용하여 다음
curl
명령을 실행합니다. curl을-d
(데이터) 옵션과 함께 사용하면 자동으로 HTTP POST 메서드가 사용됩니다.curl https://
l8togsqxd8.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "create", "payload": {"Item": {"id": "5678EFGH", "number": 15}}}'작업이 성공했다면 HTTP 상태 코드 200이 포함된 응답이 반환되어야 합니다.
-
또한 다음 작업을 수행하여 새 항목이 테이블에 있는지 확인하기 위해 DynamoDB 콘솔을 사용할 수도 있습니다.
-
DynamoDB 콘솔의 Tables
(테이블) 페이지를 열고 lambda-apigateway
테이블을 선택합니다. -
Explore table items(테이블 항목 탐색)를 선택합니다. Items returned(반환된 항목) 창에 ID가
5678EFGH
이고 번호가15
인 항목이 표시되어야 합니다.
-
curl을 사용하여 DynamoDB 테이블에서 항목을 읽으려면
-
다음
curl
명령을 실행하여 방금 생성한 항목의 값을 읽습니다. 실제 간접 호출 URL을 사용하세요.curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager -d \ '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'Node.js 또는 Python 함수 코드 중 무엇을 선택했는지에 따라 다음 중 하나와 같은 출력이 표시되어야 합니다.
{"$metadata":{"httpStatusCode":200,"requestId":"7BP3G5Q0C0O1E50FBQI9NS099JVV4KQNSO5AEMVJF66Q9ASUAAJG", "attempts":1,"totalRetryDelay":0},"Item":{"id":"5678EFGH","number":15}}
curl을 사용하여 DynamoDB 테이블의 항목을 업데이트하려면
-
다음
curl
명령을 실행하여,number
값을 변경함으로써 방금 생성한 항목을 업데이트합니다. 실제 간접 호출 URL을 사용하세요.curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "update", "payload": {"Key": {"id": "5678EFGH"}, "UpdateExpression": "SET #num = :new_value", "ExpressionAttributeNames": {"#num": "number"}, "ExpressionAttributeValues": {":new_value": 42}}}' -
항목의
number
값이 업데이트되었는지 확인하려면, 다음과 같이 다른 읽기 명령을 실행합니다.curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'
curl을 사용하여 DynamoDB 테이블의 항목을 삭제하려면
-
다음
curl
명령을 실행하여 방금 생성한 항목을 삭제합니다. 실제 간접 호출 URL을 사용하세요.curl https://
l8togsqxd8.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "delete", "payload": {"Key": {"id": "5678EFGH"}}}' 삭제 작업이 성공했는지 확인합니다. DynamoDB 콘솔 Explore items(항목 탐색) 페이지의 Items returned(반환된 항목) 창에서 ID가
5678EFGH
인 항목이 더 이상 테이블에 없는지 확인합니다.
리소스 정리(선택 사항)
이 자습서 용도로 생성한 리소스를 보관하고 싶지 않다면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.
Lambda 함수를 삭제하려면
-
Lambda 콘솔의 함수 페이지
를 엽니다. -
생성한 함수를 선택합니다.
-
작업, 삭제를 선택합니다.
-
텍스트 입력 필드에
confirm
를 입력하고 Delete(삭제)를 선택합니다.
집행 역할 삭제
-
IAM 콘솔에서 역할 페이지
를 엽니다. -
생성한 실행 역할을 선택합니다.
-
Delete(삭제)를 선택합니다.
-
텍스트 입력 필드에 역할의 이름을 입력하고 Delete(삭제)를 선택합니다.
API를 삭제하려면
-
API Gateway 콘솔의 API 페이지
를 엽니다. -
생성한 API를 선택합니다.
-
작업, 삭제를 선택합니다.
-
Delete(삭제)를 선택합니다.
DynamoDB 테이블을 삭제하려면
-
DynamoDB 콘솔의 테이블 페이지
를 엽니다. -
생성한 테이블을 선택합니다.
-
Delete(삭제)를 선택합니다.
-
텍스트 상자에
delete
를 입력합니다. -
테이블 삭제를 선택합니다.