사용자는 사용자 제공 서비스 인스턴스를 만들어 마켓플레이스에서 제공되지 않는 서비스를 활용할 수 있습니다. 인스턴스가 생성되면 사용자 제공 서비스 인스턴스는 마켓플레이스를 통해 생성된 서비스 인스턴스처럼 작동합니다. 사용자 제공 서비스의 생성, 나열, 업데이트, 삭제, 바인딩, 바인딩 해제는 모두 Kf에서 지원됩니다.
사용자 제공 서비스 인스턴스 만들기
kf create-user-provided-service
의 별칭은 kf cups
입니다.
사용자 제공 서비스에 지정된 이름은 서비스 브로커를 통해 생성된 서비스를 포함하여 공간의 모든 서비스 인스턴스에서 고유해야 합니다.
앱에 서비스 사용자 인증 정보 제공
사용자 제공 서비스 인스턴스를 사용하여 앱에 사용자 인증 정보를 제공할 수 있습니다. 예를 들어 데이터베이스 관리자는 Kf 외부에서 관리되는 기존 데이터베이스의 사용자 인증 정보 집합을 가질 수 있으며, 이러한 사용자 인증 정보에는 데이터베이스에 연결하는 데 사용되는 URL, 포트, 사용자 이름, 비밀번호가 포함됩니다.
관리자는 사용자 인증 정보로 사용자 제공 서비스를 만들 수 있으며 개발자는 서비스 인스턴스를 앱에 바인딩할 수 있습니다. 이렇게 하면 플랫폼을 벗어나지 않고 사용자 인증 정보를 공유할 수 있습니다. 서비스 인스턴스를 앱에 바인딩하면 서비스가 사용자 제공 서비스인지 마켓플레이스 서비스인지에 관계없이 동일한 효과가 있습니다.
앱은 사용자가 제공한 사용자 인증 정보로 구성되며, 앱 런타임 환경 변수 VCAP_SERVICES
에는 해당 앱에 바인드된 모든 서비스에 대한 정보가 채워집니다.
사용자 제공 서비스는 사용자 인증 정보 또는 태그 목록으로 만들 수 있습니다.
kf cups my-db -p '{"username":"admin", "password":"test123", "some-int-val": 1, "some-bool": true}' -t "comma, separated, tags"
이 명령어는 제공된 사용자 인증 정보와 태그로 사용자 제공 서비스 인스턴스 my-db
를 생성합니다. -p
플래그에 전달된 사용자 인증 정보는 유효한 JSON(인라인 또는 파일 경로에서 로드)이어야 합니다.
사용자는 하나 이상의 앱에 사용자 인증 정보를 제공하기 위해 kf bind-service
를 실행할 수 있습니다.
한 서비스가 바인딩된 앱이 있고 위에 정의된 사용자 제공 서비스 my-db
가 있다고 가정해보세요. 앱의 VCAP_SERVICES
환경 변수에는 다음 콘텐츠가 포함됩니다.
{
"user-provided": [
{
"name": "my-db",
"instance_name": "my-db",
"label": "user-provided",
"tags": [
"comma",
"separated",
"tags"
],
"credentials": {
"username": "admin",
"password": "test123",
"some-int-val": 1,
"some-bool": true
}
}
]
}
사용자 제공 서비스 인스턴스 업데이트
kf update-user-provided-service
의 별칭은 kf uups
입니다.
사용자 제공 서비스는 uups
명령어를 통해 업데이트할 수 있습니다. 전달된 새 사용자 인증 정보 또는 태그는 기존 정보를 완전히 덮어씁니다. 예를 들어 사용자가 위 사용자 제공 서비스 my-db
를 만들고 kf bind-service
를 호출하여 서비스를 앱에 바인딩한 후 다음 명령어를 실행합니다.
kf uups my-db -p '{"username":"admin", "password":"new-pw", "new-key": "new-val"}'
사용자가 서비스 바인드 해제하고 앱에 다시 바인딩한 후에는 업데이트된 사용자 인증 정보만 앱에 반영됩니다. 앱을 다시 시작하거나 복원할 필요가 없습니다. 업데이트된 VCAP_SERVICES
환경 변수에는 다음과 같은 내용이 포함됩니다.
{
"user-provided": [
{
"name": "my-db",
"instance_name": "my-db",
"label": "user-provided",
"tags": [
"comma",
"separated",
"tags"
],
"credentials": {
"username": "admin",
"password": "new-pw",
"new-key": "new-val"
}
}
]
}
새 사용자 인증 정보는 이전 사용자 인증 정보를 덮어쓰며, 태그는 업데이트 명령어에 지정되지 않았으므로 변경되지 않습니다.