---
title: AWSにPivotal Cloud Foundry 1.7をインストール
tags: ["AWS", "Cloud Foundry", "Pivotal Cloud Foundry"]
categories: ["Dev", "PaaS", "CloudFoundry", "PCF"]
date: 2016-04-30T16:03:48Z
updated: 2016-07-13T01:39:26Z
---

Cloud Foundryの商用ディストリビューションPivotal Cloud Foundryのバージョン1.7がリリースされたのでAWSにインストールしてみます。

60日間の試用利用ができるので、AWSの利用料金だけでPivotal Cloud Foundryを使えます。

* CloudFormationでAWSの環境をセットアップ
* Ops Managerのインストール
* Elastic Runtimeのインストール

が主な手順です。Ops ManagerはCloud FoundryをインストールするためのプロビジョニングツールであるBOSHのGUIに相当します。Elastic Runtimeが所謂Cloud Foundryです。

基本的には[マニュアル](http://docs.pivotal.io/pivotalcf/customizing/cloudform.html)の通りで、
所要時間は2時間ほどです。

### 事前準備

**EC2インスタンスを20個以上作成するため、インスタンス数の上限変更を申請しておいてください。50個くらいで申請しておくと良いです。**

[EC2のKeypair](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-keypair.html)を作成してください。ここで`bosh`という名前のkeypairを作成し、`bosh.pem`というファイル名でダウンロードしたことにして説明します。

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html#create-cert
を見て、SSL証明書を作成してAWSにアップロードし、Arnを取得してください。ここではPCFに`pcf.example.com`というドメインを設定することを想定します。AWS CLIを使っています。

```
$ openssl genrsa -out pcf-private-key.pem 2048
$ echo -e "JP\nTokyo\nCity\nCompany\nSection\n*.pcf.example.com\nmaking@example.com\n\n" | openssl req -sha256 -new -key pcf-private-key.pem -out pcf-csr.pem
$ openssl x509 -req -days 365 -in pcf-csr.pem -signkey pcf-private-key.pem -out pcf-certificate.pem
$ aws iam upload-server-certificate \
--server-certificate-name myServerCertificate \
--certificate-body file://pcf-certificate.pem \
--private-key file://pcf-private-key.pem
{
    "ServerCertificateMetadata": {
        "ServerCertificateId": "XXXXXXXXXXXXXXXXXXXX", 
        "ServerCertificateName": "myServerCertificate", 
        "Expiration": "2017-02-11T01:57:00Z", 
        "Path": "/", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXXXXXXXXXX:server-certificate/myServerCertificate", 
        "UploadDate": "2016-02-12T01:58:26.692Z"
    }
}
```

Arnは

```
$ aws iam get-server-certificate --server-certificate-name myServerCertificate | jq .ServerCertificate.ServerCertificateMetadata.Arn | tr -d '"'
```
でも取得可能です。後で使用するのでメモ。



### CloudFormationでAWSの環境をセットアップ

[Pivotal Network](https://network.pivotal.io/) にサインインして

https://network.pivotal.io/products/elastic-runtime

から「PCF 1.7 CloudFormation for AWS Setup」をダウンロード。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/4f7811be-a2a8-4130-8861-52cecb1fb73f.png)

AWSのコンソールでCloudFormationのテンプレートをアップロード。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/b002f0e3-1b87-956e-dab1-a3a6e215ed85.png)



Cloud Formationのテンプレートをアップロード。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/0393143f-baed-e018-7636-2916930afdac.png)

証明書のArnを設定してください。その他の値は適当でOKです。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/908185fa-f5c8-b419-1285-f7c5644a931c.png)

Optionsは設定不要です。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/471eade3-2913-b63b-6869-21d8cfad3d2e.png)

「I acknowledge that this template ...」にチェックをいれて「Create」をクリック。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/f40e9dae-7b39-e397-71a3-e958083337f4.png)

20分くらいで完了します。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/6e07d52e-5d5b-b826-43d7-36cb5c4140e4.png)

`Outputs`タブで今後のインストールに必要な値が表示されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/f5d4c076-98dc-c255-768c-5bdcb9e57193.png)

`pcf-vpc`という名前のVPCができます。また5つのサブネットと1のNAT Gatewayができています(PCF 1.6まではNAT Instanceでした)。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/65af5701-2b3e-2978-e64f-58273baf6769.png)

VPCはこんな感じ。privateネットワークが複数のAZにできています。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/6a63c4d6-d220-f506-d384-20fb87e774b6.png)

ELBがHTTP用とSSH用にできます。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/44a0a301-6adf-7943-2432-43fb304b6ef2.png)

HTTP用のELB(`pcf-stack-pcf-elb`)のDNS nameをコピーして、DNSのCNAMEレコードに追加します。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/ccb40fb9-df31-f3d7-8dc3-4d0b25e70a70.png)

独自ドメイン(`example.com`)の管理画面で`*.pcf`のCNAMEでELBのDNS nameを追加します。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/c2aeb42a-80cf-d728-83bf-ed861b9e7c89.png)

図は[CloudFlare](https://www.cloudflare.com)の例です。


RDSもできます。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/7ef5fdfb-163c-2dfa-eab1-063b255a63cd.png)

今回は節約のためにRDSは使わず内部DBを使うことにするので、削除しておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/96cb570b-67ec-1310-bcfc-9e80cb985e7c.png)






### Ops Managerのインストール

#### Ops Managerインスタンスの作成

Ops ManagerはEC2のAMIが用意されています。[https://network.pivotal.io/products/ops-manager](https://network.pivotal.io/products/ops-manager)から「Pivotal Cloud Foundry Ops Manager for AWS」(PDF)をダウンロードして、自分のリージョンのAMI IDを確認してください。



![image](https://qiita-image-store.s3.amazonaws.com/0/1852/299f15b0-aa23-3a79-65e9-17944bf46c2a.png)

バージョンによってAMI IDが異なる場合があるので必ずPDFからAMI IDを確認してください。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/d3104fd8-e05f-df09-883c-f43214882b52.png)

EC2のコンソールから「AMIs」の「Public Images」にAMI IDを入力して、

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/4ef78755-f57b-ee22-0bbe-024658e15924.png)

「Launch」してください。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/23816bfd-56e1-ae49-1fb2-92147a1a2804.png)

`m3.large`を選択して「Next: Configure Instance Details」をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/a5069f8a-6c64-15a7-23f1-96be71a88167.png)

* Networkは`pcf-vpc`
* Subnetは`pcf-public-subnet`
* Auto-assign Public IPは`Enable`

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/9a7ed11a-dd2d-af70-a383-af600201d9d4.png)

ストレージは100GB以上

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/6e42a091-5d92-ae18-5f93-a140cd58b8f1.png)

`Name`タグに`Ops Manager`を設定

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/e144955c-5f43-c5fb-5134-f1d6baf5e893.png)

セキュリティグループはDescriptionが`Ops Manager Security Group`のもの

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/b60f78bc-e2f0-b690-5970-2261afc5c8ae.png)

「Choose an existing key pair」で`bosh`を選択し、「Launch Instances」

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/f7130bd6-bbda-8520-1db4-98f069d703b8.png)

しばらくするとOps ManagerのEC2インスタンスができています。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/b8a2deed-bdae-5890-b593-909d9688afae.png)

Public IPがアサインされているので、ブラウザでアクセスします。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/855cd0c5-e6d2-edc8-bbfb-2887460d81e0.png)

「Internal Authentication」をクリック。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/6b1324b3-b81c-9470-1c83-86f38e35d44d.png)

アカウント情報を入力して、「Setup Authentication」をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/dbeec766-51c7-0a81-9cde-20bf73e3d0d4.png)

しばらく待つとログイン画面ができるので、作成したアカウントでログイン。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/15bc2c99-352f-fcfa-7b07-eb06b7ab95a1.png)

ログインできればOps Managerが利用可能です。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/4a94a580-2ab4-827d-3db6-95e4759a205e.png)

#### Ops Manager Directorの設定

Ops ManagerはBOSH ClientのGUIに相当します。次にこのBOSH ClientとやりとりするBOSH Director(PCFではOps Manager Directorと呼ばれる)をインストールします。`bosh-init`に相当します。

Ops Manager Directorのタイルをクリックして設定画面に移動します。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/7e31ea4b-4344-bc22-6912-a27d223c0c23.png)

##### AWS Config

AWSの情報を設定します。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/2dd637cc-4eae-57de-4fc3-4b4c38590d02.png)


* Access Key IDはCloud FormationのOutputsタブの`PcfIamUserAccessKey`
* Access Secret KeyはCloud FormationのOutputsタブの`PcfIamUserSecretAccessKey`
* VPC IDはCloud FormationのOutputsタブの`PcfVpc`

を設定します。Security Group IDはVPCのセキュリティグループ一覧をみて、DescriptionがPCF VMs Security Groupのものを選びます。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/191567e4-539d-e1f6-1344-aa96be2dab0c.png)

AWSのKey Pair名とそのpemファイルの内容をKey Pair NameとSSH Private Keyに設定します。
Regionを選択して「Save」をクリック。

##### Director Config

Ops Manager Directorの設定をします。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/76b810c6-00fd-b528-f5cc-de733779d1ef.png)

NTP Serversには以下の値を設定。

`0.amazon.pool.ntp.org,1.amazon.pool.ntp.org,2.amazon.pool.ntp.org,3.amazon.pool.ntp.org`

「Enable VM Resurrector Plugin」と「Recreate all VMs」にチェックを入れてください。

今回は簡易インストールとしてBlobstoreとDatabaseはInternalなものを使うので設定不要です。
(本番環境ではS3、RDSを使った方が良いです)

以上で「Save」をクリック。

##### Create Availability Zones

Availability Zoneの設定

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/bb07f6d6-6608-dd5f-3e43-33ce32354ad8.png)

「Add」をクリックしてCloud FormationのOutputsタブの`PcfPrivateSubnetAvailabilityZone`の値を設定して「Save」をクリック。


##### Create Networks

ネットワークの設定

「Add Network」をクリックして、Privateサブネットの情報を入力。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/5d95d0d9-8083-808b-684a-da8bbec2ae4f.png)

VPCのサブネット一覧で`pcf-private-subnet`を確認して、Subnet ID、CIDR、Availability Zoneを入力。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/4882ae97-b3a2-6958-631a-c04a9805872f.png)

CIDRが`10.0.16.0/20`の場合、

* Reserverd IP Rangesは`10.0.16.1-10.0.16.9`
* Gatewayは`10.0.16.1`
* DNSは`10.0.0.2` (`10.0.16.2`ではない)

> Multi-AZ対応するには「Create Availability Zones」で`ap-northeast-1c`を追加して、「Create Networks」の`net1`にて「Add Subnet」をクリックし、`pcf-private-subnet2`の情報を追加すればOKです

「Save」をクリック。


##### Assign AZs and Networks

これまで設定してきたものを選択

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/6b0741c9-6b48-75ac-018a-c94616dff1a4.png)

> 複数のAZを作った場合はOps Manager Directorと同じAZを選択

「Save」をクリック。


Ops ManagerにTopに戻るとタイルの設定が完了したので緑色になっていることがわかります。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/046b98de-a479-5399-4271-5d2d92e295a0.png)

「Apply Changes」をクリックするとインストール(`bosh-init deploy`)が始まります。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/b0178101-5f51-7005-e579-e9556db79e68.png)


15分くらいでインストールが完了します。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/3a4e0a1d-1346-41d7-8bd3-7101a0195750.png)

`bosh/0`というEC2インスタンスができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/4458039f-5439-6fd4-69b4-35114e942244.png)




### Elastic Runtimeのインストール

次にElastic Runtime(所謂Cloud Foundry)のインストールを行います。

https://network.pivotal.io/products/elastic-runtime

から「PCF Elastic Runtime」をダウンロードしてください。4.36GBあるので時間がかかります。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/9698fb88-2293-cb8a-33b8-35c0f3390231.png)

Ops Managerの左側の「Import a Product」をクリックしてダウンロードした`cf-1.7.0-build.xxx.pivotal`をアップロードします。


![image](https://qiita-image-store.s3.amazonaws.com/0/1852/69ead9b1-6613-623c-d6fc-3d0bd7603b84.png)

結構時間がかかります。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/62814c6b-f72c-43e3-73ed-d535dc94c974.png)


左のAvailable ProductsからPivotal Elastic Runtimeを選択して「Add」をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/fb5cb0bd-5eae-0903-a979-c30d779dbb50.png)

Pivotal Elastic Runtimeのタイルが追加されるので、それをクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/7e42d86c-b140-104c-5baa-32dc2035e1e6.png)



##### Domains

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/0015be5e-3339-9639-5a03-64dd8ccfecb8.png)

* System Domainに`system.pcf.example.com`
* Apps Domainに`apps.pcf.example.com`

##### Networking
Router IPs、HAProxy IPsは設定不要。

「Generate RSA Certificate」をクリック。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/c9a280fa-d633-e735-4241-2c21a3990202.png)


`*.pcf.example.com,**.system.pcf.example.com,*.login.system.pcf.example.com,*.uaa.system.pcf.example.com,*.apps.pcf.example.com`を入力して「Generate」をクリック。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/fbea1220-3806-6ef9-2d4b-6ab03e6d7cb5.png)

* 「Disable SSL certificate verification for this environment」にチェック
* Loggregator Portを`4443`に変更

して「Save」をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/f8022bbc-ab98-f8a4-200d-3943e8c6386d.png)


##### Resource Config

HTTP用とSSH用のELB名をそれぞれRouterとDiego Brainに設定。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/9f7f165d-664b-b17d-9f4d-7163feb77bfb.png)


ELBを使っているのでHA Proxyは不要。HA ProxyのInstance数を0に。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/0f6d3e4f-6cc0-d9d4-4a2a-a7f366914a05.png)

TOPに戻って「Apply Changes」

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/7e06415d-37ae-ee88-2882-5c8ae74e0086.png)

インストールには1時間くらいかかります。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/15f256ae-13da-8105-0864-4d1e501bf68a.png)

### Apps Managerにアクセス

「Pivotal Elastic Runtime」をクリックして、

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/8323f4c8-c0bf-9277-3909-7fe9dfdafc3b.png)

「Credentials」をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/44277abd-1f83-c1e4-49e4-cb78c7d1abd8.png)

UAAの「Admin Credentials」の「Link to Credential」をクリックしてApps Managerのユーザー名とパスワードを確認。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/d3a390fe-dd40-9aed-5109-e88ac39f3d02.png)


Apps ManagerのURLは
[https://console.system.pcf.example.com](https://console.system.pcf.example.com)

ログインページにリダイレクトされるので、さきほどのユーザー情報を入力して「SIGN IN」

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/84442289-233c-c831-6748-7a3ad686699e.png)

Apps Managerにログインできます。

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/de60227b-07a2-b725-5f60-5a0a57414b9a.png)

#### Organization作成

「Create a New Org」をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/bed63d78-f5ab-0ee7-7a04-0c30e3f3fbdf.png)

Org名を入力して、「Create Org」をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/1852/93e7ff8c-0dc0-0f9e-76e4-84499a7e607d.png)


#### `cf`コマンドでログイン

まずは`admin`でログインします

``` console
$ cf login -a https://api.system.pcf.example.com --skip-ssl-validation
API endpoint: https://api.system.pcf.example.com

Email> admin

Password> 
Authenticating...
OK

Select an org (or press enter to skip):
1. system
2. tmaki

Org> 2
Targeted org tmaki

Targeted space development


                
API endpoint:   https://api.system.pcf.example.com (API version: 2.54.0)
User:           admin
Org:            tmaki
Space:          development
```

#### ユーザーの作成

SMTPの設定が行われていればユーザーの作成をApps Managerからできますが、今回は設定していないのでCLIでユーザーを作成します。

``` console
$ cf create-user tmaki password
Creating user tmaki...
OK

TIP: Assign roles with 'cf set-org-role' and 'cf set-space-role'
$ cf set-org-role tmaki tmaki OrgManager
Assigning role OrgManager to user tmaki in org tmaki as admin...
OK
$ cf set-space-role tmaki tmaki development SpaceManager
Assigning role SpaceManager to user tmaki in org tmaki / space development as admin...
OK
$ cf set-space-role tmaki tmaki development SpaceDeveloper
Assigning role SpaceDeveloper to user tmaki in org tmaki / space development as tmaki...
OK
```

作ったユーザーで再度ログイン

``` console
$ cf login
API endpoint: https://api.system.pcf.ik.am

Email> tmaki

Password> 
Authenticating...
OK

Targeted org tmaki

Targeted space development


                
API endpoint:   https://api.system.pcf.ik.am (API version: 2.54.0)
User:           tmaki
Org:            tmaki
Space:          development
```

#### アプリケーションのpush

``` console
$ git clone https://github.com/cloudfoundry-community/simple-go-web-app.git
$ cd simple-go-web-app
$ cf push
Using manifest file /Users/makit/pcf-install/simple-go-web-app/manifest.yml

Creating app simple-go-web-app in org tmaki / space development as tmaki...
OK

Creating route simple-go-web-app.apps.pcf.ik.am...
OK

Binding simple-go-web-app.apps.pcf.ik.am to simple-go-web-app...
OK

Uploading simple-go-web-app...
Uploading app files from: /Users/makit/pcf-install/simple-go-web-app
Uploading 229.5K, 47 files
Done uploading               
OK

Starting app simple-go-web-app in org tmaki / space development as tmaki...
Downloading binary_buildpack...
Downloading nodejs_buildpack...
Downloading ruby_buildpack...
Downloading java_buildpack_offline...
Downloading staticfile_buildpack...
Downloading go_buildpack...
Downloading python_buildpack...
Downloading php_buildpack...
Downloaded staticfile_buildpack
Downloaded java_buildpack_offline
Downloaded ruby_buildpack
Downloaded php_buildpack
Downloaded binary_buildpack
Downloaded go_buildpack
Downloaded nodejs_buildpack
Downloaded python_buildpack
Creating container
Successfully created container
Downloading app package...
Downloaded app package (89.4K)
Staging...
-------> Buildpack version 1.7.5
file:///tmp/buildpacks/bed5d9adeefee86d3e8d47bc6ddafe83/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/bed5d9adeefee86d3e8d47bc6ddafe83/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 of 1 instances running

App started


OK

App simple-go-web-app was started using this command `simple-go-web-app`

Showing health and status for app simple-go-web-app in org tmaki / space development as tmaki...
OK

requested state: started
instances: 1/1
usage: 128M x 1 instances
urls: simple-go-web-app.apps.pcf.ik.am
last uploaded: Sat Apr 30 15:00:51 UTC 2016
stack: unknown
buildpack: Go

     state     since                    cpu    memory         disk         details
#0   running   2016-05-01 12:01:40 AM   0.0%   3.7M of 128M   8.7M of 1G
```

アクセス

``` console
$ curl http://simple-go-web-app.apps.pcf.ik.am/
Hello world
```

特に問題なし。

----

その他、MySQL、Redis、RabbitMQも同様にOps Managerからインストール可能です。

PCFを使うとCloud Foundryのインストールが本当に楽です。
