RDS 내부 검사를 APIs 통한 GraphQL 구축 - AWS AppSync

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

RDS 내부 검사를 APIs 통한 GraphQL 구축

AWS AppSync의 내부 검사 유틸리티는 데이터베이스 테이블에서 모델을 검색하고 GraphQL 유형을 제안할 수 있습니다. AWS AppSync 콘솔의 생성 API 마법사는 Aurora MySQL 또는 PostgreSQL 데이터베이스API에서 를 즉시 생성할 수 있습니다. 데이터를 읽고 쓰는 유형 및 JavaScript 해석기를 자동으로 생성합니다.

AWS AppSync 는 Amazon RDS Data 를 통해 Amazon Aurora 데이터베이스와 직접 통합합니다API. Amazon RDS Data는 영구 데이터베이스 연결이 필요한 대신 실행을 위해 에 AWS AppSync 연결하는 보안 HTTP 엔드포인트를 API 제공합니다.SQL 문. 이를 사용하여 Aurora에서 MySQL 및 PostgreSQL 워크로드에 API 대한 관계형 데이터베이스를 생성할 수 있습니다.

를 사용하여 관계형 데이터베이스를 API 위한 를 빌드하면 다음과 같은 몇 가지 이점 AWS AppSync 이 있습니다.

  • 데이터베이스는 액세스 포인트를 데이터베이스 자체에서 분리하므로 클라이언트에 직접 노출되지 않습니다.

  • 다양한 애플리케이션의 요구 사항에 APIs 맞게 특별히 구축하여 프런트엔드에서 사용자 지정 비즈니스 로직이 필요하지 않습니다. 이는 Backend-For-Frontend (BFF) 패턴과 일치합니다.

  • 다양한 권한 부여 모드를 사용하여 AWS AppSync 계층에서 권한 부여 및 액세스 제어를 구현하여 액세스를 제어할 수 있습니다. 웹 서버 호스팅 또는 프록시 연결과 같이 데이터베이스에 연결하는 데 추가 컴퓨팅 리소스가 필요하지 않습니다.

  • 실시간 기능은 구독을 통해 추가할 수 있으며 를 통해 데이터 돌연변이가 연결된 클라이언트로 AppSync 자동으로 푸시됩니다.

  • 클라이언트는 443과 같은 공통 포트를 HTTPS 사용하여 를 API 통해 에 연결할 수 있습니다.

AWS AppSync 를 사용하면 기존 관계형 데이터베이스APIs에서 쉽게 빌드할 수 있습니다. 내부 검사 유틸리티는 데이터베이스 테이블에서 모델을 검색하고 GraphQL 유형을 제안할 수 있습니다. 콘솔의 생성 API 마법사는 AWS AppSync Aurora MySQL 또는 PostgreSQL 데이터베이스API에서 를 즉시 생성할 수 있습니다. 데이터를 읽고 쓰는 유형 JavaScript 및 해석기를 자동으로 생성합니다.

AWS AppSync 는 해석기의 SQL 문 작성을 단순화하는 통합 JavaScript 유틸리티를 제공합니다. 동적 값이 있는 정적 문에 AWS AppSync의 sql 태그 템플릿을 사용하거나 rds 모듈 유틸리티를 사용하여 문을 프로그래밍 방식으로 빌드할 수 있습니다. 자세한 내용은 데이터 소스 및 내장 모듈에 대한 해석기 함수 참조RDS를 참조하세요.

내부 검사 기능 사용(콘솔)

자세한 자습서 및 시작 안내서는 자습서: 데이터가 포함된 Aurora PostgreSQL Serverless를 API참조하세요.

AWS AppSync 콘솔을 사용하면 몇 분 API 만에 데이터로 구성된 기존 Aurora 데이터베이스API에서 AWS AppSync GraphQL을 생성할 수 있습니다. 그러면 데이터베이스 구성을 기반으로 운영 스키마가 빠르게 생성됩니다. API 있는 그대로 또는 를 기반으로 기능을 추가할 수 있습니다.

  1. 에 로그인 AWS Management Console 하고 AppSync 콘솔 을 엽니다.

    1. 대시보드 에서 생성을 API선택합니다.

  2. API 옵션 에서 GraphQL APIs, Amazon Aurora 클러스터로 시작 , 다음 를 선택합니다.

    1. API 이름을 입력합니다. 이는 콘솔API에서 의 식별자로 사용됩니다.

    2. 연락처 세부 정보 에 연락처 를 입력하여 의 관리자를 식별할 수 있습니다API. 이 필드는 선택 사항입니다.

    3. 프라이빗 API 구성 에서 프라이빗 API 기능을 활성화할 수 있습니다. 프라이빗은 구성된 VPC 엔드포인트()에서만 액세스할 API 수 있습니다VPCE. 자세한 내용은 프라이빗 섹션을 APIs참조하세요.

      이 예에서는 이 기능을 활성화하지 않는 것이 좋습니다. 입력 내용을 검토한 후 다음을 선택합니다.

  3. 데이터베이스 페이지에서 데이터베이스 선택을 선택합니다.

    1. 클러스터에서 데이터베이스를 선택해야 합니다. 첫 번째 단계는 클러스터가 있는 리전을 선택하는 것입니다.

    2. 드롭다운 목록에서 Aurora 클러스터를 선택합니다. 리소스를 사용하기 API 전에 해당 데이터를 생성하고 활성화해야 합니다.

    3. 다음으로 데이터베이스에 대한 보안 인증을 서비스에 추가해야 합니다. 이는 주로 를 사용하여 수행됩니다 AWS Secrets Manager. 암호가 존재하는 리전을 선택합니다. 암호 정보를 검색하는 방법에 대한 자세한 내용은 보안 암호 찾기 또는 보안 암호 검색을 참조하십시오.

    4. 드롭다운 목록에서 암호를 추가합니다. 단, 사용자에게 데이터베이스에 대한 읽기 권한이 있어야 합니다.

  4. 가져오기를 선택합니다.

    AWS AppSync 는 데이터베이스 소개, 테이블, 열, 기본 키 및 인덱스 검색을 시작합니다. 검색된 테이블이 GraphQL 에서 지원될 수 있는지 확인합니다API. 새 행 생성을 지원하려면 테이블에 여러 열을 사용할 수 있는 기본 키가 필요합니다. AWS AppSync 맵 테이블 열을 사용하여 다음과 같이 필드를 입력할 수 있습니다.

    데이터 유형 필드 유형
    VARCHAR String
    CHAR 문자열
    BINARY 문자열
    VARBINARY 문자열
    TINYBLOB 문자열
    TINYTEXT 문자열
    TEXT 문자열
    BLOB 문자열
    MEDIUMTEXT 문자열
    MEDIUMBLOB 문자열
    LONGTEXT 문자열
    LONGBLOB String
    BOOL 부울
    BOOLEAN
    BIT 정수
    TINYINT 정수
    SMALLINT 정수
    MEDIUMINT 정수
    INT 정수
    INTEGER 정수
    BIGINT 정수
    YEAR 정수
    FLOAT Float
    DOUBLE Float
    DECIMAL Float
    DEC Float
    NUMERIC Float
    DATE AWSDate
    TIMESTAMP String
    DATETIME String
    TIME AWSTime
    JSON AWSJson
    ENUM ENUM
  5. 테이블 검색이 완료되면 데이터베이스 섹션에 사용자 정보가 채워집니다. 새 데이터베이스 테이블 섹션에서 테이블의 데이터가 이미 채워져 스키마의 유형으로 변환되었을 수 있습니다. 필수 데이터 중 일부가 보이지 않는 경우 테이블 추가를 선택하고 나타나는 모달에서 해당 유형의 확인란을 클릭한 다음 추가를 선택하여 해당 데이터를 확인할 수 있습니다.

    데이터베이스 테이블 섹션에서 유형을 제거하려면 제거하려는 유형 옆의 확인란을 클릭한 다음 제거를 선택합니다. 제거된 유형은 나중에 다시 추가하려는 경우 테이블 추가 모달에 배치됩니다.

    는 테이블 이름을 유형 이름으로 AWS AppSync 사용하지만 이름을 변경할 수 있습니다. 예를 들어 다음과 같이 복수 테이블 이름을 변경합니다.movies 유형 이름으로 Movie. 데이터베이스 테이블 섹션에서 유형의 이름을 바꾸려면 이름을 바꾸려는 유형의 확인란을 클릭한 다음 유형 이름 열에서 연필 아이콘을 클릭합니다.

    선택에 따라 스키마의 내용을 미리 보려면 스키마 미리 보기를 선택합니다. 이 스키마는 비워 둘 수 없으므로 한 개 이상의 테이블을 유형으로 변환해야 합니다. 또한 이 스키마의 크기는 1MB를 초과할 수 없습니다.

    1. 서비스 역할에서 이 가져오기를 위한 새 서비스 역할을 만들지 아니면 기존 역할을 사용할지를 선택합니다.

  6. Next(다음)를 선택합니다.

  7. 그런 다음 읽기 전용API(쿼리만 해당)을 생성할지 아니면 데이터를 읽고 쓰기 API 위한 를 생성할지(쿼리 및 돌연변이 포함)를 선택합니다. 후자는 변형에 의해 트리거되는 실시간 구독도 지원합니다.

  8. Next(다음)를 선택합니다.

  9. 선택 사항을 검토한 다음 생성을 선택합니다API. AWS AppSync 는 를 생성하고 쿼리 API 및 돌연변이에 해석기를 연결합니다. 생성된 API는 완전히 작동하며 필요에 따라 확장할 수 있습니다.

소개 기능 사용(API)

StartDataSourceIntrospection 내부 검사를 사용하여 프로그래밍 방식으로 데이터베이스의 모델을 API 검색할 수 있습니다. 명령에 대한 자세한 내용은 사용 단원을 참조하세요StartDataSourceIntrospectionAPI.

를 사용하려면 Aurora 클러스터 Amazon 리소스 이름(ARN), 데이터베이스 이름 및 AWS Secrets Manager 보안 암호 를 StartDataSourceIntrospection제공합니다ARN. 이 명령은 내부 검사 프로세스를 시작합니다. GetDataSourceIntrospection 명령을 사용하여 결과를 검색할 수 있습니다. 검색된 모델에 대해 명령이 Storage Definition Language(SDL) 문자열을 반환해야 하는지 여부를 지정할 수 있습니다. 이는 검색된 모델에서 직접 스키마 SDL 정의를 생성하는 데 유용합니다.

예를 들어 간단한 Todos 테이블에 대해 다음과 같은 데이터 정의 언어(DDL) 문이 있는 경우:

create table if not exists public.todos ( id serial constraint todos_pk primary key, description text, due timestamp, "createdAt" timestamp default now() );

내부 검사는 다음과 같이 시작합니다.

aws appsync start-data-source-introspection \ --rds-data-api-config resourceArn=<cluster-arn>,secretArn=<secret-arn>,databaseName=database

그런 다음 GetDataSourceIntrospection 명령을 사용하여 결과를 검색합니다.

aws appsync get-data-source-introspection \ --introspection-id a1234567-8910-abcd-efgh-identifier \ --include-models-sdl

그 결과 다음 결과를 반환합니다.

{ "introspectionId": "a1234567-8910-abcd-efgh-identifier", "introspectionStatus": "SUCCESS", "introspectionStatusDetail": null, "introspectionResult": { "models": [ { "name": "todos", "fields": [ { "name": "description", "type": { "kind": "Scalar", "name": "String", "type": null, "values": null }, "length": 0 }, { "name": "due", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 }, { "name": "id", "type": { "kind": "NonNull", "name": null, "type": { "kind": "Scalar", "name": "Int", "type": null, "values": null }, "values": null }, "length": 0 }, { "name": "createdAt", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 } ], "primaryKey": { "name": "PRIMARY_KEY", "fields": [ "id" ] }, "indexes": [], "sdl": "type todos\n{\ndescription: String\n\ndue: AWSDateTime\n\nid: Int!\n\ncreatedAt: AW SDateTime\n}\n" } ], "nextToken": null } }