AWS+NodeJS로 서버리스 환경 구축 ⑤
소개
지난번 에서는 API Gateway(REST API)+Lambda(NodeJS)+DynamoDB의 조합으로 CRUD를 만들었습니다. 이번에는 S3+Lambda+DynamoDB를 조합해 갑니다. S3를 트리거(S3 버킷에 Json 파일이 업로드된 단계)로 설정하고 Lambda(NodeJS)에서 얻은 Json 형식의 데이터를 DynamoDB 테이블에 저장합니다.
표현 등을 이해하기 어렵다면 용서없이 지적해 주시면 감사하겠습니다.
※서버리스로 핀이 오지 않는 분은 여기 를 봐 주세요.
DynamoDB 만들기
DynamoDB 대시보드 > 테이블 만들기
개요 탭의 ARN은 인라인 정책을 만들 때 사용하므로 복사할 때
IAM에서 역할 및 인라인 정책 만들기
IAM 대시보드 > 역할 > 역할 만들기
AWS 서비스 > Lambda > 다음 단계
AWSLambdaExecute 선택 > 다음 단계
다음 단계
역할 이름 입력 > 역할 만들기
인라인 정책 작성은 여기을 참조하십시오.
덧붙여서 이번은 DynamoDB 테이블에 쓰기만 하기 때문에, 액션(권한)은 PutItem만으로 OK입니다.
S3 버킷 만들기
S3 대시보드 > 버킷 만들기 > 버킷 이름 입력 > 생성
Lambda 함수 작성 및 설정
DynamoDB 대시보드 > 테이블 만들기
개요 탭의 ARN은 인라인 정책을 만들 때 사용하므로 복사할 때
IAM에서 역할 및 인라인 정책 만들기
IAM 대시보드 > 역할 > 역할 만들기
AWS 서비스 > Lambda > 다음 단계
AWSLambdaExecute 선택 > 다음 단계
다음 단계
역할 이름 입력 > 역할 만들기
인라인 정책 작성은 여기을 참조하십시오.
덧붙여서 이번은 DynamoDB 테이블에 쓰기만 하기 때문에, 액션(권한)은 PutItem만으로 OK입니다.
S3 버킷 만들기
S3 대시보드 > 버킷 만들기 > 버킷 이름 입력 > 생성
Lambda 함수 작성 및 설정
S3 대시보드 > 버킷 만들기 > 버킷 이름 입력 > 생성
Lambda 함수 작성 및 설정
출처
indedx.js
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const documentClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const { name } = event.Records[0].s3.bucket;
const { key } = event.Records[0].s3.object;
const getObjectParams = {
Bucket: name,
Key: key
};
try {
const s3Data = await s3.getObject(getObjectParams).promise();
const usersStr = s3Data.Body.toString();
const usersJSON = JSON.parse(usersStr);
console.log(`Jsonファイル取得結果 ::: ${usersStr}`);
//取得した文のJson結果をDynamoDBテーブルに追加する
await Promise.all(usersJSON.map(async user => {
const { id, firstname, lastname } = user;
const putParams = {
TableName: "JsonDataFromS3",
Item: {
id: id,
firstname: firstname,
lastname: lastname
}
};
await documentClient.put(putParams).promise();
}));
} catch(err) {
console.log(err);
}
};
결과 확인
S3 대시보드 > 이번에 사용할 버킷 선택 > 파일 추가 > 업로드
사용한 Json 내용
JsonDataFromS3.json[
{
"id": "5ac6be6b-8064-4159-9de6-89178a9f8a54",
"firstname": "Matt",
"lastname":"Hansen"
},
{
"id": "4b912da3-66aa-45c1-a87f-9f79a256e570",
"firstname": "Brad",
"lastname":"Lunsford"
},
{
"id": "8ef0c795-42d4-439d-962e-75afe957e069",
"firstname": "Jeremy",
"lastname":"Kane"
}
]
DynamoDB 테이블의 내용이 S3에 업로드한 Json 파일대로 내용이 되어 있는지 확인
마지막으로
다음은 서버리스로 RESTful 웹 서비스를 만들어 가고 싶습니다.
Lambda(NodeJS)+API GateWay+DynamoDB+Cognito를 결합할 예정입니다.
Reference
이 문제에 관하여(AWS+NodeJS로 서버리스 환경 구축 ⑤), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/isacRU/items/40a2a640aa1e1d31d08e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[
{
"id": "5ac6be6b-8064-4159-9de6-89178a9f8a54",
"firstname": "Matt",
"lastname":"Hansen"
},
{
"id": "4b912da3-66aa-45c1-a87f-9f79a256e570",
"firstname": "Brad",
"lastname":"Lunsford"
},
{
"id": "8ef0c795-42d4-439d-962e-75afe957e069",
"firstname": "Jeremy",
"lastname":"Kane"
}
]
Reference
이 문제에 관하여(AWS+NodeJS로 서버리스 환경 구축 ⑤), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/isacRU/items/40a2a640aa1e1d31d08e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)