mcpField
C
cf-cli

cf-cli

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

cf-cli について

cf-cli は、Cloud Foundry CLI v8 を使うユーザー向けのスキルです。アプリのデプロイと運用に加え、サービス、マニフェスト、管理操作、トラブルシューティングの実行可能なコマンドを案内します。

主な機能

  1. 01Cloud Foundry CLI v8 コマンドの作成
  2. 02アプリのデプロイとライフサイクル操作
  3. 03マニフェストと変数の設定
  4. 04サービス、ルート、組織、スペースの管理
  5. 05ログ、イベント、API 呼び出しによる調査

活用シーン

  1. 01cf push とマニフェストでデプロイを準備
  2. 02アプリのログを確認してイベントを診断
  3. 03サービスをバインドしてアプリ設定を更新

インストール

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

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

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

詳細

Cloud Foundry CLI スキル

Cloud Foundry CLI(v8)のエキスパートとして、ユーザーが正しい cf コマンドを作成し、マニフェストを記述し、デプロイを自動化し、サービスを管理し、問題をトラブルシューティングできるよう支援します。ユーザーが cf help を何度も実行せずに済むよう、正確ですぐに実行できるコマンドを提供することが目標です。

重要: v7 と v6 はメンテナンスが終了しています。常に v8 の構文を使用してください。v8 CLI は CC API v3 を基盤としています。

インストール

V8 Installation Guideからインストールします。パッケージマネージャー(Homebrew、apt、yum、Chocolatey)またはバイナリをダウンロードして利用できます。

確認:cf version

認証とターゲットの設定

cf api

Cloud Foundry インスタンスの API エンドポイントを設定します。

cf api https://api.example.com
cf api https://api.example.com --skip-ssl-validation   # dev/self-signed certs only
cf api                                                   # show current API
cf login

対話形式でログインします。指定されていない情報がある場合は入力を求められます。

cf login                                                # fully interactive
cf login -a https://api.example.com                     # set API + login
cf login -a https://api.example.com -u [email protected] # preset username
cf login -a https://api.example.com --sso               # SSO via one-time passcode
cf login -o my-org -s dev                               # target org + space on login
フラグ説明
-aAPI エンドポイントの URL
-uユーザー名
-pパスワード(シェルの履歴に記録されるため、使用は避けてください)
-oターゲットの組織
-sターゲットのスペース
--ssoログイン URL から取得したワンタイムパスコードによる SSO
--sso-passcode <code>SSO パスコードを直接指定
--origin <origin>ID プロバイダーのオリジンを指定
--skip-ssl-validationSSL 証明書の検証をスキップ
cf auth

スクリプトや CI/CD 向けの非対話型認証です。

cf auth username password
cf auth username password --origin ldap
cf auth --client-credentials                    # uses CF_USERNAME and CF_PASSWORD env vars
cf target

ログイン後に組織とスペースのコンテキストを切り替えます。

cf target -o my-org -s dev
cf target -s staging                            # switch space only
cf target                                       # show current target
cf logout
cf logout

アプリのライフサイクル

cf push(エイリアス:p)

最も重要なコマンドです。アプリをデプロイします。

cf push my-app                                           # push from current dir
cf push my-app -p ./build                                # push specific path
cf push my-app -f manifest.yml                           # use specific manifest
cf push my-app -b nodejs_buildpack                       # explicit buildpack
cf push my-app -i 3 -m 512M -k 1G                       # 3 instances, 512MB RAM, 1GB disk
cf push my-app --no-start                                # stage but don't start
cf push my-app --no-route                                # no route (workers/tasks)
cf push my-app --random-route                            # generate random route
cf push my-app --strategy rolling                        # zero-downtime rolling deploy
cf push my-app --docker-image my-registry/my-image:tag   # docker image
cf push -f manifest.yml --var host=my-host               # variable substitution
cf push -f manifest.yml --vars-file vars.yml             # vars from file

主なフラグ:-b ビルドパック、-c コマンド、-f マニフェスト、-i インスタンス数、-k ディスク容量、-m メモリ、-p パス、-s スタック、-t タイムアウト、-u ヘルスチェックの種類(port/http/process)、-o/--docker-image、--docker-username(パスワードは CF_DOCKER_PASSWORD で指定)、--droplet、--endpoint、--no-manifest、--no-route、--no-start、--no-wait、--random-route、--strategy(rolling/null)、--task、--var KEY=VALUE、--vars-file PATH。

Push の環境変数: CF_DOCKER_PASSWORD、CF_STAGING_TIMEOUT=15(分)、CF_STARTUP_TIMEOUT=5(分)。

アプリの管理
cf apps                          # list all apps in current space
cf app my-app                    # show app details (instances, memory, routes, state)
cf start my-app                  # start a stopped app
cf stop my-app                   # stop a running app
cf restart my-app                # restart (re-containerize, same droplet)
cf restage my-app                # restage (re-build droplet from source)
cf delete my-app                 # delete app (prompts for confirmation)
cf delete my-app -f              # force delete (no confirmation)
cf delete my-app -r              # also delete mapped routes
cf rename my-app new-name        # rename an app
cf scale my-app -i 5             # scale to 5 instances
cf scale my-app -m 1G -k 2G     # change memory and disk
cf scale my-app -i 5 -m 1G      # scale instances and memory together
デプロイとロールバック
cf push my-app --strategy rolling          # zero-downtime rolling deploy
cf cancel-deployment my-app                # cancel an in-progress deployment
ログとイベント
cf logs my-app                   # tail live logs
cf logs my-app --recent          # dump recent logs
cf events my-app                 # show recent app events (crashes, scaling, etc.)
SSH
cf ssh my-app                              # SSH into first instance
cf ssh my-app -i 2                         # SSH into instance index 2
cf ssh my-app -c "cat /app/config.yml"     # run a command and exit
cf enable-ssh my-app / cf disable-ssh my-app / cf ssh-enabled my-app
タスク
cf run-task my-app --command "rake db:migrate"    # run a one-off task
cf run-task my-app -c "rake db:migrate" -m 512M   # with memory limit
cf tasks my-app                                    # list tasks
cf terminate-task my-app TASK_ID                   # cancel a running task
環境変数
cf env my-app                              # show all env vars (user + system)
cf set-env my-app DATABASE_URL "postgres://..."    # set a var
cf unset-env my-app DATABASE_URL           # remove a var
cf restage my-app                          # restage for changes to take effect

set-env または unset-env の実行後、変更を適用するにはアプリを再ステージするか、再起動する必要があります。

ヘルスチェック
cf get-health-check my-app
cf set-health-check my-app http --endpoint /health
cf set-health-check my-app port
cf set-health-check my-app process
パッケージとドロプレット
cf packages my-app / cf create-package my-app      # list / upload packages
cf droplets my-app / cf set-droplet my-app GUID     # list / set active droplet
cf download-droplet my-app / cf stage-package my-app --package-guid GUID

マニフェスト

マニフェスト(manifest.yml)にはアプリの設定を記述します。cf push の実行時に、CF は現在のディレクトリからマニフェストを自動的に読み込みます。

---
applications:
- name: my-app
  memory: 512M
  disk_quota: 1G
  instances: 2
  buildpacks:
  - nodejs_buildpack
  command: node server.js
  health-check-type: http
  health-check-http-endpoint: /health
  timeout: 120
  stack: cflinuxfs4
  env:
    NODE_ENV: production
    LOG_LEVEL: info
  routes:
  - route: my-app.example.com
  - route: my-app.example.com/api
  services:
  - my-database
  - my-redis
  processes:
  - type: web
    instances: 2
    memory: 512M
  - type: worker
    instances: 1
    memory: 256M
    command: node worker.js
    health-check-type: process
    no-route: true

マニフェスト内の変数置換:

# manifest.yml
applications:
- name: ((app-name))
  instances: ((instances))
cf push --var app-name=my-app --var instances=3
# or from a file:
cf push --vars-file production.yml

実行中のアプリからマニフェストを作成:

cf create-app-manifest my-app              # generates manifest.yml from current state
cf create-app-manifest my-app -p ./out     # write to specific directory

サービス

マーケットプレイス
cf marketplace                              # list all available services
cf marketplace -e SERVICE_NAME              # show plans for a specific service
cf marketplace -s SERVICE_NAME              # alias for -e
サービスインスタンス
cf services                                # list service instances in current space
cf service my-db                           # show details for a service instance

# Create
cf create-service SERVICE PLAN NAME        # create from marketplace
cf create-service postgres standard my-db
cf create-service postgres standard my-db -c '{"storage":"50gb"}'  # with params
cf create-service postgres standard my-db -c config.json           # params from file
cf create-service postgres standard my-db -t "env:prod,team:api"   # with tags

# Update
cf update-service my-db -p premium         # change plan
cf update-service my-db -c '{"key":"val"}' # update params
cf upgrade-service my-db                   # upgrade to latest version

# Delete
cf delete-service my-db
cf delete-service my-db -f                 # no confirmation

cf rename-service my-db new-db-name
バインドとバインド解除
cf bind-service my-app my-db               # bind service to app
cf bind-service my-app my-db -c '{"role":"admin"}'  # with config
cf unbind-service my-app my-db             # unbind
cf restage my-app                          # restage to pick up new bindings

バインドすると、認証情報が VCAP_SERVICES 環境変数に注入されます。

サービスキー

サービスキーを使うと、アプリにバインドせずに認証情報を取得できます。

cf create-service-key my-db my-key
cf create-service-key my-db my-key -c '{"permissions":"read-only"}'
cf service-keys my-db                       # list keys
cf service-key my-db my-key                 # show credentials
cf delete-service-key my-db my-key
ユーザー提供サービス

マーケットプレイスにない外部サービスの場合:

# Interactive (prompts for each param)
cf create-user-provided-service my-ext -p "host, port, username, password"

# Non-interactive (JSON)
cf cups my-ext -p '{"host":"db.example.com","port":"5432","user":"admin","password":"secret"}'

# Syslog drain
cf cups my-logger -l syslog://logs.example.com:514

# Route service
cf cups my-proxy -r https://proxy.example.com

# Update
cf update-user-provided-service my-ext -p '{"password":"new-secret"}'

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

サービス共有とルートサービス
cf share-service my-db -s other-space [-o other-org]
cf unshare-service my-db -s other-space
cf bind-route-service example.com my-proxy --hostname my-app
cf unbind-route-service example.com my-proxy --hostname my-app

ルートとドメイン

ドメイン
cf domains                                          # list all domains
cf create-private-domain my-org apps.internal        # internal/private domain
cf delete-private-domain apps.internal
cf create-shared-domain shared.example.com           # shared across all orgs
cf delete-shared-domain shared.example.com
cf router-groups                                     # list router groups
ルート
cf routes                                            # list all routes in current space
cf route my-app.example.com                          # show route details

cf create-route example.com --hostname my-app        # create route
cf create-route apps.internal --hostname backend      # internal route
cf create-route example.com --hostname my-app --path /api  # with path

cf map-route my-app example.com --hostname my-app    # map route to app
cf unmap-route my-app example.com --hostname my-app  # unmap

cf delete-route example.com --hostname my-app        # delete route
cf delete-orphaned-routes                             # clean up unmapped routes

cf check-route example.com --hostname my-app          # check if route exists

組織とスペース

組織
cf orgs                          # list orgs
cf org my-org                    # show org details (spaces, domains, quotas)
cf create-org my-org
cf delete-org my-org
cf rename-org my-org new-org
スペース
cf spaces                        # list spaces in current org
cf space dev                     # show space details
cf create-space staging
cf delete-space staging
cf rename-space staging production
cf apply-manifest -f manifest.yml  # apply manifest to current space
スペースの SSH

cf allow-space-ssh SPACE / cf disallow-space-ssh SPACE / cf space-ssh-allowed SPACE

ユーザーとロールの管理

cf org-users my-org                                              # list org users
cf space-users my-org dev                                        # list space users
# Org roles: OrgManager, BillingManager, OrgAuditor
cf set-org-role [email protected] my-org OrgManager
cf unset-org-role [email protected] my-org OrgManager
# Space roles: SpaceManager, SpaceDeveloper, SpaceAuditor, SpaceSupporter
cf set-space-role [email protected] my-org dev SpaceDeveloper
cf unset-space-role [email protected] my-org dev SpaceDeveloper

管理

ビルドパック: cf buildpacks(一覧表示)、cf create-buildpack NAME PATH POSITION、cf update-buildpack NAME -p PATH、cf delete-buildpack NAME。

ネットワークポリシー: cf network-policies、cf add-network-policy APP DEST --protocol tcp --port 8080、cf remove-network-policy APP DEST --protocol tcp --port 8080。

セキュリティグループ: cf security-groups、cf create-security-group NAME rules.json、cf bind-security-group NAME ORG SPACE --lifecycle running、cf bind-running-security-group NAME(グローバルのデフォルト)。

クォータ: cf org-quotas、cf create-org-quota NAME -m 10G -i 100 -r 50 -s 20、cf set-org-quota ORG QUOTA。スペースのクォータ: cf space-quotas、cf create-space-quota NAME -m 5G、cf set-space-quota SPACE QUOTA。

機能フラグ: cf feature-flags、cf enable-feature-flag FLAG、cf disable-feature-flag FLAG。

高度なコマンド

cf curl

API を直接呼び出します。自動化やデバッグに非常に便利です。

cf curl /v3/apps                              # list apps via API
cf curl /v3/apps/APP_GUID                     # get specific app
cf curl /v3/apps -X POST -d '{"name":"my-app","relationships":{"space":{"data":{"guid":"SPACE_GUID"}}}}'
cf curl "/v3/apps?names=my-app"               # query by name
cf config
cf config --trace true                # enable API tracing (like CF_TRACE=true)
cf config --trace /tmp/cf-trace.log   # trace to file
cf config --color false               # disable colored output
cf config --locale en-US              # set locale
cf oauth-token
cf oauth-token                        # print current access token (for scripting)

環境変数

変数説明
CF_HOME~/.cf 設定ディレクトリの場所を上書きします
CF_TRACEAPI トレースを有効にする場合は true、トレースログのファイルパスを指定することもできます
CF_COLOR色付き出力を無効にする場合は false を指定します
CF_DOCKER_PASSWORDcf push --docker-image 用の Docker レジストリパスワード
CF_STAGING_TIMEOUTステージングを待つ最大時間(分)(デフォルト: 15)
CF_STARTUP_TIMEOUTアプリの起動を待つ最大時間(分)(デフォルト: 5)
CF_DIAL_TIMEOUTAPI 接続の最大待ち時間(秒)(デフォルト: 5)

プラグイン

cf plugins                                          # list installed plugins
cf install-plugin PLUGIN                            # install (local path, URL, or repo name)
cf install-plugin -r CF-Community my-plugin         # from registered repo
cf uninstall-plugin my-plugin
cf repo-plugins                                     # list available plugins
cf list-plugin-repos                                # list registered repos
cf add-plugin-repo CF-Community https://plugins.cloudfoundry.org
cf remove-plugin-repo CF-Community

プラグインのコードでは import "code.cloudfoundry.org/cli/v9/plugin" を使用します。

MTA / Multiapps プラグイン(cf deploy)

CAP アプリケーションと MTA プロジェクトは、multiapps CF CLI プラグインを使用して .mtar アーカイブとしてデプロイされます。これにより、cf deploy コマンド(cf push とは別)が利用可能になります。

プラグインとビルドツールをインストールする

mbt build または cf deploy を実行する前に、両方のツールが存在することを確認してください。次のチェックを実行し、見つからない場合はインストールします。

# Check and install mbt (MTA Build Tool)
if ! command -v mbt &>/dev/null; then
  echo "mbt not found — installing..."
  npm install -g mbt
else
  echo "mbt $(mbt --version) already installed"
fi

# Check and install the multiapps CF CLI plugin
if ! cf plugins | grep -q multiapps; then
  echo "multiapps plugin not found — installing..."
  cf install-plugin multiapps -f
else
  echo "multiapps plugin already installed"
  cf plugins | grep multiapps
fi
MTA をビルドしてデプロイする
# Build the .mtar archive from mta.yaml
mbt build

# Deploy the archive to the targeted CF org/space
cf deploy mta_archives/<app>_1.0.0.mtar

# Deploy with verbose output
cf deploy mta_archives/<app>_1.0.0.mtar -e config.mtaext

# Check deploy status
cf mta-ops                          # list ongoing MTA operations
cf mta <mta-id>                     # show MTA status
cf mtas                             # list all deployed MTAs
cf undeploy <mta-id> --delete-services  # remove an MTA + its services
cf deploy のトラブルシューティング
エラー原因対処方法
unknown command 'deploy'multiapps プラグインがインストールされていませんcf install-plugin multiapps
service plan 'extended' not availableAI Core の extended プランが付与されていないか、組織のプランが制限されていますBTP のエンタイトルメントを確認します。AI Core を使用する CAP には extended プランが必要です
MTA ID already exists前回のデプロイで状態が不完全なまま残っていますcf undeploy <mta-id> を実行してから再試行します
npm エラーでビルドが失敗するmta.yaml の Node バージョンが一致していませんpackage.json の engines.node が CF ビルドパックのバージョンと一致していることを確認します

トラブルシューティング

よくある問題
症状考えられる原因対処方法
FAILED - Not logged inトークンの期限切れ、または未認証ですcf login を再実行します
FAILED - No org/space targetedターゲットのコンテキストが設定されていませんcf target -o ORG -s SPACE を実行します
push 時にアプリがクラッシュする起動コマンドに問題があるか、依存関係が不足していますcf logs APP --recent でエラーを確認します
ステージングに失敗するビルドパックが間違っているか、ファイルが不足しています-b でビルドパックを確認し、.cfignore を確認します
CF_STAGING_TIMEOUT を超過するアプリのステージングに時間がかかりすぎていますCF_STAGING_TIMEOUT を増やすか、ビルドを最適化します
SSL 証明書エラー自己署名証明書が使用されています--skip-ssl-validation を使用する(開発環境のみ)か、証明書をインストールします
ルートがすでに存在する別のアプリまたはスペースがそのルートを所有していますcf routes で確認するか、--random-route を使用します
サービスのバインドに失敗するサービスの準備ができていないか、スペースが間違っていますcf service SERVICE のステータスを確認します
デバッグの手順
  1. ログを確認する: cf logs my-app --recent — まず最初に試してください
  2. トレースを有効にする: CF_TRACE=true cf push my-app — API のリクエスト/レスポンスを確認します
  3. イベントを確認する: cf events my-app — 最近のクラッシュ、再ステージ、スケーリングを確認します
  4. SSH で接続する: cf ssh my-app — 実行中のコンテナを調査します
  5. 環境変数を確認する: cf env my-app — VCAP_SERVICES とユーザー環境変数を確認します
  6. API をデバッグする: cf curl /v3/apps/GUID/processes — プロセスレベルの詳細を調査します
コマンドの成功を確認する
cf push my-app
echo $?    # 0 = success, non-zero = failure

よくあるワークフロー

Postgres サービスを使用して Node.js アプリをデプロイする
cf login -a https://api.example.com --sso
cf target -o my-org -s dev
cf create-service postgres standard my-db
cf push my-app -b nodejs_buildpack
cf bind-service my-app my-db
cf restage my-app
ゼロダウンタイムでデプロイする
cf push my-app --strategy rolling
# If something goes wrong mid-deploy:
cf cancel-deployment my-app
CI/CD パイプラインのパターン
cf api https://api.example.com
cf auth "$CF_USERNAME" "$CF_PASSWORD"
cf target -o my-org -s production
cf push my-app -f manifest-prod.yml --strategy rolling --no-wait
負荷に基づいてスケーリングする
cf scale my-app -i 10              # scale out to 10 instances
cf scale my-app -m 1G              # increase memory per instance

コメント