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

Apigee Edge 문서를 보고 있습니다.
Apigee X 문서로 이동하세요.
info

버전 2.0.2

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

이 콘텐츠는 이 확장 프로그램을 구성하고 사용하는 데 필요한 참조를 제공합니다. ExtensionCallout 정책을 사용하여 API 프록시에서 확장 프로그램을 사용하려면 다음을 충족해야 합니다.

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

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

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

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

Cloud Spanner 정보

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

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

샘플

다음 예시에서는 ExtensionCallout 정책을 사용하여 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>

다음 ExtensionCallout 정책은 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> 요소에는 username(테이블의 기본 키)과 email 열의 새 값이 포함됩니다.

<?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 작업은 사용자 테이블에 새 사용자를 추가합니다. 하나의 행이 추가됩니다.

<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>

요청 매개변수

매개변수 설명 유형 기본값 필수
표 이름 행을 삽입해야 하는 데이터베이스의 테이블입니다. 문자열 없음 예.
삽입할 행이 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인 사용자의 이메일 주소가 새 값으로 업데이트됩니다. 행 하나가 업데이트됩니다.

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

요청 매개변수

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

응답

없음

구성 참조

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

일반 확장 프로그램 속성

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

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

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

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

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