---
schema_version: "1"
id: a9a8ecd33b11cf29e1ffb3206eceb30b6567d2be5bd8ee90836637aed1eb1647
title: Runtime Fabric での永続性ゲートウェイの設定
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/runtime-fabric/2.6/persistence-gateway.md
canonical_url: https://docs.mulesoft.com/jp/runtime-fabric/2.6/persistence-gateway
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 756887730ee0313668e167530e3932458af6e347c85203b04196d62a0ff39248
description: MuleSoft Documentation Site
release: "2.6"
latest: false
---
# Runtime Fabric での永続性ゲートウェイの設定

Anypoint Runtime Fabric で提供される永続性ゲートウェイにより、Mule Runtime インスタンスにデプロイされた Mule アプリケーションではアプリケーションレプリカと再起動でデータを保存して共有できます。

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>Mule Maven プラグインバージョン 3.5.4 以降を使用して Runtime Fabric デプロイメント用の永続的なオブジェクトストアを有効にすることもできます。</p>
</div>
</td>
</tr>
</tbody></table>

## [](#mule-アプリケーションでの永続性ゲートウェイの使用)Mule アプリケーションでの永続性ゲートウェイの使用

Anypoint Runtime Fabric で永続性ゲートウェイを設定したら、Mule Runtime Engine バージョン 4.2.1 以降にデプロイされた Mule アプリケーションで使用できるようになります。設定すると、ユーザーは Runtime Manager を使用してアプリケーションをデプロイするときに ​**\[Use Persistent Object Storage (永続オブジェクトストレージを使用)\]**​ を選択できます。詳細は、​[「Runtime Fabric に Mule アプリケーションをデプロイする」](https://docs.mulesoft.com/jp/runtime-fabric/2.6/deploy-to-runtime-fabric)​を参照してください。

Mule アプリケーションでは Object Store Connector を通じて Object Store v2 REST API を使用して永続性ゲートウェイに接続します。これにより、Mule アプリケーションを変更することなく、Anypoint Runtime Fabric と CloudHub の両方をデプロイできます。

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>アプリケーションを削除しても、すぐには永続データが削除されない場合があります。Runtime Fabric は 60 分ごとに永続データをクリーンアップします。</p>
</div>
</td>
</tr>
</tbody></table>

## [](#永続性ゲートウェイの制限事項)永続性ゲートウェイの制限事項

次の表に、永続性ゲートウェイによって保存されるデータに関する制限事項を示します。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Limit (制限)</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>最大 TTL。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>データが永続性ゲートウェイに保存される期間。値は 30 日に設定されます。</p>
</div></div></td>
</tr>
</tbody>
</table>

## [](#始める前に)始める前に

永続性ゲートウェイを有効化する前に、次の準備が整っていることを確認します。

- 永続性ゲートウェイによって保存されるデータのデータソースとなる PostgreSQL データベースを作成してある。このデータベースは ​`partition`​ キーワードが予約されていない [PostgresSQL のサポート対象バージョン](https://www.postgresql.org/support/versioning/)​と互換性がある必要があります。
- PostgreSQL ユーザーに CREATE、INSERT、SELECT、UPDATE、DELETE 権限を付与してある。

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>データベースへのプレーンテキスト接続のみがサポートされています。</p>
</div>
</td>
</tr>
</tbody></table>

## [](#Configure-Persistence-Gateway)永続性ゲートウェイの設定

設定中に、永続性ゲートウェイによって必要なデータベーススキーマが作成されます。その後、Runtime Fabric にデプロイされたアプリケーションが永続オブジェクトストレージを使用するように設定されると、永続性ゲートウェイによってデータベースに必要な行が書き込まれます。

永続性ゲートウェイを設定するには、クラスターが永続性データストアに接続するための Kubernetes カスタムリソースを作成する必要があります。

1. Kubernetes シークレットを作成します。
    
    kubectl create secret generic <SECRET NAME> -n rtf --from-literal=persistence-gateway-creds='postgres://username:pass@host:port/databasename'
    
    <table>
<tbody><tr>
<td class="icon">
<i class="fa icon-important" title="Important"></i>
</td>
<td class="content">
<div class="ulist">
<ul>
<li>
<p><code>--from-literal=persistence-gateway-creds</code>​ は変更しないでください。​<code>&lt;SECRET NAME&gt;</code>​ はシークレットに使用する値に置き換えることができます。</p>
</li>
<li>
<p>データベースユーザー名に「@」文字は使用しないでください。</p>
</li>
<li>
<p>PostgresSQL ユーザーアカウントのパスワードに特殊文字が含まれている場合は、Kubernetes シークレットとしてプッシュする前に接続 URL をエンコードしてください。詳細は、 <a href="https://help.mulesoft.com/s/article/RTF-Persistent-Gateway-Does-Not-Allow-Login-Due-to-Account-Password-With-Special-Characters">「RTF Persistent Gateway Does Not Allow Login Due to Account Password With Special Characters (特殊文字を含むアカウントパスワードのために RTF 永続性ゲートウェイでログインが許可されない)」</a>​を参照してください。</p>
</li>
</ul>
</div>
</td>
</tr>
</tbody></table>
2. データストアのカスタムリソースを作成します。
    
    1. カスタムリソーステンプレートを ​[Kubernetes カスタムリソーステンプレート](#k8-custom-resource-template)​ から ​`custom-resource.yaml`​ という名前のファイルにコピーします。
    2. `secretRef: name`​ の値が Kubernetes シークレットファイルで定義された ​`name`​ 項目に一致することを確認します。
    3. 環境で必要に応じてカスタムリソーステンプレートのその他の項目を変更します。
    4. `kubectl apply -f custom-resource.yaml`​ を実行します。
3. 永続性ゲートウェイポッドのログをチェックして、データベースと通信できることを確認します。
    
    ```copy
    kubectl get pods -n rtf
    ```
    
    名前にプレフィックス ​`persistence-gateway`​ が付いたポッドを見つけます。
    
    ```copy
    kubectl logs -f persistence-gateway-6dfb98949c-7xns9 -n rtf
    ```
    
    このコマンドの出力は次のようになります。
    
    2021/04/09 16:35:31 Connecting to PostgreSQL backend...
    2021/04/09 16:35:32 Starting watcher for /var/run/secrets/rtf-object-store/persistence-gateway-creds
    2021/04/09 16:35:32 Watching for changes on /var/run/secrets/rtf-object-store/persistence-gateway-creds
    2021/04/09 16:35:35 Successfully connected to the PostgreSQL backend.
    192.168.2.101 - - \[09/Apr/2021:16:35:55 +0000\] "GET /api/v1/status/ready HTTP/1.1" 200 2 "" "kube-probe/1.18+"

## [](#認証済みの名前空間での永続性ゲートウェイの使用)認証済みの名前空間での永続性ゲートウェイの使用

[認証済みの名前空間](https://docs.mulesoft.com/jp/runtime-fabric/2.6/install-helm#optional-configure-authorized-namespaces)​で永続性ゲートウェイを使用する場合は、新しい ​`rtf-persistence-gateway`​ サブジェクトを追加して RoleBinding を編集します。

```copy
subjects:
  - kind: ServiceAccount
    name: rtf-persistence-gateway
    namespace: <rtf_namespace>
```

## [](#k8-custom-resource-template)Kubernetes カスタムリソーステンプレート

下のテンプレート例を使用して、Kubernetes カスタムリソースを作成します。このカスタムリソースにより、Kubernetes クラスターがデータストアに接続できます。

```yaml
apiVersion: rtf.mulesoft.com/v1
kind: PersistenceGateway
metadata:
  name: default
  namespace: rtf
spec:
  objectStore:
    backendDriver: postgresql
    maxBackendConnectionPool: 20
    replicas: 2
    secretRef:
      name: persistence-gateway-creds
    resources:
      limits:
        cpu: 250m
        memory: 250Mi
      requests:
        cpu: 200m
        memory: 75Mi
```

環境に基づいて次の項目を変更します。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">項目</th>
<th class="tableblock halign-left valign-top">説明</th>
<th class="tableblock halign-left valign-top">デフォルト値</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>kind</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>カスタムリソースの種別。サポートされる値は ​<code>PersistenceGateway</code>​ のみです。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>PersistenceGateway</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>metadata.name</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>このカスタムリソースの内部識別子。この項目の値は ​<code>default</code>​ である必要があります。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>default</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>metadata.namespace</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>シークレットが適用される名前空間。サポートされる値は ​<code>rtf</code>​ です。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>rtf</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.backendDriver</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>データストアで使用するドライバー。​<code>postgresql</code>​ のみがサポートされています。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>postgresql</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.maxBackendConnectionPool</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>データストアに対して同時に開いている最大接続数。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>20</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.replicas</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>永続性ゲートウェイのレプリカの数。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>2</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.resources.limits.cpu</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>永続性ゲートウェイポッドの CPU リソースの制限。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>250m</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.resources.limits.memory</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>永続性ゲートウェイポッドのメモリリソースの制限。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>150Mi</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.resources.requests.cpu</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>永続性ゲートウェイポッドの CPU リソース要求。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>200m</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.resources.requests.memory</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>永続性ゲートウェイポッドのメモリリソース要求。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>75Mi</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>spec.objectStore.secretRef.name</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Kubernetes シークレットファイルで定義された永続性ゲートウェイのログイン情報の名前。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>persistence-gateway-creds</p>
</div></div></td>
</tr>
</tbody>
</table>

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>デフォルトの CPU、メモリ、制限の値は少数のデプロイ済み Mule アプリケーションに基づきます。環境の要求に基づいてこれらの値を変更してください。</p>
</div>
</td>
</tr>
</tbody></table>

## [](#persistence-gateway-のアプリケーションデータ)Persistence Gateway のアプリケーションデータ

Persistence Gateway は次の 2 つのテーブルを使用してアプリケーションデータを保存します。

```copy
CREATE TABLE IF NOT EXISTS stores (
	id SERIAL PRIMARY KEY,
	name VARCHAR(255) NOT NULL,
	org_id VARCHAR(255) NOT NULL,
	env_id VARCHAR(255) NOT NULL,
	default_ttl_seconds int NOT NULL,
	is_fixed_ttl bool NOT NULL,
	CONSTRAINT UK_stores UNIQUE (name, org_id, env_id)
);
CREATE TABLE IF NOT EXISTS items (
	id SERIAL PRIMARY KEY,
	store_id INT NOT NULL REFERENCES stores(id),
	key VARCHAR(255) NOT NULL,
	partition VARCHAR(255) NOT NULL,
	value_type VARCHAR(10) NOT NULL,
	number_value integer,
	string_value text,
	binary_value bytea,
	last_updated timestamp,
	is_fixed_ttl bool NOT NULL,
	ttl timestamp NOT NULL,
	CONSTRAINT UK_items UNIQUE (key, store_id, partition)
);
	CREATE INDEX IF NOT EXISTS IDX_items_ttl ON items(ttl)
;`
```

永続的なデータをクラスター間で移行する場合は、これらの 2 つのテーブルをソースクラスターから完全にバックアップして、移行先のデータベースで再作成してください。予期しない結果を防ぐため、両方のクラスターでこのプロセスが実行されている間は、アプリケーションをデプロイしないでください。

## [](#関連情報)関連情報

- [Runtime Fabric に Mule アプリケーションをデプロイする](https://docs.mulesoft.com/jp/runtime-fabric/2.6/deploy-to-runtime-fabric)
- [Mule Maven プラグインを使用した Runtime Fabric へのアプリケーションのデプロイ](https://docs.mulesoft.com/mule-runtime/latest/deploy-to-rtf)