ユーザー提供のサービスを構成する

ユーザーは、ユーザー提供のサービス インスタンスを作成することで、Marketplace では利用できないサービスを活用できます。作成されたユーザー提供のサービス インスタンスは、marketplace を介して作成されたサービス インスタンスと同様に動作します。ユーザー提供のサービスの作成、一覧表示、更新、削除、バインディング、バインド解除はすべて Kf でサポートされています。

ユーザー提供のサービス インスタンスを作成する

kf create-user-provided-service のエイリアスは kf cups です。

ユーザー提供のサービスに付けられた名前は、サービス ブローカーを介して作成されたサービスを含め、Space 内のすべてのサービス インスタンスで一意である必要があります。

アプリにサービス認証情報を提供する

ユーザー指定のサービス インスタンスを使用して、認証情報を App に提供できます。たとえば、データベース管理者は、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(インラインまたはファイルパスから読み込まれたもの)である必要があります。

1 つ以上のアプリに認証情報を提供するには、ユーザーは kf bind-service を実行します。

上で定義したユーザー指定サービス my-db という 1 つのバインドされたサービスを持つアプリがあるとします。そのアプリの 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"
      }
    }
  ]
}

新しい認証情報で古い認証情報が上書きされましたが、タグは更新コマンドで指定されていないため変更されません。