mcpField
B
btp-cli

btp-cli

github.com/sap-samplesクラウド・DevOps41115 回インストール27 週間前に更新
リポジトリ

btp-cli について

SAP Business Technology Platform の利用者向けに、btp CLI コマンドの作成、自動化、トラブルシューティングを支援するスキルです。アカウント、セキュリティ、サービスの操作に加え、認証、ターゲット設定、JSON スクリプトを扱います。

主な機能

  1. 01btp CLI コマンドの作成
  2. 02アカウント・セキュリティ・サービスの管理
  3. 03ログインとターゲット設定の案内
  4. 04JSON と jq スクリプトの作成
  5. 05コマンドとログインの問題解決

活用シーン

  1. 01BTP サブアカウントの作成と設定
  2. 02ユーザーへのロールコレクション割り当て
  3. 03サービスインスタンスとバインディングの自動管理
  4. 04CLI のログインやコマンドエラーの診断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sap-samples/joule-a2a-agent-toolkit --skill btp-cli

インストール後、Claude Code で/btp-cliを入力して読み込まれたか確認します。

詳細

SAP BTP CLI スキル

SAP Business Technology Platform コマンドラインインターフェース(btp CLI)のエキスパートとして、ユーザーが正しいコマンドを作成し、複数ステップの BTP ワークフローを自動化し、問題をトラブルシューティングできるよう支援します。ユーザーが常に btp --help を確認しなくても済むよう、適切なフラグとパラメーター値を使った、正確で実行可能なコマンドを提示してください。

コマンド構文

すべての btp コマンドは、次の構造に従います。

btp [OPTIONS] ACTION GROUP/OBJECT [PARAMS]

OPTIONS はアクションの前に指定し、動作をグローバルに変更します。

  • --format json — スクリプトでの利用に強く推奨される、機械可読な出力です
  • --verbose — デバッグ用の詳細な出力です

ACTION は動詞です。使用可能なアクションは、get、list、create、update、delete、add、remove、assign、unassign、enable、move、register、unregister、subscribe、unsubscribe、share、unshare です。

GROUP/OBJECT は、操作対象を指定します。グループは次の 3 つです。

グループ対象
accountsグローバルアカウント、サブアカウント、ディレクトリ、エンタイトルメント、リージョン、環境インスタンス、サブスクリプション、リソースプロバイダー
securityユーザー、ロールコレクション、ロール、信頼構成、アイデンティティプロバイダー
servicesサービスインスタンス、バインディング、ブローカー、プラン、オファリング、プラットフォーム

PARAMS はグループ/オブジェクトの後に指定します。最初のパラメーターは位置指定(キーなし)にでき、それ以外はすべて --key value 構文を使います。値がハイフンで始まる場合は、イコールを使います。例:--user="-someone"。

一般的なコマンド(グループ/オブジェクトなし)

これらは、アクション + グループ/オブジェクトのパターンに従いません。

コマンド用途
btp loginグローバルアカウントにログインします
btp logoutログアウトします
btp target後続のコマンドで使用するデフォルトのサブアカウント/ディレクトリを設定します
btp helpヘルプを表示します(例:btp help ACTION、btp help GROUP、btp help ACTION GROUP/OBJECT)
btp set config永続的な構成を変更します
btp feedbackSAP にフィードバックを送信します

認証

ログイン方法

SSO(推奨):

btp login --sso

ブラウザーが開き、アイデンティティプロバイダーによる認証が行われます。SAP Universal ID ユーザーには SSO が必須です。

カスタムアイデンティティプロバイダーを使用した SSO:

btp login --sso --idp <TENANT_ID>

テナント ID は btp list security/trust で確認するか、コックピットの Security > Trust Configuration で確認できます。

ブラウザーを自動で開かない SSO:

btp login --sso manual

手動で開く URL が表示されます。ヘッドレス環境やリモート環境で便利です。

基本ログイン(認証情報の入力を求められます):

btp login --url https://cli.btp.cloud.sap --subdomain <GLOBAL_ACCOUNT_SUBDOMAIN>
ログインパラメーター
パラメーター用途
--ssoブラウザーベースのシングルサインオン
--idp <TENANT>カスタムアイデンティティプロバイダーのテナント
--url <URL>CLI サーバーの URL(デフォルト:https://cli.btp.cloud.sap/)
--subdomain <SUBDOMAIN>グローバルアカウントのサブドメイン
--user <USER>ユーザー名またはメールアドレス
--password <PASSWORD>パスワード(MFA が有効な場合は 2FA トークンを続けて入力します)
セッション情報

セッションは最長 12 時間有効です。構成は次の場所に保存されます。

  • macOS: ~/Library/Application Support/.btp/config.json
  • Linux: ~/.config/.btp/config.json
  • Windows: %APPDATA%\SAP\btp\config.json

同じメールアドレスを持つアカウントが複数ある場合は、代わりに S-user または P-user ID を使うようユーザーに伝えてください。

ターゲットの設定

デフォルトでは、コマンドはグローバルアカウントに対して実行されます。btp target を使ってコマンドの対象をサブアカウントまたはディレクトリに絞り込むと、呼び出しのたびに --subaccount や --directory を渡す必要がありません。

# Target a subaccount
btp target --subaccount <SUBACCOUNT_ID>

# Target a directory
btp target --directory <DIRECTORY_ID>

# Clear targeting (back to global account)
btp target

これは、ほぼ常にサブアカウントのコンテキストが必要となるサービスコマンドやセキュリティコマンドで特に重要です。

グループ別コマンドリファレンス

accounts

グローバルアカウント:

btp get accounts/global-account
btp get accounts/global-account --show-hierarchy    # shows full org tree

サブアカウント:

btp list accounts/subaccount
btp get accounts/subaccount <SUBACCOUNT_ID>
btp create accounts/subaccount --display-name "Dev" --region eu10 --subdomain my-dev-sub
btp update accounts/subaccount <SUBACCOUNT_ID> --display-name "Development"
btp delete accounts/subaccount <SUBACCOUNT_ID>

ディレクトリ:

btp list accounts/directory
btp get accounts/directory <DIRECTORY_ID>
btp create accounts/directory --display-name "Department A"
btp delete accounts/directory <DIRECTORY_ID>

エンタイトルメント:

btp list accounts/entitlement
btp list accounts/entitlement --subaccount <SUBACCOUNT_ID>
btp assign accounts/entitlement --to-subaccount <SUBACCOUNT_ID> \
  --for-service <SERVICE_NAME> --plan <PLAN_NAME> --amount <N>

リージョン:

btp list accounts/available-region

環境インスタンス(Cloud Foundry、Kyma など):

btp list accounts/available-environment
btp list accounts/environment-instance --subaccount <SUBACCOUNT_ID>
btp create accounts/environment-instance --subaccount <SUBACCOUNT_ID> \
  --environment cloudfoundry --plan standard --display-name "cf-dev" \
  --parameters '{"instance_name":"my-cf-org"}'
btp get accounts/environment-instance <INSTANCE_ID> --subaccount <SUBACCOUNT_ID>
btp delete accounts/environment-instance <INSTANCE_ID> --subaccount <SUBACCOUNT_ID>

サブスクリプション:

btp list accounts/subscription --subaccount <SUBACCOUNT_ID>
btp subscribe accounts/subaccount --to-app <APP_NAME> --plan <PLAN>
btp unsubscribe accounts/subaccount --from-app <APP_NAME>
セキュリティ

ロールコレクション:

btp list security/role-collection
btp get security/role-collection "<ROLE_COLLECTION_NAME>"
btp create security/role-collection "<NAME>" --description "Description here"
btp assign security/role-collection "<NAME>" --to-user <EMAIL> --of-idp <IDP>
btp unassign security/role-collection "<NAME>" --from-user <EMAIL>

ユーザー:

btp list security/user
btp get security/user <EMAIL>
btp delete security/user <EMAIL>
# Scope to directory or global account:
btp list security/user --of-idp <IDP>

ロール:

btp list security/role
btp get security/role <ROLE_NAME> --of-role-template <TEMPLATE> --of-app <APP_ID>

信頼設定:

btp list security/trust
btp get security/trust <IDP_NAME>
サービス

サービスコマンドを実行する前に、必ず最初にサブアカウントをターゲットにします(btp target --subaccount <ID>)。

サービスオファリングとプラン:

btp list services/offering
btp get services/offering <OFFERING_ID>
btp list services/plan
btp get services/plan <PLAN_ID>

サービスインスタンス:

btp list services/instance
btp get services/instance <INSTANCE_ID>
btp get services/instance <INSTANCE_ID> --show-parameters
btp create services/instance --offering-name <OFFERING> --plan-name <PLAN> \
  --name <INSTANCE_NAME> --parameters '{"key":"value"}'
btp update services/instance <INSTANCE_ID> --parameters '{"key":"new-value"}'
btp delete services/instance <INSTANCE_ID>
btp share services/instance <INSTANCE_ID>
btp unshare services/instance <INSTANCE_ID>

サービスバインディング:

btp list services/binding
btp get services/binding <BINDING_ID>
btp create services/binding --name <BINDING_NAME> --instance-id <INSTANCE_ID>
btp delete services/binding <BINDING_ID>

サービスブローカー:

btp list services/broker
btp get services/broker <BROKER_ID>
btp register services/broker --name <NAME> --url <BROKER_URL> \
  --user <USER> --password <PASSWORD>
btp update services/broker <BROKER_ID> --url <NEW_URL>
btp unregister services/broker <BROKER_ID>

スクリプトと自動化

JSON 出力

テキスト出力は人間向けに設計されており、バージョン間で変更される可能性があるため、スクリプトで解析してはいけません。代わりに JSON を使用します。

# Per-command
btp --format json list accounts/subaccount

# Set as default
btp set config --format json

JSON レスポンスにはテキスト出力よりも多くのフィールド(GUID、タイムスタンプ、状態情報など)が含まれ、CLI バージョン間で安定しています。

jq によるパイプ処理

--format json と jq を組み合わせると、強力なワンライナーを作成できます。

# Get subaccount ID by display name
btp --format json list accounts/subaccount | jq -r '.value[] | select(.displayName=="Dev") | .guid'

# List all entitled service names
btp --format json list accounts/entitlement | jq -r '.entitledServices[].name'

# Get CF API endpoint from environment instance
btp --format json list accounts/environment-instance --subaccount "$SA_ID" \
  | jq -r '.environmentInstances[] | select(.environmentType=="cloudfoundry") | .labels' \
  | jq -r '.["API Endpoint"]'
よくあるスクリプトパターン

ID を変数に格納する:

SA_ID=$(btp --format json list accounts/subaccount \
  | jq -r '.value[] | select(.displayName=="Dev") | .guid')

条件分岐:

# Check if subaccount exists before creating
if ! btp --format json list accounts/subaccount | jq -e '.value[] | select(.displayName=="Dev")' > /dev/null 2>&1; then
  btp create accounts/subaccount --display-name "Dev" --region eu10 --subdomain dev-sub
fi

結果をループ処理する:

# Assign entitlement to all subaccounts
btp --format json list accounts/subaccount | jq -r '.value[].guid' | while read sa; do
  btp assign accounts/entitlement --to-subaccount "$sa" \
    --for-service application-logs --plan lite --amount 1
done
設定オプション
btp set config --format json              # default to JSON output
btp set config --target.hierarchy true     # show hierarchy by default with btp target

よくあるワークフロー

サブアカウントの完全なセットアップ(最初から最後まで)

これは最も一般的な複数ステップのワークフローです。次の順序でユーザーを案内します。

  1. ログイン: btp login --sso
  2. リージョンを確認: btp list accounts/available-region
  3. サブアカウントを作成: btp create accounts/subaccount --display-name "Dev" --region eu10 --subdomain dev-sub-123
  4. ターゲットに設定: btp target --subaccount <NEW_SUBACCOUNT_ID>
  5. エンタイトルメントを割り当て: btp assign accounts/entitlement --to-subaccount <ID> --for-service <SVC> --plan <PLAN> --amount 1
  6. CF 環境を作成: btp create accounts/environment-instance --environment cloudfoundry --plan standard --display-name "cf-dev" --parameters '{"instance_name":"dev-org"}'
  7. 管理者ロールを割り当て: btp assign security/role-collection "Subaccount Administrator" --to-user [email protected]
  8. スペースの作成には cf CLI に切り替える: cf login -a <API_ENDPOINT> を実行してから cf create-space dev を実行します
ユーザーにアクセス権を付与する
btp target --subaccount <SUBACCOUNT_ID>
btp assign security/role-collection "Subaccount Viewer" --to-user [email protected] --of-idp <IDP>
サービスインスタンスとバインディングを作成する
btp target --subaccount <SUBACCOUNT_ID>
btp create services/instance --offering-name xsuaa --plan application --name my-xsuaa \
  --parameters '{"xsappname":"myapp","tenant-mode":"dedicated"}'
btp create services/binding --name my-xsuaa-key --instance-id <INSTANCE_ID>
btp get services/binding <BINDING_ID>   # contains credentials

トラブルシューティング

ログインの失敗
症状考えられる原因対処方法
"Could not log in" / 404サーバー URL またはサブドメインが間違っている--url https://cli.btp.cloud.sap と正しい --subdomain を指定して確認します
SSO でブラウザーが開くが失敗するカスタム IdP が指定されていない--idp <TENANT> を追加します(cockpit の Trust Configuration で確認できます)
ログイン後に "Unauthorized" と表示されるセッションの有効期限切れ(最大 12 時間)btp login を再実行します
複数のアカウントがあり、間違ったアカウントが選択されるメールアドレスが誤ったアカウントに解決されるメールアドレスの代わりに S-user または P-user ID を使用します
コマンドの失敗
症状考えられる原因対処方法
サービスコマンドで "Not found" と表示されるサブアカウントがターゲットに設定されていない先に btp target --subaccount <ID> を実行します
"Insufficient scope" と表示されるロールコレクションが不足しているcockpit または別の管理者の btp CLI から適切な管理者ロールを割り当てます
エンタイトルメントの割り当てに失敗するグローバルアカウントのクォータが使い切られているグローバルアカウントレベルで btp list accounts/entitlement を確認します
パラメーターが受け付けられないハイフンで始まる値の構文が間違っている等号を使用します:--param="-value"
一般的なデバッグ
  • アクションの前に --verbose を追加して、リクエストとレスポンスの詳細を確認します
  • btp --format json ... の出力を確認します。JSON のエラーはテキストより詳しい情報を示します
  • btp help <ACTION> <GROUP/OBJECT> を実行して、正確なパラメーター名と型を確認します
  • ネットワークに問題がある場合は、https://cli.btp.cloud.sap に接続できることを確認します

コマンドを生成するためのヒント

ユーザーが自然言語でやりたいことを説明した場合は、次の手順に従ってください。

  1. アクションを特定します。 何をしようとしていますか? 作成、一覧表示、割り当て、削除のどれですか?
  2. グループ/オブジェクトを特定します。 アカウント、セキュリティ、サービスのどれに関することですか? 具体的にはどのオブジェクトですか?
  3. 対象の指定が必要か確認します。 サービスとセキュリティのコマンドでは、ほとんどの場合、サブアカウントの対象指定が必要です。
  4. パラメーターを設定します。 不明な ID、名前、値があればユーザーに確認してください。GUID を推測してはいけません。
  5. ユーザーがスクリプトを作成している場合や、特定の値を抽出する必要がある場合は、JSON 出力を提案します。

コマンドを提示する際は、断片ではなく、実行可能な完全な例を必ず示してください。不明な値(サブアカウント ID など)が必要なコマンドでは、<SUBACCOUNT_ID> のようなわかりやすいプレースホルダーを使い、その値の確認方法(例:btp list accounts/subaccount を実行して ID を取得する)をユーザーに伝えてください。

コメント