Cloud Foundry Advent Calendar 2017の2日目の記事です。
こんにちは。
私も、会社で私が所属しているチームも、貧乏です。会社自体はリッチかもしれませんが。
そんな中、日本Cloud Foundryグループ会長というパッと見立派な肩書をいただき、オープンソースソフトウェアとしてのCloud Foundryやこれを活用した様々なプロダクトやサービスの日本国内での技術紹介や普及を担うことになっております。
Cloud Foundryは、クラウドアプリケーションプラットフォームとして技術面ではすでに成熟の域に達した感があり、最近は欧米を中心に広く普及が進んでおります。しかし、クラウドをうまく活用するプラクティスは日々新たなものが出てきていますし、様々なユースケースで揉まれてもいることから、そういった知見をどんどん盛り込みつつ、Cloud Foundry自体も日々進化を続けています。
私は肩書に負けたくない。Cloud Foundryに関し、なるべく新鮮な情報を皆さまにお届けしたい。その一心で、なるべく最新のCloud Foundryをデプロイし、新しく実装された機能を試用し続けなければならないと思っております。
一方、私の手元には、AWSやらGCPやらAzureやら何やらをふんだんに使えるアカウントは残念ながらありません。しかし幸い、その代わりに会社から自由に使っていいって言ってくれている(というか、ゴミ扱いされて使うあてのない)ベアメタルマシンが大小合わせて計約50台ほどございます。また、インターネットに比較的自由にアクセス可能な回線、ルーターやスイッチなどのネットワーク機器(安物ですが)も幸い確保されています。 というわけで、そいつらを使ってOpenStackクラスタを自前で構築し、オープンソースなCloud Foundryの技術検証に使っております。
その技術検証の成果の一つが、このへんのスライドだったりします。
ただ、毎年ゴールデンウィークの電気設備定期点検による停電対応がめちゃくちゃ大変で、ディスク故障とかCMOS電池切れでブートしないマシンが毎回数台・・・(以下、愚痴につき略)
OpenStack上にCloud Foundryをデプロイするための準備手順において、まず大きな関門となるのが、Cloud FoundryをデプロイするためのツールであるBOSHのデプロイです。
BOSHのデプロイにあたっては、少なくとも
- 仮想プライベートネットワーク・サブネット・仮想ルータの作成
- SSH鍵ペアの登録
- セキュリティグループ設定
- Floating IPアドレスの確保
というOpenStack IaaS上の事前準備手順が必要です。 これを、OpenStack上にCLIまたはダッシュボードGUIを使って手動でチクチクとやることもできますが、そこは自動化大好きCloud Foundryコミュニティ、Terraformを使用したInfrastructure as Codeのテンプレートを用意してくれています。とは言え、手元の環境にはTerraformに加えてcurl、wget、gitくらいはインストールしてないといけなさそうですね。
TerraformはGo言語で書かれており、様々なOS向けにスタティックリンクされたバイナリが配布されているので、まあインストールは簡単です。
BOSHのデプロイにはBOSH CLI v2を使います。 BOSH CLI v2もGo言語で書かれており、様々なOS向けにスタティックリンクされたバイナリが配布されているので、まあインストールは簡単です。 ただし、BOSH CLI v2を使ってBOSHをデプロイするにあたっては、インストールする環境に依存して、Ruby周りをインストールするための各種パッケージもインストールする必要があります。
これはどういうことかというと、BOSHというVMのデプロイは、BOSH CLI v2からBOSH CPIというものを介してIaaS APIを叩くことによって行われるのですが、このBOSH CPIがRubyによって実装されているからなのです。
さて、そんなこんなで、BOSHのデプロイにも、なんとCloud Foundryのデプロイにも成功しました。 そんなこんながめちゃくちゃいろいろあるというのはさておき・・・
オープンソース版のCloud Foundryには、素敵なGUIなどは標準装備されていません。APIしかありません。しかたがない、ここはcurlでがんばるか・・・ というのは冗談で、ちゃんとCF CLIというものがあります。
CF CLIもご多分に漏れずGo言語で実装されており、様々なOS向けにスタティックリンクされたバイナリが配布されているので、まあインストールは簡単です。
そうなんですよねえ。 Cloud Foundryの構築・運用・利用にはいろいろ要るのです。
Terraform、BOSH CLI v2、CF CLIくらいなら、バイナリをダウンロードして解凍して/usr/local/binに置くくらいなのでまあよいのですが、問題はRuby周りのインストールのためのパッケージも必要だったりするところなのです。 Linux入りのVMとかだといろんなパッケージ入れて少々環境が汚れたとしても最悪VMごと作り直せば済む話ですが、我が愛しのMacとかを手元作業環境にした日にゃ、CFまで使えるようになってヤッターと喜んでふと振り返ると大変なことになっていたりするわけです。
そんなこともあろうかと、作っておきましたよ。 https://github.com/ozzozz/docker-cf-jumpbox https://hub.docker.com/r/ozzozz/cf-jumpbox/
DockerホストとかDocker for MacとかDocker for Windowsとかお持ちでしたら、あとはとっても簡単。
$ docker run -it --rm ozzozz/cf-jumpbox
root@2823fbf5e687:/work#
最近だと、「とりあえずサンプルのdeployment manifestをくれ」とおっしゃる皆さまにお応えして、bosh-deploymentやらcf-deploymentやらのリポジトリも登場してきており、こういうのをgit cloneしてきたうえで
$ docker run -it --rm -v $PWD:/work ozzozz/cf-jumpbox
などとすると、さらにオツだったりするわけです。
はい。ついでなのでいろいろと放り込んでおきました。
- Cloud Foundryにおける認証サーバであるUAAのクライアントCLIである
uaac
- 素敵なCIツール Concourse のCLIである
fly
- Concourseからも使えたりする秘密情報管理ツールであるVault
- BOSHやらCloud Foundryが使うRDBをBOSHからのデプロイの対象外とした場合に、RDBに論理DB作ったりユーザ作ったり権限付与したり、場合によってはテーブル覗いてみたりバックアップやリストアしたりするのに使えるかもしれない、MOONGIFTさんで最近紹介された usql
- BOSHやらCloud Foundryが使うblobstoreをBOSHからのデプロイの対象外とするが、貧乏なのでAmazonS3とか使えない我々の強い味方であるMinioのCLI
mc
- これについては後日改めてたっぷり語りたい、我らが@yudai氏がお送りする名作 gotty
というわけで、お楽しみください。