📝 BLOG.IK.AM

@making's memo
(🗃 Categories 🏷 Tags)

Cloud Foundry上に開発/デモ用データベースをデプロイするメモ

🗃 {Dev/PaaS/CloudFoundry/PCF}

🏷 Cloud Foundry 🏷 Pivotal Cloud Foundry 🏷 Docker

🗓 Updated at 2019-02-12T13:24:12Z by Toshiaki Maki  🗓 Created at 2019-02-07T13:16Z by Toshiaki Maki  {✒️️ Edit  ⏰ History}


例えばPostgreSQLを使う際、本番環境ではRDSを使うけど、開発環境ではRDSは使いたくない、けれどもMarketplaceになくてセットアップするのが面倒。という時に、Docker Imageを使ってPostgreSQLをCloud Foundryにデプロイできます。
通常のCloud FoundryアプリケーションではHTTPリクエストしか受け付けられませんが、
Container to Container Networkingを使うことでコンテナ間はTCP/UDPアクセス可能です。

つまり、Docker + Container to Container NetworkingでPostgreSQLをCloud Foundryにデプロイしてアプリケーションからアクセスすることが可能です。
ただし、永続ボリュームではないのでコンテナをリスタートするたびにデータは消滅しますので、ちょっとした開発用やデモ用途限定です。

PostgreSQLのデプロイ

次のmanifest.ymlを用意します。

applications:
- name: postgres
  health-check-type: process
  memory: 256m
  docker:
    image: postgres:9.6.10
  routes:
  - route: postgres.apps.internal
  env:
    POSTGRES_USER: vcap
    POSTGRES_PASSWORD: my-secret
    POSTGRES_DB: demo
    PGDATA: /tmp/data
    POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C

デプロイします。

Docker Imageのデプロイが有効で、かつCloud FoundryのService Discoveryが使えることが必須です。

cf push

これでPostgreSQLがデプロイできました。apps.internalドメインを使うのがポイントです。
外向けにはルーティングされません。

ちなみに、TCP Routingの機能を利用すれば外向けにルーティング可能です。

アプリのデプロイ

次のmanifest.ymlを用意します。Spring Bootで作ったアプリを前提としています。

applications:
- name: demo
  path: target/demo-0.0.1-SNAPSHOT.jar
  env:
    SPRING_DATASOURCE_URL: jdbc:postgresql://postgres.apps.internal:5432/demo
    SPRING_DATASOURCE_USERNAME: vcap
    SPRING_DATASOURCE_PASSWORD: my-secret

--no-startをつけてデプロイします。その後、demoからpostgresへのネットワークポリシーを定義し、5432ポートへのアクセスを許可します。
そしてstartします。

cf push --no-start
cf add-network-policy demo --destination-app postgres  --protocol tcp --port 5432
cf start demo