Cloud FoundryにデプロイしたアプリはWardenと呼ばれるコンテナで動いています。
通常はこのコンテナ内に入ることができませんが、ツールやプラグインを使うことでコンテナに入ったり、ファイルを取得したりができるようになります。
cf-ssh
Cloud Foundryにデプロイしたアプリのコンテナに入ります。
コンテナの中に入ってしまえば、通常のLinuxと変わらないのでデバッグやファイル操作などを行うことができます。
前提
- Linux or Mac
-
cf
CLIが導入されている -
$HOME/.ssh/
にSSH認証鍵がある
コマンドのインストール
以下からcf-ssh
のバイナリをダウンロードします。
Releases · cloudfoundry-community/cf-ssh
https://github.com/cloudfoundry-community/cf-ssh/releases
ダウンロードしたファイルをcf-ssh
にリネームして実行権限を付加します。
そして、このファイルをPATHの通っている場所に配置します。
mv cf-ssh_linux_amd64 cf-ssh
chmod +x cf-ssh
mv cf-ssh /usr/bin
使い方
cf-ssh
コマンドを使うには、manifest.yml
を用意しておく必要があります。
cd APPNAME
cf-ssh APPNAME -f manifest.yml
コマンドを実行するとAPPNAME-ssh
という名前のアプリがデプロイされます。
この状態ではルートがバインドされていないため、アプリの動作を確認するためには主導で別途ルートを設定する必要があります。
注意事項
コンテナから一度ログアウトするとそのコンテナには入れなくなるようです。
再度コンテナに入るにはアプリをデプロイし直す必要があります。
トラブルシューティング
Permission denied (Publickey)
認証鍵がない場合にこのエラーが発生します。
ssh-keygen
コマンドを使って鍵ファイルを作成しておきます。
私の環境では、$HOME/.ssh/
に認証鍵をおいておけば認識されました。
cf-download plugin
Cloud Foundryで稼働しているアプリケーションのファイルをローカルにコピーします。
cf
CLIのプラグインとして動作します。
前提
-
cf
CLI(バージョン6.10以上)が導入されている
プラグインのインストール
以下のにコマンドを実行するとcf download
コマンドが使用可能になります。
cf add-plugin-repo CF-Community http://plugins.cloudfoundry.org/
cf install-plugin cf-download -r CF-Community
使い方
アプリのディレクトリ構造が以下の通りだったとします。
app
├ src/
├ log/
│ ├ access.log
│ └ error.log
└ lib/
このアプリに対して、以下のコマンドを実行するとカレントディレクトリに対象ディレクトリとその親ディレクトがコピーされます。
cf download APPNAME log
今回の場合は、以下の構造でダウンロードされます。
APPNAME-download
└ log/
├ access.log
└ error.log
注意事項
ダウンロードするパスを指定しないとすべてのファイルがダウンロードされます。
例えばJavaの場合、.java
ディレクトリに含まれるファイルも含まれているため、パスを指定して必要なファイルのみをダウンロードしないと時間がかかります。
まとめ
Cloud Foundryにアプリをプッシュしたけどうまく動かず、cf logs
してもエラーログが確認できないといった場合のデバッグ用途にはcf-ssh
は便利かと思います。
cf download
はコマンドをバッチで定期的に実行するなどして、ログを外部に保存する簡易な仕組みを構築するのに向いているのではないかと思います。
参考情報
cf-sshでCloud Foundryのコンテナ内に潜り込む - Cloud Penguins
http://jaco.udcp.info/cf-ssh/
cloudfoundry-community/cf-ssh
https://github.com/cloudfoundry-community/cf-ssh
ibmjstart/cf-download
https://github.com/ibmjstart/cf-download