IK.AM

@making's tech note


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

🗃 {Dev/PaaS/CloudFoundry/PCF}
🏷 Cloud Foundry 🏷 Pivotal Cloud Foundry 🏷 Docker 
🗓 Updated at 2019-02-12T13:24:12Z  🗓 Created at 2019-02-07T13:16:00Z   🌎 English Page

例えば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

✒️️ Edit  ⏰ History  🗑 Delete