DynamoDB 생성
'테이블 생성' 버튼을 눌러 테이블을 생성하자
테이블 이름과 파티션 키를 아래와 같이 적고, 나머지 설정은 그대로 두자. 이대로 테이블을 생성한다.
Lambda 함수 생성
'함수 생성' 버튼을 눌러 함수를 생성하자.
'블루 프린트 사용' 을 선택해주고, 블루프린트 이름은 'Creat a microservice that interacts with a DDB table'로 설정하자.
역할 이름은 아래와 같이 써준다.
API 게이트웨이 트리거는 '제거' 버튼을 눌러 제거해주자. 이는 나중에 API Gateway 콘솔에서 api를 생성하고 추가해줄 것이다.
여기까지 설정을 마쳤다면, '함수 생성' 버튼을 눌러 함수를 생성한다.
생성 이후에는, '코드' 탭을 눌러 코드 소스를 확인하자.
index.mjs에 아래와 같이 코드를 작성해준다.
# Lambda function
import { DynamoDB } from '@aws-sdk/client-dynamodb';
import { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';
const dynamo = DynamoDBDocument.from(new DynamoDB());
export const handler = async (event) => {
let body;
let statusCode = '200';
const headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin':'*'
};
try {
switch (event.httpMethod) {
case 'DELETE':
body = await dynamo.delete(JSON.parse(event.body));
break;
case 'GET':
const article_id = event.queryStringParameters?.article_id;
if (article_id) {
// 특정 article_id에 해당하는 게시물 반환
body = await dynamo.get({
TableName: "simple_board",
Key: { 'article_id': article_id }
});
} else {
// 전체 게시물 목록 반환
body = await dynamo.scan({ TableName: "simple_board" });
}
break;
case 'POST':
body = await dynamo.put(JSON.parse(event.body));
break;
case 'PUT':
body = await dynamo.update(JSON.parse(event.body));
break;
default:
throw new Error(`Unsupported method "${event.httpMethod}"`);
}
} catch (err) {
statusCode = '400';
body = err.message;
} finally {
body = JSON.stringify(body);
}
return {
statusCode,
body,
headers,
};
};
API Gateway 생성
'API 생성' 버튼을 누르자.
REST API를 이용할 것이므로 REST API탭에서 '구축' 버튼을 눌러준다.
'새 API'를 선택해주고, 이름을 적어준다. 그리고 'API 생성' 버튼을 누르자.
'리소스 생성' 버튼을 누르자.
아래와 같이 리소스 경로와 이름을 적어주고, CORS를 활성화한다.
article_resource 경로 내에 메서드를 생성하자. '메서드 생성' 버튼을 누르자.
'GET' 메서드 유형을 선택해주고, 통합 유형은 'Lambda 함수'를 선택해준다.
'프록시 통합' 설정은 ON으로 맞춰주고, 아까 생성한 'simple_board_function' 람다함수를 선택해준다.
그리고 '메서드 생성' 버튼을 눌러 메서드를 생성해주자.
위와 같은 과정을 반복하여 GET, POST, DELETE 메서드도 생성해주자.
아래와 같이 메서드를 모두 생성하였다면, 'API 배포' 버튼을 누르자.
스테이지 이름은 아래와 같이 배포한 날짜를 적어주거나, 다른 배포와 구분이 가능한 이름이면 좋다.
API 배포를 마친 후, Lambda 함수 콘솔창으로 넘어가보면, 아래와 같이 API 게이트웨이를 통한 api 요청에 대한 트리거가 추가되어 있는 모습을 확인할 수 있다.
S3 버킷 생성
S3 콘솔창에서 '버킷 만들기' 버튼을 눌러준다.
버킷 이름을 적어준다. 버킷 이름은 전세계 고유의 이름이어야 한다.
'모든 퍼블릭 액세스 차단' 설정을 해제해준다. 나머지는 그대로 두고 '버킷 만들기' 버튼을 누른다.
이후 생성된 버킷의 '권한' 탭에 들어가 버킷 정책을 아래와 같이 작성해준다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::hama-bulletin/*"
}
]
}
버킷 정책을 마쳤으면 스크롤을 아래로 내려 CORS 정책 설정도 아래와 같이 해주자.
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"HEAD",
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"ETag"
]
}
]
Cognito 자격증명풀 생성
Amazon Cognito 콘솔창으로 이동 후, '자격 증명 풀' 탭에서 '자격 증명 풀 생성' 버튼을 누른다.
'게스트 액세스'를 선택
'새 IAM 역할 생성' 을 선택해주고, IAM 역할 이름을 적어준다.
자격 증명 풀 이름을 적어주고 나머진 그대로 두자.
방금 생성했던 IAM 역할의 정책을 수정하기 위해 IAM 콘솔창으로 들어가 '역할' 탭에서 아까 만든 role을 찾자.
'권한' 탭에서 '권한 추가' -> '정책 연결' 버튼을 누르자.
'AmazonDynamoDBFullAccess' 정책을 찾아 '권한 추가' 버튼을 누르자.
다시 Cognito 콘솔창으로 넘어가 ' Cognito_article_test_2Unauth_Role' 의 권한 정책을 확인해보면, 'AmazonDynamoDBFullAccess' 이 추가되어 있음을 확인할 수 있다.
'Projects' 카테고리의 다른 글
[Toy Project] Github Actions를 활용한 CI/CD 자동화 배포 파이프라인 구축(EC2) (0) | 2024.10.09 |
---|---|
[AWS Final Project] CloudFront를 사용한 CDN 구축 / ACM, WAF를 활용한 웹서버의 보안 강화 (2) | 2024.09.12 |
[AWS Final Project] S3와 DynamoDB를 활용하여 Serverless 게시판 만들기 - 1편 (개발환경 세팅, 소스코드 이해) (0) | 2024.09.09 |
[AWS Final Project] Amazon Cognito를 활용하여 로그인 기능 구현하기 (2) | 2024.09.08 |
[AWS Final Project] 개요 (0) | 2024.09.06 |