
先月(11月)の話ですが、 Cloud Foundry on Azure が GA しました。
で、実際どんなものかなーと試してみました。理由は Azure 上で Managed な PostgreSQL や MySQL サーバーが欲しかったからです。(MySQL は ClearDB があるけども、あまり好きでは無い)
EXTENDED BODY:
前提
組織アカウント
組織アカウント(*.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