IK.AM

@making's tech note


PCF DevでAWSに簡易Cloud Foundry環境を作る

🗃 {Service/PaaS/CloudFoundry}
🏷 Cloud Foundry 🏷 PCF Dev 🏷 Pivotal Cloud Foundry 🏷 AWS 
🗓 Updated at 2016-06-04T09:00:33Z  🗓 Created at 2016-06-04T08:33:38Z   🌎 English Page

vagrant upでお手軽にローカルCloud Foundry環境を作れるPCF Devですが、Vagrant AWS Pluginを使えばAWS上にデプロイすることもできます。

EC2 1インスタンスで済むので、「ラップトップに入れるのは重いし、みんなで使えるちょっとした検証用Cloud Foundryを用意したい」という場合に便利です。Dockerイメージのpushにも対応しています。

なお、PCF Devをラップトップにインストールする方法はこちらを参照してください。

本記事で検証したPCF Devのバージョンは0.15.0で、Vagarntのバージョンは次の通りです。

$ vagrant --version
Vagrant 1.8.1
$ vagrant plugin list
vagrant-aws (0.7.0)
vagrant-share (1.1.5, system)

Vagrant AWS Pluginは以下でインストールできます。

$ vagrant plugin install vagrant-aws

セットアップ方法

PCF DevはPivotal Networkからダウンロードできます。(下図はv0.13ですが読み替えてください)

スクリーンショット 0028-04-05 7.33.45.png

ダウンロードするにはPivotal Networkにログインする必要があります。こちらからアカウントを作成してください。

image

ダウンロードしたpcfdev-v0.15.0.zipを展開してください。

$ unzip pcfdev-v0.15.0.zip
$ cd pcfdev-v0.15.0
$ ls -l
total 64
-rw-r--r--@ 1 makit  720748206  4448  4 30 05:18 Vagrantfile
-rwxr-xr-x@ 1 makit  720748206   129  4 29 08:11 destroy-osx
-rw-r--r--@ 1 makit  720748206   122  4 29 08:11 destroy-windows.ps1
-rwxr-xr-x@ 1 makit  720748206  1903  4 29 08:11 start-osx
-rw-r--r--@ 1 makit  720748206  2372  4 29 08:11 start-windows.ps1
-rwxr-xr-x@ 1 makit  720748206   123  4 29 08:11 stop-osx
-rw-r--r--@ 1 makit  720748206   116  4 29 08:11 stop-windows.ps1

AWSの設定のための環境変数を定義する必要があります。以下のaws.shに作成します。

export AWS_ACCESS_KEY_ID=<Access Key ID>
export AWS_SECRET_ACCESS_KEY=<Secret Access Key>
export AWS_SSH_PRIVATE_KEY_NAME=<Keypair名>
export AWS_SSH_PRIVATE_KEY_PATH=<Keypairのpemファイルのパス>
export AWS_REGION=ap-northeast-1

適用します。

$ source aws.sh

あとはvagrant up --provider=awsするだけ。簡単ですね! 注意点は、デフォルトではDefault VPCとDefault Security Groupが使われる点です。SSH, HTTP, HTTPSのポートは空けておいてください。

$ vagrant up --provider=aws
Bringing machine 'default' up with 'aws' provider...
==> default: Checking if box 'pcfdev/pcfdev' is up to date...
/Users/makit/.vagrant.d/gems/gems/vagrant-aws-0.7.0/lib/vagrant-aws/action/run_instance.rb:98: warning: duplicated key at line 100 ignored: :associate_public_ip
==> default: Warning! The AWS provider doesn't support any of the Vagrant
==> default: high-level network configurations (`config.vm.network`). They
==> default: will be silently ignored.
==> default: Launching an instance with the following settings...
==> default:  -- Type: m4.xlarge
==> default:  -- AMI: ami-e8aab286
==> default:  -- Region: ap-northeast-1
==> default:  -- Keypair: pcf-dev
==> default:  -- Block Device Mapping: [{"DeviceName"=>"/dev/sda1", "Ebs.VolumeSize"=>100, "Ebs.DeleteOnTermination"=>true, "Ebs.VolumeType"=>"gp2"}]
==> default:  -- Terminate On Shutdown: false
==> default:  -- Monitoring: false
==> default:  -- EBS optimized: true
==> default:  -- Source Destination check: 
==> default:  -- Assigning a public IP address in a VPC: false
==> default:  -- VPC tenancy specification: default
==> default: Waiting for instance to become "ready"...
==> default: Waiting for SSH to become available...
==> default: Machine is booted and ready for use!
==> default: Running provisioner: shell...
    default: Running: inline script
==> default: stdin: is not a tty
==> default: Waiting for services to start...
==> default: 0 out of 48 running
==> default: 0 out of 48 running
==> default: 0 out of 48 running
==> default: 0 out of 48 running
==> default: 0 out of 48 running
==> default: 6 out of 48 running
==> default: 48 out of 48 running
==> default: PCF Dev is now running.
==> default: To begin using PCF Dev, please run:
==> default: 	cf login -a api.54.199.232.125.xip.io --skip-ssl-validation
==> default: Email: admin
==> default: Password: admin

あとはcfコマンドを使用して、

$ cf login -a api.54.199.232.125.xip.io --skip-ssl-validation
API エンドポイント: api.54.199.232.125.xip.io

Email> admin

Password> 
認証中です...
OK

組織 pcfdev-org をターゲットにしました

スペース pcfdev-space をターゲットにしました


                      
API エンドポイント:   https://api.54.199.232.125.xip.io (API バージョン: 2.54.0)
ユーザー:             admin
組織:                 pcfdev-org
スペース:             pcfdev-space

インスタンスタイプはm4.xlargeVagrantfileに指定されています。変更したい場合はVagrantfileを修正してください。使い方次第ですが、メモリ8GB以上、できれば16GBはあった方が良いです。(最小は3GBです。使ったことないけど)

もしDefault VPCを削除してしまっていたら、VCPの情報をVagrantfileに設定する必要があります。

    aws.security_groups=["sg-xxxxxxxx"]
    aws.associate_public_ip=true
    aws.subnet_id = "subnet-xxxxxxxx"

アプリケーションのデプロイ

GolangのHello Worldアプリgit cloneしてcf pushします。初回は各種buildpackのダウンロードがあったりして少し時間がかかります。

$ git clone https://github.com/cloudfoundry-community/simple-go-web-app.git
$ cd simple-go-web-app
$ cf push
マニフェスト・ファイル /Users/makit/git/simple-go-web-app/manifest.yml を使用しています

admin としてアプリ simple-go-web-app を組織 pcfdev-org / スペース pcfdev-space 内に作成しています...
OK

経路 simple-go-web-app.54.199.232.125.xip.io を作成しています...
OK

simple-go-web-app.54.199.232.125.xip.io を simple-go-web-app にバインドしています...
OK

simple-go-web-app をアップロードしています...
次のパスからアプリ・ファイルをアップロードしています: /Users/makit/pcf-install/simple-go-web-app
229.5K、47 個のファイルをアップロードしています
Done uploading               
OK


admin として組織 pcfdev-org / スペース pcfdev-space 内のアプリ simple-go-web-app を開始しています...
Downloading binary_buildpack...
Downloading php_buildpack...
Downloading ruby_buildpack...
Downloading python_buildpack...
Downloading java_buildpack...
Downloading go_buildpack...
Downloading nodejs_buildpack...
Downloading staticfile_buildpack...
Downloaded staticfile_buildpack (2.5M)
Downloaded nodejs_buildpack (60.7M)
Downloaded ruby_buildpack (247.7M)
Downloaded java_buildpack (241.6M)
Downloaded php_buildpack (262.3M)
Downloaded binary_buildpack (8.3K)
Downloaded go_buildpack (450.3M)
Downloaded python_buildpack (254.1M)
Creating container
Successfully created container
Downloading app package...
Downloaded app package (89.4K)
Staging...
-------> Buildpack version 1.7.5
file:///tmp/buildpacks/3736f0a4294fc2936232b7ee45c02e70/dependencies/https___pivotal-buildpacks.s3.amazonaws.com_concourse-binaries_godep_godep-v62-linux-x64.tgz
-----> Checking Godeps/Godeps.json file.
-----> Installing go1.5.4... done
Downloaded [file:///tmp/buildpacks/3736f0a4294fc2936232b7ee45c02e70/dependencies/https___storage.googleapis.com_golang_go1.5.4.linux-amd64.tar.gz]
-----> Running: godep go install -tags cloudfoundry ./...
Exit status 0
Staging complete
Uploading droplet, build artifacts cache...
Uploading build artifacts cache...
Uploading droplet...
Uploaded build artifacts cache (77.1M)
Uploaded droplet (2.2M)
Uploading complete

1 個の中の 1 個のインスタンスが実行中です

アプリが開始されました


OK

アプリ simple-go-web-app はコマンド `simple-go-web-app` を使用して開始されました

admin として組織 pcfdev-org / スペース pcfdev-space 内のアプリ simple-go-web-app の正常性と状況を表示しています...
OK

要求された状態: started
インスタンス: 1/1
使用: 128M x 1 インスタンス
URL: simple-go-web-app.54.199.232.125.xip.io
最終アップロード日時: Sat Jun 4 06:05:08 UTC 2016
スタック: unknown
ビルドパック: Go

     状態   開始日時                 CPU    メモリー           ディスク           詳細
#0   実行   2016-06-04 03:06:54 PM   0.0%   128M の中の 836K   512M の中の 452K

cf appsでデプロイされたアプリを確認できます。

$ cf apps
admin として組織 pcfdev-org / スペース pcfdev-space 内のアプリを取得しています...
OK

名前                要求された状態   インスタンス   メモリー   ディスク   URL
simple-go-web-app   started          1/1            128M       512M       simple-go-web-app.54.199.232.125.xip.io

アクセスするとHello Worldが表示されます。

$ curl simple-go-web-app.54.199.232.125.xip.io
Hello world

Dockerイメージのpush

PCF DevはDockerイメージにも対応しています。試しにJenkinsをpushしてみましょう。cf push -o <Dockerイメージ名>です。Jenkinsはメモリとディスクを多く使用するので、-m-kでこれらも指定しておきます。

$ cf push jenkins -o jenkins -k 2g -m 2g
admin としてアプリ jenkins を組織 pcfdev-org / スペース pcfdev-space 内に作成しています...
OK

経路 jenkins.54.199.232.125.xip.io を作成しています...
OK

jenkins.54.199.232.125.xip.io を jenkins にバインドしています...
OK



admin として組織 pcfdev-org / スペース pcfdev-space 内のアプリ jenkins を開始しています...
Creating container
Successfully created container
Staging...
Staging process started ...
Staging process finished
Exit status 0
Staging Complete

1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 1 個のインスタンスが実行中です

アプリが開始されました


OK

アプリ jenkins はコマンド `/bin/tini -- /usr/local/bin/jenkins.sh ` を使用して開始されました

admin として組織 pcfdev-org / スペース pcfdev-space 内のアプリ jenkins の正常性と状況を表示しています...
OK

要求された状態: started
インスタンス: 1/1
使用: 2G x 1 インスタンス
URL: jenkins.54.199.232.125.xip.io
最終アップロード日時: Sat Jun 4 07:04:53 UTC 2016
スタック: unknown
ビルドパック: unknown

     状態   開始日時                 CPU    メモリー         ディスク           詳細
#0   実行   2016-06-04 04:06:41 PM   0.0%   2G の中の 1.5G   2G の中の 122.8M

できました。

image

Jenkinsはローカルディスクを使うのでCFで扱うアプリとしては向いておらず、デモ用途くらいにしか使えない点に注意してください。

現時点ではHTTPしか受け付けないのとポートもひとつしかバインドできません。 次か次の次のバージョンではTCPルーティングがサポートされると思います。夢が広がりますね。

バックエンドサービスを使用する

PCF Devには初めから

  • Redis
  • MySQL
  • RabbitMQ

が用意されています。

サービスを使うチュートリアルは

http://pivotal.io/platform/pcf-tutorials/getting-started-with-pivotal-cloud-foundry-dev/introduction

がオススメです。

また、SwisscomのCloud Foundryのチュートリアルがいろいろな言語に対応していて良いと思います。 https://docs.developer.swisscom.com/getting-started/index.html

OSS版Cloud Foundry、Pivotal Cloud Foundryとの違い

https://docs.pivotal.io/pcf-dev/index.html の「Comparing PCF Dev to Pivotal Cloud Foundry」に比較が載っています。 最も大きな違い(デメリット)は可用性がない点です。1 VMで監視もされていないので、VMがダウンしたら即サービスダウンです。検証環境や遊び場として使ってください。

PCF DevにはBOSHもありません。

また現時点のPCF DevではSyslog Drainがサポートされていないため、ログをsyslogで外部ログ管理サービスに転送することができません。(次か次の次で治ると思います)

もっとCloud Foundryを学びたい

Pivotal Japanで毎月Cloud Foundryワークショップを実施しています。 http://pivotal-japan.connpass.com/ でイベント告知しているので、是非ご参加ください。直近は2016/6/14に予定しています。

資料も公開しているので、セットアップしたPCF Devで試してみてください。 https://github.com/Pivotal-Japan/cf-workshop (「ログの転送 / Forward logging」はPCF Dev未対応です)


✒️️ Edit  ⏰ History  🗑 Delete