Python 애플리케이션을 사용하여 Amazon DynamoDB용 PynamoDB 모델 및 CRUD 함수를 자동으로 생성합니다. - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Python 애플리케이션을 사용하여 Amazon DynamoDB용 PynamoDB 모델 및 CRUD 함수를 자동으로 생성합니다.

작성자: 비지트 바시슈타 (AWS), 데라즈 알림찬다니 (AWS), 다난제이 카란카르 (AWS)

코드 리포지토리: amazon-reverse-engineer-dynamodb

환경: PoC 또는 파일럿

기술: 소프트웨어 개발 및 테스트, 데이터베이스, DevOps

워크로드: 오픈 소스

AWS 서비스: Amazon DynamoDB

요약

Amazon DynamoDB 데이터베이스 작업을 효율적으로 수행하려면 일반적으로 엔티티와 생성, 읽기, 업데이트 및 삭제 (CRUD) 작업 함수가 필요합니다. PynamoDB는 파이썬 3을 지원하는 파이썬 기반 인터페이스입니다. 또한 Amazon DynamoDB 트랜잭션 지원, 자동 속성 값 직렬화 및 역직렬화, Flask 및 Django와 같은 일반적인 Python 프레임워크와의 호환성 등의 기능을 제공합니다. 이 패턴은 PynamoDB 모델 및 CRUD 작업 함수의 자동 생성을 간소화하는 라이브러리를 제공하여 개발자가 Python과 DynamoDB를 사용하는 데 도움이 됩니다. 데이터베이스 테이블을 위한 필수 CRUD 함수를 생성하는 동시에 Amazon DynamoDB 테이블에서 PynamoDB 모델 및 CRUD 함수를 리버스 엔지니어링할 수도 있습니다. 이 패턴은 Python 기반 응용 프로그램을 사용하여 데이터베이스 작업을 단순화하도록 설계되었습니다.

이 솔루션의 주요 기능은 다음과 같습니다.

  • JSON 스키마를 PynamoDB 모델로 변환 — JSON 스키마 파일을 가져와서 Python에서 PynamoDB 모델을 자동으로 생성합니다.

  • CRUD 함수 생성 — DynamoDB 테이블에서 CRUD 작업을 수행하는 함수를 자동으로 생성합니다.

  • DynamoDB에서의 리버스 엔지니어링 — PynamoDB 객체 관계형 매핑 (ORM) 을 사용하여 기존 Amazon DynamoDB 테이블의 PynamoDB 모델 및 CRUD 함수를 리버스 엔지니어링할 수 있습니다.

사전 조건 및 제한 사항

사전 조건

아키텍처

대상 기술 스택  

  • JSON 스크립트

  • Python 애플리케이션

  • PynamoDB 모델

  • Amazon DynamoDB 데이터베이스 인스턴스

대상 아키텍처 

Python 애플리케이션을 사용하여 DynamoDB 테이블에서 CRUD 함수와 PynamoDB 모델을 생성하는 아키텍처 다이어그램
  1. 입력 JSON 스키마 파일을 생성합니다. 이 JSON 스키마 파일은 PynamoDB 모델 및 CRUD 함수를 생성하려는 각 DynamoDB 테이블의 속성을 나타냅니다. 여기에는 다음과 같은 세 가지 중요한 키가 포함되어 있습니다.

  2. Python 애플리케이션을 실행하고 JSON 스키마 파일을 입력으로 제공합니다.

  3. Python 응용 프로그램은 JSON 스키마 파일을 읽습니다.

  4. Python 애플리케이션은 DynamoDB 테이블에 연결하여 스키마와 데이터 형식을 도출합니다. 애플리케이션은 describe_table 작업을 실행하고 테이블의 키 및 인덱스 속성을 가져옵니다.

  5. Python 애플리케이션은 JSON 스키마 파일과 DynamoDB 테이블의 속성을 결합합니다. Jinja 템플릿 엔진을 사용하여 PynamoDB 모델 및 해당 CRUD 함수를 생성합니다.

  6. PynamoDB 모델에 액세스하여 DynamoDB 테이블에서 CRUD 작업을 수행할 수 있습니다.

도구

서비스

  • Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.

기타 도구

  • Jinja는 템플릿을 최적화된 Python 코드로 컴파일하는 확장 가능한 템플릿 엔진입니다. 이 패턴은 Jinja를 사용하여 템플릿 내에 플레이스홀더와 로직을 삽입하여 동적 콘텐츠를 생성합니다.

  • PynamoDB는 아마존 DynamoDB를 위한 파이썬 기반 인터페이스입니다.

  • Python은 범용 컴퓨터 프로그래밍 언어입니다.

코드 리포지토리

이 패턴의 코드는 GitHub 자동 생성 PynamoDB 모델 및 CRUD 함수 저장소에서 사용할 수 있습니다. 리포지토리는 컨트롤러 패키지와 템플릿이라는 두 개의 주요 부분으로 나뉩니다.

컨트롤러 패키지

컨트롤러 Python 패키지에는 PynamoDB 모델 및 CRUD 함수를 생성하는 데 도움이 되는 기본 애플리케이션 로직이 포함되어 있습니다. 이는 다음을 포함합니다.

  • input_json_validator.py— 이 Python 스크립트는 입력 JSON 스키마 파일의 유효성을 검사하고 대상 DynamoDB 테이블 목록과 각 테이블에 필요한 속성을 포함하는 Python 객체를 생성합니다.

  • dynamo_connection.py— 이 스크립트는 DynamoDB 테이블에 대한 연결을 설정하고 작업을 사용하여 describe_table PynamoDB 모델을 생성하는 데 필요한 속성을 추출합니다.

  • generate_model.py— 이 스크립트에는 입력 JSON 스키마 파일 및 작업을 기반으로 PynamoDB 모델을 만드는 Python 클래스가 GenerateModel 포함되어 있습니다. describe_table

  • generate_crud.py— JSON 스키마 파일에 정의된 DynamoDB 테이블의 경우 이 스크립트는 작업을 사용하여 Python GenerateCrud 클래스를 생성합니다.

템플릿

이 Python 디렉토리에는 다음과 같은 Jinja 템플릿이 포함되어 있습니다.

  • model.jinja— 이 Jinja 템플릿에는 PynamoDB 모델 스크립트를 생성하기 위한 템플릿 표현식이 포함되어 있습니다.

  • crud.jinja— 이 Jinja 템플릿에는 CRUD 함수 스크립트를 생성하기 위한 템플릿 표현식이 포함되어 있습니다.

에픽

작업설명필요한 기술

리포지토리를 복제합니다.

다음 명령을 입력하여 자동 생성 PynamoDB 모델 및 CRUD 함수 저장소를 복제합니다.

git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git
앱 개발자

Python 환경을 설정합니다.

  1. 복제된 리포지토리의 최상위 디렉터리로 이동합니다.

    cd amazon-reverse-engineer-dynamodb
  2. 다음 명령을 입력하여 필수 라이브러리 및 패키지를 설치합니다.

    pip install -r requirements.txt
앱 개발자
작업설명필요한 기술

JSON 스키마 파일을 수정하십시오.

  1. 복제된 리포지토리의 최상위 디렉터리로 이동합니다.

    cd amazon-reverse-engineer-dynamodb
  2. 원하는 편집기에서 test.json 파일을 엽니다. 이 파일을 참조로 사용하여 고유한 JSON 스키마 파일을 만들거나 이 파일의 값을 환경에 맞게 업데이트할 수 있습니다.

  3. 대상 DynamoDB 테이블의 이름 AWS 리전, 및 속성 값을 수정합니다.

    참고: JSON 스키마 파일에 없는 테이블을 정의하는 경우 이 솔루션은 해당 테이블에 대한 모델이나 CRUD 함수를 생성하지 않습니다.

  4. test.json 파일을 저장하고 닫습니다. 이 파일은 새 이름으로 저장하는 것이 좋습니다.

앱 개발자

Python 애플리케이션을 실행합니다.

다음 명령을 입력하여 PynamoDB 모델 및 CRUD 함수를 생성합니다. <input_schema.json> 여기서 는 JSON 스키마 파일의 이름입니다.

python main.py --file <input_schema.json>
앱 개발자
작업설명필요한 기술

생성된 PynamoDB 모델을 확인합니다.

  1. 복제된 리포지토리의 최상위 디렉터리에서 다음 명령을 입력하여 리포지토리로 이동합니다. models

    cd models
  2. 기본적으로 이 솔루션은 PynamoDB 모델 파일의 이름을 지정합니다. demo_model.py 이 파일이 있는지 확인하십시오.

앱 개발자

생성된 CRUD 함수를 확인합니다.

  1. 복제된 리포지토리의 최상위 디렉터리에서 다음 명령을 입력하여 리포지토리로 이동합니다. crud

    cd crud
  2. 기본적으로 이 솔루션은 스크립트 이름을 지정합니다. demo_crud.py 이 파일이 있는지 확인하십시오.

  3. demo_crud.py파일의 Python 클래스를 사용하여 대상 DynamoDB 테이블에서 CRUD 작업을 수행합니다. 작업이 성공적으로 완료되었는지 확인합니다.

앱 개발자

관련 리소스

추가 정보

JSON 스키마 파일의 샘플 속성

[ { "name": "test_table", "region": "ap-south-1", "attributes": [ { "name": "id", "type": "UnicodeAttribute" }, { "name": "name", "type": "UnicodeAttribute" }, { "name": "age", "type": "NumberAttribute" } ] } ]