Google Cloud Spanner 데이터베이스 확장 프로그램

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

버전 1.4.1

Cloud Spanner 데이터베이스에서 삽입, 쿼리, 업데이트 작업을 수행합니다.

이 콘텐츠는 이 확장 프로그램을 구성하고 사용하기 위한 참조를 제공합니다. 확장 콜아웃 정책을 사용하여 API 프록시의 확장 프로그램을 사용하려면 먼저 다음 작업을 수행해야 합니다.

  1. 인스턴스 만들기 및 관리에 설명된 대로 Cloud Spanner 인스턴스를 만들고 데이터베이스를 만듭니다.

  2. 인스턴스와 데이터베이스가 생성되었으면 확장 프로그램을 나타내는 GCP 서비스 계정에 데이터베이스에 액세스할 수 있는 권한을 부여합니다. 사용할 역할에 대한 자세한 내용은 Cloud Spanner 역할을 참조하세요. Cloud Spanner 액세스 제어에 대한 자세한 내용은 IAM 역할 적용Cloud Spanner 액세스 제어를 참조하세요.

  3. 원하는 데이터베이스에 대한 액세스 수준에 대한 권한이 있는 서비스 계정이 있으면 GCP 콘솔을 사용하여 서비스 계정의 키를 생성합니다. 이 확장 프로그램을 구성할 때 결과 키 JSON 파일의 콘텐츠를 사용합니다.

  4. 구성 참조를 사용하여 확장 프로그램을 추가 및 구성할 때 결과 키 JSON 파일의 콘텐츠를 사용합니다.

Cloud Spanner 정보

Cloud Spanner는 고가용성, strong consistency, 트랜잭션 읽기 및 쓰기가 필요한 관계형, 구조화 및 반정형 데이터에 유용한 관계형 데이터베이스 서비스입니다.

Cloud Spanner를 처음 시작하는 경우 Cloud Spanner 문서의 빠른 시작부터 시작하는 것이 좋습니다.

샘플

다음 예는 Extension콜아웃 정책을 사용하여 Cloud Spanner 확장 프로그램 작업 지원을 구성하는 방법을 보여줍니다.

데이터 추가

다음 예에서 확장 프로그램의 insert 작업은 사용자 테이블에 신규 사용자를 추가합니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Insert-New-User">
    <DisplayName>Insert New User</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>insert</Action>
    <Input><![CDATA[{
        "tableName" : "user",
        "rows" : [{
          "username": "jonesy42",
          "firstName": "Floyd",
          "lastName": "Jones",
          "address": "3695 Auctor Street",
          "city": "Gresham",
          "region": "OR",
          "postalCode": "12693",
          "email": "floydster@example.com"
      }]
  }]]></Input>
</ConnectorCallout>

데이터 가져오기

이 예시에서 쿼리는 user 테이블에서 사용자 이름과 이메일 값을 검색합니다.

먼저 AssignMessage 정책은 쿼리 WHERE 절에 사용할 postal.code.value 변수를 할당합니다. 다음 예를 참고하세요. 정책은 아마도 클라이언트 요청 매개변수를 기반으로 값을 설정할 것입니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Postal-Code">
    <AssignTo createNew="true" transport="http" type="request"/>
    <AssignVariable>
        <Name>postal.code</Name>
        <Value>86519</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

다음 확장 콜아웃 정책은 WHERE 절의 postal.code.value 변수의 콘텐츠를 사용하여 데이터베이스에 대해 쿼리를 실행합니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-User-Data">
    <DisplayName>Get User Data</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>querySQL</Action>
    <Input><![CDATA[{
      "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
      "params" : {
        "postalCode" : "{postal.code.value}"
      }
    }]]></Input>
  <Output>spanner.userdata.retrieved</Output>
</ConnectorCallout>

그러면 다음 AssignMessage 정책spanner.userdata.retrieved 변수에 저장된 확장 프로그램의 응답을 클라이언트에 반환되는 응답으로 사용합니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Query-Response-Data">
    <DisplayName>Get Query Response Data</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{spanner.userdata.retrieved}</Payload>
    </Set>
</AssignMessage>

이 예에서 응답 데이터는 다음과 같이 JSON으로 반환됩니다.

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

데이터 업데이트

이 예에서 <Input> 요소에는 테이블의 기본 키인 usernameemail 열의 새 값이 포함됩니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Update-User-Data">
    <DisplayName>Update User Data</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>update</Action>
    <Input><![CDATA[{
        "tableName" : "user",
        "rows": [{
            "username":"Liz456",
            "email":"lizzard@example.com"
        }]
    }]]></Input>
</ConnectorCallout>

작업

insert

지정된 행을 데이터베이스에 삽입합니다.

문법

<Action>insert</Action>
<Input><![CDATA[{
  "tableName" : "table-to-insert-into",
  "rows" : "rows-to-insert"
}]]></Input>

다음 예에서 확장 프로그램의 insert 작업은 사용자 테이블에 신규 사용자를 추가합니다. 행 1개가 추가되었습니다.

<Action>insert</Action>
<Input><![CDATA[{
    "tableName" : "user",
    "rows" : [{
      "username": "jonesy42",
      "firstName": "Floyd",
      "lastName": "Jones",
      "address": "3695 Auctor Street",
      "city": "Gresham",
      "region": "OR",
      "postalCode": "12693",
      "email": "floydster@example.com"
  }]
}]]></Input>

요청 매개변수

매개변수 설명 유형 기본 계정 필수
tableName 행을 삽입해야 하는 데이터베이스의 테이블입니다. 문자열 없음 예.
삽입할 행은 rows JSON 객체의 배열로 표현됩니다. 배열 없음 예.

응답

없음

querySQL

지정된 매개변수가 있는 SQL 문을 사용하여 데이터베이스를 쿼리합니다. 매개변수는 SQL 문에서 @-앞에 추가된 이름으로 지정되며, 매개변수 값은 이 작업의 params 매개변수에 지정됩니다.

Cloud Spanner 쿼리 구문에 대한 자세한 내용은 쿼리 구문을 참조하세요.

문법

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "sql-query-statement",
  "params" : {
    "param1" : "columnValue"
  }
}]]></Input>

이 예시에서 쿼리는 user 테이블에서 usernameemail 열 값을 검색합니다. SQL 문은 흐름 변수 postal.code.value에서 설정된 postalCode 매개변수를 지정합니다.

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
  "params" : {
    "postalCode" : "{postal.code.value}"
  }
}]]></Input>

요청 매개변수

매개변수 설명 유형 기본 계정 필수
sql 실행할 SQL 쿼리입니다. @-앞에 추가된 매개변수 이름으로 매개변수를 지정할 수 있습니다. 이러한 매개변수 이름은 이 작업의 params 매개변수에 있는 키와 일치해야 합니다. 문자열 없음 예.
params 키와 값이 SQL 쿼리에 사용되는 매개변수 이름과 값인 객체입니다. 여기에 여러 매개변수를 나열할 수 있습니다. 객체 없음 번호

응답

쿼리에서 반환된 열 이름-값 쌍의 배열을 포함하는 rows 객체입니다. 예를 들면 다음과 같습니다.

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

update

지정된 데이터가 있는 데이터베이스의 행을 업데이트합니다.

문법

<Input><![CDATA[{
  "tableName" : "table-with-rows-to-update",
  "rows" : "rows-to-update"
}]]></Input>

이 예시에서는 username이 Liz456인 사용자의 이메일 주소가 새 값으로 업데이트됩니다. 행 1개가 업데이트되었습니다.

<Action>update</Action>
<Input><![CDATA[{
  "tableName" : "user",
  "rows": [{
      "username":"Liz456",
      "email":"lizzard@example.com"
  }]
}]]></Input>

요청 매개변수

매개변수 설명 유형 기본 계정 필수
tableName 행을 업데이트해야 하는 데이터베이스의 테이블입니다. 문자열 없음 예.
업데이트할 행 데이터의 배열입니다. 배열의 각 항목에는 업데이트할 행의 고유 ID (예: 기본 키) 값이 포함되어야 합니다. 배열 없음 예.

응답

없음

구성 참조

API 프록시에서 사용할 이 확장 프로그램을 구성하고 배포할 때 다음을 사용하세요. Apigee 콘솔을 사용하여 확장 프로그램을 구성하는 단계는 확장 프로그램 추가 및 구성을 참조하세요.

일반적인 확장 속성

모든 확장 프로그램에는 다음과 같은 속성이 있습니다.

속성 설명 기본 필수
name 확장 프로그램의 구성에 지정할 이름입니다. 없음 지원됨
packageName Apigee Edge에서 제공하는 확장 프로그램 패키지 이름입니다. 없음 지원됨
version 확장 프로그램을 구성하는 확장 프로그램 패키지의 버전 번호입니다. 없음 지원됨
configuration 추가하는 확장 프로그램 관련 구성 값입니다. 이 확장 프로그램 속성의 속성을 참조하세요. 없음 지원됨

이 확장 프로그램 패키지의 속성

이 확장 프로그램에 해당하는 다음 구성 속성의 값을 지정합니다.

속성 설명 기본 계정 필수
projectId 데이터베이스가 포함된 GCP 프로젝트의 ID입니다. 없음 예.
instanceId GCP 프로젝트의 Cloud Spanner 인스턴스 ID입니다. 없음 예.
databaseId Cloud Spanner 데이터베이스의 ID입니다. 없음 예.
사용자 인증 정보 Apigee Edge 콘솔에 입력하면 서비스 계정 키 파일의 콘텐츠가 됩니다. 관리 API를 통해 전송되는 경우 서비스 계정 키 파일에서 생성된 base64로 인코딩된 값입니다. 없음 예.