서비스 브로커 개발, 호스팅 및 테스트
IBM Cloud® 플랫폼은 서비스 브로커와 연동하여 서비스 인스턴스와 서비스 바인딩을 생성하고 관리합니다. 공개 IBM Cloud 서비스 브로커 샘플, 오픈 서비스 브로커 참조 애플리케이션 및 오픈 서비스 브로커 API 문서를 조합하여 사용함으로써 자체 브로커를 구축할 수 있습니다.
IBM Cloud에 서비스를 온보딩할 때 하나 이상의 서비스 브로커를 빌드하여 서비스의 라이프사이클 및 해당 미터링 통합을 관리해야 합니다. 자세한 정보는 Metering 통합 을 참조하십시오.
서비스 브로커란 무엇인가요?
서비스 브로커는 서비스 라이프사이클을 관리합니다. 플랫폼은 서비스 브로커와 상호작용하여 제공하는 서비스를 작성하고 액세스하며 관리합니다. Open Service Broker API는 이러한 상호작용을 정의하여 소프트웨어 제공자가 선택한 기술 또는 인프라에 관계없이 소프트웨어 제공자가 누구에게나 서비스를 제공할 수 있도록 합니다. 서비스 브로커는 제품에 대한 서비스 인스턴스의 자동 프로비저닝을 처리하는 미들웨어 구성요소 역할을 하며 서비스 인스턴스의 사용 추적에 도움이 됩니다.
브로커는 Software as a Service, PaaS (Platform as a Service) 또는 인프라 as a Service를 여러 공급업체에 걸쳐 개발하고 제공하는 경우에 유용합니다. 서비스 브로커를 도입하여 고객에 대한 프로비저닝 및 바인딩을 자동화함으로써 비즈니스 가치를 높일 수 있습니다. 또한 고객 관리 및 사용 추적은 이러한 교차 문제를 처리하는 미들웨어 구성요소를 사용하여 더 쉽게 수행할 수 있습니다. 그러나 가상 머신 또는 플랫폼에 배치할 수 있는 사용자 정의 소프트웨어가 있는 경우에는 서비스 브로커가 적합하지 않습니다.
사용자가 IBM Cloud 카탈로그에서 서비스 및 해당 가격 플랜을 선택하고 인스턴스를 작성하면 가격 플랜 및 메트릭을 포함하여 서비스에 대한 데이터가 서비스 브로커로 전송됩니다. 브로커는 선택된 가격 플랜에 대한 메트릭 및 서비스 인스턴스의 프로비저닝을 관리하는 백엔드 시스템과 통합됩니다. 고객이 제품의 인스턴스를 삭제하면 요청이 서비스 브로커로 전송되고 인스턴스의 디프로비저닝을 관리합니다.
브로커 아키텍처는 개발 및 운영 팀 모두에게 상당한 이점을 제공합니다.
- 개발자는 애플리케이션 및 컨테이너를 필요한 지원 서비스에 연결할 수 있습니다. 지원 서비스에 관계없이 조작은 동일합니다.
- 운영자는 더 이상 수동으로 서비스에 대한 액세스를 작성하고 위임할 필요가 없습니다. 대신 서비스 및 서비스 계획의 시장을 구성합니다. 이를 통해 개발자는 자체 서비스를 제공하여 오늘날 많은 기업이 직면하는 관리 비용을 줄일 수 있습니다.
Open Service Broker API 스펙에 빌드된 각 서비스 브로커에는 동일한 직관적인 라이프사이클 명령 세트가 있습니다. 다음 명령은 서비스 브로커에 유용한 이점을 제공합니다.
- 서비스 브로커가 제공하는 지원 서비스의 카탈로그 페치
- 카탈로그는 서비스 브로커를 통해 작성할 수 있는 모든 서비스를 설명하며 각 서비스는 플랜으로 구성됩니다. 계획은 일반적으로 서비스의 지정된 변형에 대한 비용 및 이익을 나타냅니다. 많은 서비스에서 제품의 다양한 티어 또는 구성을 나타내는 요금제를 사용합니다.
- 새 서비스 인스턴스 프로비저닝
- 서비스 인스턴스는 서비스 브로커의 카탈로그에 설명된 대로 서비스 및 플랜의 작성된 인스턴스입니다.
- 해당 서비스 인스턴스에서 애플리케이션 및 컨테이너 연결 및 연결 끊기
- 서비스 인스턴스가 작성되면 애플리케이션 또는 컨테이너가 해당 인스턴스와 통신을 시작하도록 합니다. 서비스 브로커의 관점에서 이를 서비스 바인딩이라고 합니다.
- 서비스 인스턴스 디프로비저닝
- 이 조치는 서비스 인스턴스의 초기 작성 시 작성된 모든 자원을 삭제합니다.
시작하기 전에
- IBM Cloud 파트너 센터에서 서비스를 등록하십시오.
- 서비스의 제품 세부사항을 정의하십시오.
- 프로비저닝 시나리오 를 검토하여 자원 작성이 작동하는 방식을 이해하십시오.
- Open Broker API 사양서를 읽고 숙지하십시오. 자세한 내용은 readme 파일을 가이드로 활용하십시오. Open Service Broker IBM Cloud API(OSB)
version 2.12사양을 사용합니다.
브로커 빌드
다음 문서와 샘플 애플리케이션을 사용하여 필요한 사양을 갖춘 브로커를 구성하고 배포하세요:
- Open Service Broker IBM Cloud API 를 사용하여 필수 엔드포인트를 포함한 필수 사양을 설정하십시오.
다음 예제 애플리케이션을 살펴보세요:
- NodeJS 기반 샘플 Open Service Broker 참조 애플리케이션을 가이드로 사용하여 브로커를 생성하세요.
필수 엔드포인트 포함
모든 서비스 브로커는 특정 필수 엔드포인트를 설정해야 합니다. 바인딩 가능한 서비스와 서비스 인스턴스를 사용 불가능하게 하고 다시 사용 가능하게 하는 데 추가 엔드포인트 로직이 필요합니다.
모든 서비스 브로커에 대한 필수 엔드포인트 로직
서비스 브로커는 REST API가 이용하는 메타데이터 값의 표준 세트를 제공해야 하며 IBM Cloud 브로커에는 다음 REST API 엔드포인트 또는 경로에 대한 로직이 있어야 합니다.
- 카탈로그(GET)
- 브로커에 포함된 카탈로그 메타데이터를 리턴합니다.
- 리소스 인스턴스(PUT)
- 서비스 인스턴스를 작성합니다.
- 리소스 인스턴스(DELETE)
- 서비스 인스턴스를 삭제합니다.
- 리소스 인스턴스(PATCH)
- 서비스 인스턴스를 업데이트합니다.
카탈로그(GET)에 대한 참고: 이 엔드포인트는 브로커가 지원하는 서비스 및 플랜에 대한 브로커와 IBM Cloud 플랫폼 간의 계약을 정의합니다. 이 엔드포인트는 브로커 내에 저장된 카탈로그 메타데이터를 반환합니다. 이 값들은 귀하의 서비스와 IBM Cloud 플랫폼 간의 최소 계약 조건을 정의합니다. 필수 사항이 아닌 모든 추가 카탈로그 메타데이터는 ‘ IBM Cloud ’ 카탈로그 내에 저장됩니다. 카탈로그 표시 값(링크 및 아이콘 등)에 대한 모든 업데이트는 IBM Cloud 콘솔에서 수행해야 하며, 브로커에 저장되어서는 안 됩니다. 브로커에 저장된 메타데이터는 IBM Cloud 콘솔이나 IBM Cloud CLI에 표시되지 않습니다. 콘솔과 CLI는 Partner Center Sell에서 설정되고 ‘ IBM Cloud ’ 카탈로그에 저장된 내용을 반환합니다. 다음 섹션에서는 catalog(GET)이 반환하는 최소 필수 값을 보여줍니다:
{
"services": [{
"id": "0bc9d744-6f8c-4821-9648-2278bf6925bb",
"name": "ibmcloud-link",
"description": "An IBM provided service that enables aliasing to service instances in the IBM Cloud.",
"bindable": true,
"plan_updateable": false,
"plans": [
{
"id": "da40662d-2f72-4a19-8c79-8c77cf285e1",
"name": "ibmcloud-alias",
"free": true,
"description": "The IBM Cloud alias plan used for linking."
}
]
}]
}
바인드 가능 서비스에 대한 필수 엔드포인트 로직
IBM Cloud 의 애플리케이션에 서비스를 연동할 수 있는 경우, 해당 서비스는 서비스 사용자에게 API 엔드포인트와 인증 정보를 제공해야 합니다. 바인드 가능 서비스는 Open Service Broker 스펙의 바인드 가능 조작을 사용해야 하며 다음의 엔드포인트 또는 경로를 구현해야 합니다.
- 바인딩 및 인증 정보(PUT)
- 서비스 인스턴스를 애플리케이션에 바인드합니다.
- 바인딩 및 인증 정보(DEL)
- 서비스 인스턴스를 애플리케이션에서 바인드 해제합니다.
필수 IBM Cloud 확장 엔드포인트
OSB 스펙은 사용 불가능한 인스턴스 상태를 지원하지 않습니다. 사용 안함 상태에는 누락된 지불 또는 계정 일시중단 (아직 취소되지 않음) 이 발생하고 삭제된 인스턴스 상태와 다른 기타 상황이 포함됩니다. 장애 상태를 경험할 수 있는 고객을 지원하기 IBM Cloud 위해, 서비스 인스턴스를 비활성화 및 재활성화할 IBM Cloud 수 있도록 확장된 API 엔드포인트를 정의했습니다. 다음 엔드포인트 확장이 필요합니다:
- 인스턴스 사용 및 사용 안함(GET)
- 상태 - 서비스 인스턴스의 상태를 리턴합니다.
- 인스턴스 사용 및 사용 안함(PUT)
- 서비스 인스턴스를 사용 또는 사용 안함으로 설정합니다.
사용 안함 엔드포인트가 시작될 때 서비스 인스턴스에 대한 액세스를 사용 안함으로 설정하고 사용 엔드포인트가 시작될 때 해당 액세스를 다시 사용으로 설정하는 것은 서비스 제공자의 책임입니다.
IBM Cloud 플랫폼에서 제공하는 브로커 정보
서비스 브로커 또는 브로커는 IBM Cloud 플랫폼에서 다음 정보를 수신합니다.
X-Broker-API-Originating-Identity
사용자 식별 헤더 는 API에서 생성된 식별 헤더를 통해 제공됩니다. 이 요청 헤더는 사용자의 IBM Cloud IAM ID를 포함합니다. IAM ID는 base64 형식으로 인코딩됩니다. IBM Cloud 는 IBMid 라는 단일 인증 영역을 지원합니다. IBMid 영역은 IBM ID 고유 ID(IUI)를 사용하여 IBM Cloud에서 사용자
ID를 식별합니다. 이 IUI는 서비스 제공자에게 불투명한 문자열로 표시됩니다.
예:
X-Broker-API-Originating-Identity: ibmcloud eyJpYW1faWQiOiJJQk1pZC01MEdOUjcxN1lFIn0=
Decoded:
{"iam_id":"IBMid-50GNR717YE"}
API 버전 헤더
API 버전 헤더 는 2.12입니다. 예: X-Broker-Api-Version: 2.12.
리소스 인스턴스(PUT) body.context 및 리소스 인스턴스(PATCH) body.context
PUT /v2/service_instances/:resource_instance_id 및 PATCH /v2/service_instances/:resource_instance_id는 body.context에서 다음 값을 받습니다. { "platform": "ibmcloud", "account_id": "tracys-account-id", "crn": "resource-instance-crn" }
추가 브로커 권장사항
동기 대신 비동기 오퍼레이션 사용에 대한 권장사항
OSB API는 동기 및 비동기 모드의 오퍼레이션을 모두 지원합니다. 조작에 10초미만이 소요되는 경우 동기 응답을 사용해야 합니다. 그렇지 않으면 비동기 모드의 오퍼레이션을 사용해야 합니다. 비동기 모드에는 last_operation 엔드포인트가 필요합니다. 자세한 정보는 서비스 인스턴스에 대해 진행 중인 프로비저닝 상태 가져오기 를 참조하십시오.
위치에서 브로커를 관리하기 위한 권장사항
사용자는 대기 시간, 가용성 및 데이터 주거성(data residency)에 대한 클라우드 서비스의 위치를 이해하는 것이 중요합니다.
IBM Cloud 에서 서비스 인스턴스를 생성할 때, 사용자가 입력해야 하는 필수 매개변수 중 하나는 해당 서비스 인스턴스를 생성할 위치입니다. 일부 서비스는 여러 위치에서 생성하는 기능을 지원할 수 있습니다. 예를 들어, 데이터베이스 서비스는 ‘ IBM Cloud ’의 모든 리전에서 생성 기능을 지원할 수도 있고, 그중 일부만 지원할 수도 있습니다.
서드파티 API 기반 서비스가 다른 클라우드에서 구현되고 IBM Cloud에 노출되는 경우 위치는 다른 클라우드에 있는 서비스의 위치를 표시해야 합니다.
IBM Cloud에 온보딩하는 경우 하나 이상의 OSB 브로커를 구현해야 합니다. 배치 전략 및 서비스에 대해 지원할 위치에 따라 둘 이상의 브로커가 있을 수 있습니다. 파트너 센터 판매 내에서 가격 플랜과 브로커 간의 맵핑을 설정합니다. 일반적으로 서비스의 모든 위치를 처리할 단일 브로커를 지정하거나, 위치별로 브로커를 지정하는 두 가지 방법이 있으며, 이 선택은 서비스 제공업체의 재량에 달려 있습니다.
사용 가능한 위치 목록은 IBM 글로벌 카탈로그 위치를 검토하십시오. 서비스에 더 많은 위치를 정의해야 하는 경우, IBM Cloud 온보딩 팀에 문의하십시오.
브로커 호스팅
귀하의 브로커는 REST API 호출에 응답할 수 있는 애플리케이션의 일부로 호스팅되어야 하며, 호스팅 위치는 보안 지침을 IBM Cloud 준수해야 합니다. 브로커를 IBM Cloud 에서 직접 호스팅할 수도 있고, IBM Cloud 에서 직접 공개적으로 접근할 수 있다면 외부에서 호스팅할 수도 있습니다.
브로커를 IBM 외부에 호스팅하려면 다음 보안 지침을 충족하는지 확인해야 합니다.
- 반드시 전송 계층 보안( TLS ) 프로토콜 버전 1.2 을 준수해야 합니다. 자세한 내용은 TLS 프로토콜 개요를 참조하세요.
- 공용 인터넷에서 액세스할 수 있는 올바른 HTTP 엔드포인트에서 호스팅되어야 함
서비스의 브로커 테스트
사용하는 다른 엔드포인트에 대해 curl 명령을 실행하여 브로커의 유효성을 검증해야 합니다. 서비스 브로커의 호스팅 위치와 애플리케이션과 연결된 URL 및 자격 증명이 필요합니다. 브로커를 테스트하려면 다음 방법을 사용할 수 있습니다:
- OSB 엔드포인트 curling에 대한 샘플 readme 파일 안내: https://github.com/IBM/sample-resource-service-brokers/blob/master/README.md.
서비스 브로커를 테스트하는 동안 리소스 컨트롤러는 구성된 인증 체계를 사용하여 브로커에 요청을 보냅니다. 브로커에서 지원되는 인증 방법 중 하나를 구현하여 적절한 유효성 검사 및 권한 부여가 이루어지도록 하세요. 자세한 내용은 브로커를 위한 인증 체계를 참조하세요.
curl 요청 예
다음 예제를 사용하여 브로커 curl 응답을 테스트하십시오.
curl -X PUT https://<sample-service-broker>/v2/service_instances/<encoded-resource-crn> \
-u '<your broker user>:<your broker password>' \
-H 'content-type: application/json' \
-d '{ "context": {"platform": "ibmcloud", \
"account_id": "34ff5928-c3c7-4d46-bbf6-1a5628c325d1", \
"resource_group_crn": "crn:v1:bluemix:public:resource-controller::a/003e9bc3993aec710d30a5a719e57a80::resource-group:b4570a825f7f4d57aa54e8e1d9507926", \
"crn": "<resource-crn>", \
"target_crn": "<target_crn>"}, \
"service_id": "a07f025c-90db-4652-afd1-cf4adfac93c8", \
"plan_id": "fe442cec-2eef-41fe-9f92-58d6c094584f"}'