mcpField
C
cf-cli

cf-cli

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

cf-cli について

cf-cli は、開発者や運用担当者向けに Cloud Foundry CLI v8 のコマンド作成と問題解決を支援するスキルです。アプリのデプロイと管理、サービス、組織やスペース、マニフェストと API による自動化を扱います。

主な機能

  1. 01Cloud Foundry v8 コマンドの作成
  2. 02アプリのデプロイと管理
  3. 03マニフェストと変数置換の説明
  4. 04サービス、ルート、スペースの管理
  5. 05ログ、タスク、問題解決の案内
  6. 06API 呼び出しによる自動化

活用シーン

  1. 01マニフェストを使ったアプリのデプロイ
  2. 02ログの確認とアプリ障害の診断
  3. 03サービスインスタンスの作成とバインド
  4. 04Cloud Foundry 管理の自動化

インストール

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

$npx skills add https://github.com/sap-archive/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

コメント