AWS+NodeJS로 서버리스 환경 구축 ⑤

11842 단어 람다S3DynamoDBAWS

소개



지난번 에서는 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 함수 작성 및 설정


  • Lambda 대시보드 > 함수 만들기
  • 함수명 입력 > 기존 롤 선택(위에서 작성한 롤)
  • 트리거 추가> S3 선택> 버킷 이름 선택 (위에서 만든 사람)
  • 이벤트 타입 선택 > 접미사 입력 > 추가

    출처

  • 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를 결합할 예정입니다.

    좋은 웹페이지 즐겨찾기