先月(11月)の話ですが、 Cloud Foundry on Azure が GA しました。
で、実際どんなものかなーと試してみました。理由は Azure 上で Managed な PostgreSQL や MySQL サーバーが欲しかったからです。(MySQL は ClearDB があるけども、あまり好きでは無い)
前提
組織アカウント
組織アカウント(*.onmicrosoft.com, o365 business等) が必要です。2つの方法があります
- 組織アカウントを新規作成する。作り方は No.1 の記事がわかりやすいで、そっちを見ましょう。
- 組織アカウントだけでAzureにサインアップする | ブチザッキ
- クレジットカード、電話番号が必須。
- 30日約2万の無料サブスクリプション付
- コア数がリージョンで4つに制限されているので別途サポートに制限解除の連絡が必須
- 新しく組織アカウントを作って既存のサブスクリプションの共同管理者(co-owner)とする
- 安納さんの記事がわかりやすいです。Blogs - Technical Evangelist - Junichi Anno's blog - Site Home - TechNet Blogs
- D1 のVMを最大で10個近く起動するので、サブスクリプションがオーバーしないように気をつけて下さい。
- コア数は自分の場合は20になってたので足りなくなることは無さそう。
Azure CLI
- 組織アカウントでログインしてテナントを作成するのに必要です。
- Mac、Linux、Windows 用の Azure CLI
手順
GA した blog には書いていなくて、プレビューで試せるようになった blog に書いてあります。
この中に書いてある、次のGithubのページに書いてある手順を実施します。(中々たどり着くまで時間かかった)
順番に試していきます。
Deploy BOSH using ARM templates (RECOMMENDED) の実施
bosh-azure-cpi-release/deploy-bosh-using-arm-templates.md at master · cloudfoundry-incubator/bosh-azure-cpi-release · GitHub を順番に実施していきます。
Azure CLI で 組織アカウント にログインする
Create a Service Principal - Azure CLI を参照しながら進めます。
基本的に記事通り進めれば問題ありませんが、azure account list --json
をした結果、 tenantId
が必須となります。 microsoft アカウントですと、これが無いので組織アカウントが必須となっています。次のような結果であれば問題ありません。
{ "id": "87654321-1234-5678-1234-678912345678", "name": "無料試用版", "user": { "name": "nnasaki@ncloudfoundry.onmicrosoft.com", "type": "user" }, "tenantId": "22222222-1234-5678-1234-678912345678", "isDefault": true, "registeredProviders": [], "environmentName": "AzureCloud" }
ここでの出力結果を今後使うのでメモっておきます。
- SUBSCRIPTION-ID
- id
- 87654321-1234-5678-1234-678912345678
- TENANT-ID
- tenantId
- 22222222-1234-5678-1234-678912345678
azure cli のアカウント設定を SUBSCRIPTION-ID に合わせる
azure account set 87654321-1234-5678-1234-678912345678
AD App を作る
azure ad app create --name "Service Principal for BOSH" --password "password" --home-page "http://BOSHAzureCPI" --identifier-uris "http://BOSHAzureCPI"
このとき、 home-page
と identifier-uris
は適当でかまいません。次のようなアウトプットがされます。 Application Id は CLIENT-ID として使うのでメモっておきます。
- CLIENT-ID
- Application Id
- 246e4af7-75b5-494a-89b5-363addb9f0fa
info: Executing command ad app create + Creating application Service Principal for BOSH data: Application Id: 246e4af7-75b5-494a-89b5-363addb9f0fa data: Application Object Id: a4f0d442-af80-4d98-9cba-6bf1459ad1ea data: Application Permissions: data: claimValue: user_impersonation data: description: Allow the application to access Service Principal for BOSH on behalf of the signed-in user. data: directAccessGrantTypes: data: displayName: Access Service Principal for BOSH data: impersonationAccessGrantTypes: impersonated=User, impersonator=Application data: isDisabled: data: origin: Application data: permissionId: 1a1eb6d1-26ca-47de-abdb-365f54560e55 data: resourceScopeType: Personal data: userConsentDescription: Allow the applicationto access Service Principal for BOSH on your behalf. data: userConsentDisplayName: Access Service Principal for BOSH data: lang: info: ad app create command OK
Service Principal を作成する
さきほどメモっておいた CLIENT-ID を使います。
azure ad sp create 246e4af7-75b5-494a-89b5-363addb9f0fa
Role をアサインする
azure role assignment create --spn "http://BOSHAzureCPI" -o "Contributor" --subscription 87654321-1234-5678-1234-678912345678
ログイン出来るか確かめる
メモっておいた CLIENT-ID, CLIENT-SECRET, TENANT-ID を使います。
azure login -u 246e4af7-75b5-494a-89b5-363addb9f0fa -p "password" --service-principal --tenant 22222222-1234-5678-1234-678912345678
ARM で BOSH と Cloud Foundry 環境を作る
環境作りはボタンを押すだけです。
先ほどメモっておいた CLIENT-ID, CLIENT-SECRET, TENANT-ID を設定に記載します。
BOSH のセットアップ
ARM で作った VM に ssh で繋いで、シェルを実行するだけです。
./deploy_bosh.sh
デフォルトの D1 な仮想マシンで1時間近くかかった感じです。外出先で行う場合は nohup
*1 でやったほうが良いでしょう。
ログを貼っておきます。
nnasaki@ncloudfoundry:~$ ./deploy_bosh.sh Deployment manifest: '/home/nnasaki/bosh.yml' Deployment state: '/home/nnasaki/bosh-state.json' Started validating Downloading release 'bosh'... Finished (00:07:40) Validating release 'bosh'... Finished (00:00:03) Downloading release 'bosh-azure-cpi'... Finished (00:02:11) Validating release 'bosh-azure-cpi'... Finished (00:00:00) Validating cpi release... Finished (00:00:00) Validating deployment manifest... Finished (00:00:00) Downloading stemcell... Finished (00:25:29) Validating stemcell... Finished (00:00:08) Finished validating (00:35:35) Started installing CPI Compiling package 'ruby_azure_cpi/3db71123fb72f5ec81955710b2e89e2cbbd8aca0'... Finished (00:02:58) Compiling package 'bosh_azure_cpi/5985e1e82c78fadb5f2c951f319012403ee04fd8'... Finished (00:01:57) Installing packages... Finished (00:00:02) Rendering job templates... Finished (00:00:00) Installing job 'cpi'... Finished (00:00:00) Finished installing CPI (00:05:00) Starting registry... Finished (00:00:00) Uploading stemcell 'bosh-azure-hyperv-ubuntu-trusty-go_agent/0000'... Finished (00:20:32) Started deploying Creating VM for instance 'bosh/0' from stemcell 'bosh-stemcell-3e37d680-42ae-439a-95a0-afde20eda292'... Finished (00:02:48) Waiting for the agent on VM 'ncloudfoundry-3dc3d1d1-327f-4ce5-740e-aee6b5710c75' to be ready... Finished (00:01:56) Creating disk... Finished (00:00:05) Attaching disk 'bosh-data-ncloudfoundry-a0df5077-c8c2-4427-877f-7b855481c4b7-None' to VM 'ncloudfoundry-3dc3d1d1-327f-4ce5-740e-aee6b5710c75'... Finished (00:01:15) Rendering job templates... Finished (00:00:04) Compiling package 'mysql/ZTUzMDlhZWQ4OGY1Y2M2NjJiYzc3OTg4YTMxODc0NDYxZjdjNGZiOA=='... Finished (00:00:19) Compiling package 'ruby_azure_cpi/3db71123fb72f5ec81955710b2e89e2cbbd8aca0'... Finished (00:02:55) Compiling package 'nginx/MWQzNTZiYmQxN2VkOGMzNDlmZDEwNTMwOTMyMjJkNzg1NTk2ODdlYw=='... Finished (00:00:55) Compiling package 'libpq/OTJjOTQ0NGIwNzM2ZTQ2ZTM0MjJkZjFkNjM3MzlkOGFkMjNkYmJhZQ=='... Finished (00:00:29) Compiling package 'genisoimage/MDA4ZDMzMmJhMTQ3MWJjY2Y5ZDlhZWI2NGMyNThmZGQ0YmY3NjIwMQ=='... Finished (00:00:24) Compiling package 'ruby/MDMwZTNkNGVhZmQwMGIxMGJiZmE4NzliY2Y0NGZiYTYyMTM5MjA1ZQ=='... Finished (00:02:31) Compiling package 'postgres/YWE3ZjViMTEwZThiMzY4ZWViOGY1ZGQwMzJlMWNhYjY2ZDg2MTRjZQ=='... Finished (00:00:11) Compiling package 'redis/MzdlYWU1MzA4ODljYjllZjRlODRmOWMzZDA4MjdiYWI1YWU1Y2I2Ng=='... Finished (00:00:51) Compiling package 'nats/NmEzMWM3YmIwZDVmZmEyYTlmNDNjN2ZkNzE5MzE5MzQzOGUyMGU5Mg=='... Finished (00:00:14) Compiling package 'bosh_azure_cpi/5985e1e82c78fadb5f2c951f319012403ee04fd8'... Finished (00:01:55) Compiling package 'health_monitor/M2JjOTVhNGIwY2E0OTcyZDJlZWNhN2I2NjViYTc4MzFkOTA0MGMzOA=='... Finished (00:01:31) Compiling package 'director/MjkzNDMyYmZiNzUxZWFmMThiYjE5YmFhMjBmNDZlMjQwMjcwNTkxMg=='... Finished (00:02:20) Compiling package 'registry/YTU1NjMwYmM0MmU2NjNmODc5NTlhMzA1NzdlOGE4ZTM4ODQyMWZkNw=='... Finished (00:01:48) Updating instance 'bosh/0'... Finished (00:00:41) Waiting for instance 'bosh/0' to be running... Finished (00:00:49) Finished deploying (00:24:11) Stopping registry... Finished (00:00:00) Cleaning up rendered CPI jobs... Finished (00:00:00)
Cloud Foundry のデプロイ
BOSH のセットアップが終わったので、次は Cloud Foundry をデプロイします。
サンプルをダウンロードする
VMのシングルとマルチがありますが、シングルをダウンロードします。このサンプル中のBOSH-DIRECTOR-UUID, VNET-NAME, SUBNET-NAME, RESERVED-IP, SSL-CERT-AND-KEY を置換する必要があります。
BOSH-DIRECTOR-UUID を置換する
VM上で、 bosh target 10.0.0.4
を実行します。IDとパスワードは admin
です。次に bosh status
を実行して、 UUID
をメモしておきます。
VNET-NAME を置換する
Azure上のVNETと同じ名前を入れておきます。デフォルトは boshvnet-crp
です。
SUBNET-NAME を置換する
Azure上のSUBNETと同じ名前を入れておきます。デフォルトは Bosh
です。
RESERVED-IP を置換する
~/settings
の cf-ip
に記載されています。
SSL-CERT-AND-KEY を置換する
次のコマンドを実行します。
openssl genrsa -out bosh.key 2048 openssl req -new -x509 -days 365 -key bosh.key -out bosh_cert.pem
その結果の、 bosh_cert.pem
, bosh.key
をつなげて SSL-CERT-AND-KEY に記載します。こんなかんじです
ha_proxy: ssl_pem: | -----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAJWo1rwt2B2IMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQwHhcNMTUxMTAxMTAyODA5WhcNMTYxMDMxMTAyODA5WjBF MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAzmgXmtJRjOP3Rj1Btu0TKdez/nymTVb4ecsXV/jlCZLcOQgm/rPtTShM Ai0tmRbjRCNxdYteOJIB6RiUe8dhv8r4LQ/GrFQboykeFnh0KNoNwb3FolKqEbvQ B+nbgFo7AEnK7yR/+Cu7rjl4lIHwp34/tFoT5ox5f3MYX259Zjxn2Rke2QG480G1 wfRVg1RxcbQAglsWMQKhmia4Lzo3aA6rI1Y+/dcsej/0WG3KGRz3QP03D6Efyq1L LcDrE5+uMxPqTeTIgVuzRedyUWPM/PNnIxQwYyk4ETX+OKJcEjQZbYzJ9cxm/r+b acIgV8QAv5bUY2CGC6KMsOsjLMR6/wIDAQABo1AwTjAdBgNVHQ4EFgQUuPydhm2c GDtbsQ+i4JBkLSrVcmgwHwYDVR0jBBgwFoAUuPydhm2cGDtbsQ+i4JBkLSrVcmgw DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAL3gMHbLJI+znjAUZswR0 u/+YohEjujYa5Y69Z+xuv3N+CJgYBM38j7yJsica3SzAgRYwl6+04Xox++V82CB/ yYM7xJsxu5q3fYfnQQB8XY0TNWG7QZdvhOIG1mTjCe04x80XjHDgKsCAdyvvTiTc YFyy4VS1MlhPe2e6i/+wXdKj5Qn0COu6Ih536uTyo0TTljMZGuYPw21QE0Qo2y+3 EJvv+bN+XPrZzELl6p0FymgJV8mFkYOqXD5C5d1vYzmjBSwdjNNXBXRovoEjoJ9R LDYGT94+X4UkI3asd6fn4eg9iuaUNC+WxsSnKa9z5qLgyMSF7GsZqKjGcoQjuiDj AQ== -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAzmgXmtJRjOP3Rj1Btu0TKdez/nymTVb4ecsXV/jlCZLcOQgm /rPtTShMAi0tmRbjRCNxdYteOJIB6RiUe8dhv8r4LQ/GrFQboykeFnh0KNoNwb3F olKqEbvQB+nbgFo7AEnK7yR/+Cu7rjl4lIHwp34/tFoT5ox5f3MYX259Zjxn2Rke 2QG480G1wfRVg1RxcbQAglsWMQKhmia4Lzo3aA6rI1Y+/dcsej/0WG3KGRz3QP03 D6Efyq1LLcDrE5+uMxPqTeTIgVuzRedyUWPM/PNnIxQwYyk4ETX+OKJcEjQZbYzJ 9cxm/r+bacIgV8QAv5bUY2CGC6KMsOsjLMR6/wIDAQABAoIBAGAXGZYb/5clscJj ViqA6AD8yHDbOtiaeobIw49S8d2pHxj18KF2xiy7a9c/jRDOFPNtxK5COZUAdB8+ MDIHujv9k9f2ljk31r34sGcpoHo8OVdOr6lH7qDe3JQyjNuOJhWWRQFb7q9sPK15 V+dbLtvq7GFb5hPYpd9th5U17O8grWR6yOwhfEIJNSq/bbAhKc4cMRFGCeV+DRAR LMzdjRsfYWfMoHeOFeuBcSgV21wfjg0sCViQ2TN/tVp9bcr/bmzbje60jgnNdnzT VD7e/m0xNisZ0VMzBGPiKueyM1f0jOCNAu27KxeeSwsQNq5C07sxopp1iwWbmJlP Mk8ymCECgYEA92LcQNDcRYtGVd3xbGs3AKmcLgEeXrreVticqsnLJ0zmj7DBVTXw rI8MNGI2nnme+dhnr6sozAoKukE3jJaRvl94AwzeLNDHojZh6mhREXDPCSs2Gd3U iLeOJmmySW3p8woeyJXbBGOT29II9jSOYQTWxiM2+MCx1AOYHjoX/OkCgYEA1Zfz OAXPbRmzhfwavIbMQLWEHpRO7nD07ifE+zRyLzraRU6nCOzy9LQubLJPPVPZzKK/ ZOKHt7ddM5WRo9NZz2+keNSQSw1d6SKjG4SPH0LG4iLCx/VpKWTG6l6k7xBc1mHe tqhnc7u7X+1qT5+Hs6YY/6q0wgKbfK0OuOh/J6cCfy1q+QTtU4NxDni1Rp2hEXgN q57GlczOggNvwVOZuLJ+a9X1nYkHXihQGu2DGoP90DIOiPq3ccYEEfQgBRLKkfdh j6b/tcqEiiI92bwvarLJAzmrtUMKdvqiuHZU8WaJx2nXcc9hs9QadArnhL2u6HTn bobx8CW7OuqxvjvObpkCgYEAnPGAskp6poS7B5k9oAdAL8/wW3PIJ6XyIsgwEhDw Ucnhtglb7NAGmU2HyzCdzsc9AwMWtS9KX/Co2A1vrTvQAv7akDpIKA2TUomz5bVa YLL1ZhX6n2iws8yr6GxQrqSMQq45Mme9VCm+PXc6pXToBlXmin3JQcEetNaIOdAE FoMCgYEAgB+qAAfoX1e7DOkqHHr4SJERzN3MQ7NlnaNf5K7FNzFBdNSrKbe20YQR MzSpkc9piBnf9REsmfwh/8GlDoJhZtwETEf2EtUeLPuywnyy2rFRB9yMNo9RdBYa EJz7EDFRyM34vKPVktA73suJQ1kzYX1ITUICPbuYObSF8vw5BTk= -----END RSA PRIVATE KEY-----
cf_224.yml を保存する
VMの ~
ホームディレクトリに保存します。
stemcell をストレージにアップロードする
VM のカレントにある bosh.yml に stemcell: url: があるので、それを次のコマンドのSTEMCELL-FOR-AZURE-URL に置換する。
bosh upload stemcell STEMCELL-FOR-AZURE-URL
Cloud Foundry release v224 をアップロードする
bosh upload release https://bosh.io/d/github.com/cloudfoundry/cf-release?v=224
Deploy コマンドの実行
bosh deployment cf_224.yml bosh deploy
これも1時間ぐらい時間かかりますので気長に待ちます。何回か失敗してしまい、トライし直してますが、成功するとこんなログが出ます。
nnasaki@ncloudfoundry:~$ bosh deploy Acting as user 'admin' on deployment 'cf-azure' on 'bosh' Getting deployment properties from director... Please review all changes carefully Deploying --------- Are you sure you want to deploy? (type 'yes' to continue): yes Director task 5 Started unknown Started unknown > Binding deployment. Done (00:00:00) Started preparing deployment Started preparing deployment > Binding releases. Done (00:00:00) Started preparing deployment > Binding existing deployment. Done (00:00:00) Started preparing deployment > Binding resource pools. Done (00:00:00) Started preparing deployment > Binding stemcells. Done (00:00:00) Started preparing deployment > Binding templates. Done (00:00:00) Started preparing deployment > Binding properties. Done (00:00:00) Started preparing deployment > Binding unallocated VMs. Done (00:00:00) Started preparing deployment > Binding instance networks. Done (00:00:00) Started preparing package compilation > Finding packages to compile. Done (00:00:00) Started preparing dns > Binding DNS. Done (00:00:00) Started creating bound missing vms > resource_z1/0. Done (00:03:03) Started binding instance vms > cf_z1/0. Done (00:00:01) Started preparing configuration > Binding configuration. Done (00:00:01) Started updating job cf_z1 > cf_z1/0 (canary). Done (00:40:53) Task 5 done Started 2015-12-11 05:13:50 UTC Finished 2015-12-11 05:57:49 UTC Duration 00:43:59 Deployed `cf-azure' to `bosh'
VMの数
いろいろビルドとかしているとVMが6個ぐらい立ち上がって、ビルド終わると消えていきます。見てて面白いですが、コア数が足りなくなってDeploy時にエラーになりました。
ARM を使用しており、無料評価版だとリージョン当たりのコア数が4つしかないので、エラーになります。試す場合はサポートに相談してコア数を上げてもらう必要があるのでご注意下さい。
通常はBOSH用、Director用、Cloud Foundry用で3つ起動しているようです。が、なんか2つにも収められるようで、Cloud Foundry力が足りないと感じました。
Azure Portal のリソース一覧を貼っておきます。
まとめ
疲れたー。
慣れるとコマンドを実行してからの待ち時間が長いと感じました。手で置換している部分が自動化できると良いんですけどね。
次になにをするべきか?
やりたかったことは、PostgreSQL や MySQL をつくって、Spring Boot な Java アプリケーションをデプロイすることですが、そこまでたどり着けませんでした。Getting Started with the cf CLI | Cloud Foundry Docs を見て、 cf コマンドを実行するも API endpoint
ってどこ? って感じです。
圧倒的に Cloud Foundry 力が不足しているのでどなたか教えて欲しいです。。。