--- 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のインストールが本当に楽です。