Page cover

모듈 3 - Amazon DynamoDB를 통해 데이터 티어 추가하기

소요 시간 : 20분

사용된 서비스:

개요

Mythical Mysfits 웹 사이트 아키텍처에 또 다른 기본 기능을 추가하겠습니다. 이 모듈에서는 AWS에서 관리되고 확장 가능한 NoSQL 데이터베이스 서비스인 Amazon DynamoDB에서 매우 빠른 성능을 제공하는 테이블을 생성할 것입니다. 모든 Mysfits가 정적 JSON 파일에 저장되는 대신, 우리는 이를 데이터베이스에 저장하여 향후 웹 사이트를 더욱 확장 가능하게 만들 것입니다.

Mythical Mysfits에 NoSQL 데이터베스 추가하기

DynamoDB 테이블 생성하기

현재 아키텍처에 DynamoDB 테이블을 추가하기 위해 MysfitsTable이라는 테이블을 정의하는 JSON 입력 파일을 CLI에 포함해줍니다. 이 테이블은 Mysfits라는 해시 키 속성을 가지는 기본 와 두 개의 보조 인덱스 구성됩니다. 첫 번째 보조 인덱스는 GoodEvil라는 해시 키와 MysfitId라는 레인지 키를 가지고 있으며 두 번째 보조 인덱스는 LawChaos라는 해시 키와 MysfitId라는 레인지 키를 가집니다. 이 두 개의 보조 인덱스는 특정 종이나 정렬과 일치하는 모든 mysfit를 검색하여 필터 기능을 실행할 수 있도록 만듭니다. 이와 관련된 파일은 ~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json 에 있습니다. 이 파일을 변경할 필요 없이 아래 CLI 명령문을 실행할 수 있습니다.

AWS CLI를 사용하여 테이블을 생성하기 위 Cloud9 터미널에서 다음 명령을 실행합니다.

aws dynamodb create-table --cli-input-json file://~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json

명령 실행하고 터미널에서 다음 AWS CLI 명령을 실행하면 새로 생성된 테이블의 상세 내역을 볼 수 있습니다.

aws dynamodb describe-table --table-name MysfitsTable

테이블에 있는 모든 아이템을 읽기 위해 아래의 명령어를 수행하면 테이블이 비어있음을 알 수 있다.

aws dynamodb scan --table-name MysfitsTable
{
    "Count": 0,
    "Items": [],
    "ScannedCount": 0,
    "ConsumedCapacity": null
}

DynamoDB 테이블에 아이템 추가하기

또한 이 테이블에 여러 Mysfit 항목을 배치 단위로 삽하는 데 사용할 수 있는 JSON 파일이 제공됩니다. 이것은 DynamoDB API BatchWriteItem을 통해 이뤄집니다. 제공된 JSON 파일을 사용하여 이 API를 호출하려면 다음 터미널 명령을 실행합니다. (결과값으로 unprocessed로 표시된 아이템이 없어야 정상입니다.)

aws dynamodb batch-write-item --request-items file://~/environment/aws-modern-application-workshop/module-3/aws-cli/populate-dynamodb.json

이제 동일한 명령을 실행하여 모든 테이블 내용을 스캔하면 아이템이 테이블에 입력된 것을 볼 수 있습니다.

aws dynamodb scan --table-name MysfitsTable

최초의 코드 변경 커밋하기

업데이트된 Flask 서비스 코드 복사하기

이제 데이터가 테이블에 포함되어 있으므로 모듈 2에 사용된 정적 JSON 파일을 반환하지 않고 이 테이블에서 읽도록 애플리케이션 코드를 수정합니다. 이제 정적 JSON 파일을 읽는 대신에 DynamoDB에 요청을 할 것입니다.

요청은 boto3라고 불리는 AWS 파이썬 SDK를 사용하여 생성됩니다. 이 SDK는 파이썬 코드를 통해 AWS 서비스와 상호 작용하는 강력하지만 간단한 방법입니다. 이 도구를 사용하면 이 워크샵에서 이미 실행 중인 AWS API 및 CLI 명령과 유사한 방식으로 서비스 클라이언트 정의 및 기능을 사용할 수 있습니다. boto3을 사용할 때 이러한 명령을 파이썬 코드로 변환하는 것은 쉽습니다. 새 파일을 CodeCommit 저장소 디렉토리에 복사하려면 터미널에서 다음 명령을 실행합니다.

이전과 동일하게 requirements.txt 파일과 mythicalMysfitsService.py을 수정해줍니다.

cp ~/environment/aws-modern-application-workshop/module-3/app/service/* ~/environment/MythicalMysfitsService-Repository/service/

CI/CD 파이프라인에 업데이트된 코드 푸시하기

이제 Git 명령줄 클라이언트를 사용하여 코드 Commit으로 이 코드 변경 사항을 확인해야 합니다. 다음 명령을 실행하여 새로운 코드 변경 사항을 확인하고 CI / CD 파이프라인을 트리거합니.

cd ~/environment/MythicalMysfitsService-Repository
git add .
git commit -m "Add new integration to DynamoDB."
git push

이제 5-10분 안에 코드 변경 내용이 전체 CI/CD 파이프라인을 통해 Amazon ECS의 AWS Fargate에 배포된 Flask 서비스로 전달됩니다. AWS CodePipeline 콘솔을 검색하여 파이프라인을 통해 변경 사항이 진행되는지 확인합니다.

S3에 있는 웹 콘텐츠 업데이트하기

마지막으로 우리는 새로운 index.html 페이지를 S3 버킷에 추가하여 쿼리 스트링을 사용하여 응답에 대한 필터를 하기 위해 새로운 API 기능을 사용할 수 있습니다.

새로운 index.html 파일은 ~/environment/aws-modern-application-workshop/module-3/web/index.html 에 있습니다.Cloud9 IDE에서 이 파일을 열고 모듈 2에서 그랬던 것처럼 "REPLACE_ME"를 나타내는 문자열을 적절한 NLB 엔드포인트로 교체합니다. 필요한 경우 /module-2/ 디렉토리에 이미 편집한 파일을 참조합니다. NLB의 엔드포인트로 교체한 후 새 index.html 파일 업로드합니다.

aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-3/web/ s3://REPLACE_ME_WEBSITE_BUCKET_NAME/

DynamoDB 테이블에서 새로운 Mythical Mysfits을 로드하고 필터 기능이 작동하는 방법을 보려면 Mythical Mysfits 웹 사이트를 다시 방문해봅니다.

Last updated