ACKにデプロイしたDifyのDBをマネージドにする

[前回](https://qiita.com/maipippi/items/84919cc718785a8a6347)ACKにデプロイしたDifyのDBまわりは全部Pod内にあるので、これらをマネージドに切り出して運用しやすくしていく〜〜〜〜〜〜〜〜


下記の図みたいにしたい！([公式ブログ](https://www.alibabacloud.com/blog/high-availability-and-performance-best-practices-for-deploying-dify-based-on-ack_601874)より)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/a33fcd5b-1e1d-9d02-2fb9-5b8a6d2de4a3.png)



Difyで使用しているDBたちはRedis, Postgres, AnalyticDB for PostgreSQLなので、それらをAlibaba Cloudでたてる！

# Redisつくる

まずはRedisをたてるよ

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.30.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/67c28a2a-e267-3fa0-8d5a-5652c8ba416a.png)


![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.34.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/2733d601-8595-85e5-4db0-0b6f2c5fadb3.png)

![image 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/dc8edc89-0bd8-374e-03ca-9f0f80cf9424.png)

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.35.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/9a42194c-1b6a-5019-9432-3a09e188a6d8.png)


このとき、VPCはACKの属するものと同じに設定すること&クラスタではなくスタンドアロンにすること！

これでつくる〜
![image 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/6cb07794-045d-1a34-0756-d7a560616384.png)

できた〜〜〜〜〜〜〜〜！！！！！！

ので、まずパスワードをパスワードリセットで設定！
![image 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/34687f58-453a-297b-166b-e684c706b744.png)


完了！

でもこのままだとACKからアクセスできないので、ホワイトリストの設定をするぞ

![image 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/cb364bf5-54ad-d992-63fd-18958acd7edc.png)


ACKの各ノードのIPたちを設定する

![image 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/269f1865-ac57-05dc-adf5-0c437484bb9a.png)


これでRedisの立ち上げと設定はおっけ〜〜〜〜〜〜〜〜〜〜🐕

# Apsara RDS for PostgreSQLをたてる

次はRDSをたてる〜

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.44.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/862b40a6-0b01-d3c1-c4b2-47bbdeb8668a.png)

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.44.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/6d3e418a-82b7-e739-dc36-dc593a5eb3e4.png)
![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.45.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/03a7b6a9-832d-1078-020b-12cec613884d.png)

これもVPCはACKの属するものと同じに設定すること！

これでつくる〜

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_13.07.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/51c10d42-a16f-223b-1a31-ee287a1eb39d.png)

できた！ので、まずはアカウントをつくる！

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_13.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/ff593f07-44b0-b1a7-8b4c-ac0a561b843a.png)
![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_13.18.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/da8310de-c8b5-efdf-91ea-03058f3109c4.png)

次にデータベースをつくる！
![image 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/71ffbfbd-44ec-2d31-b80e-ec0e88346a11.png)
![image 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/26e4fdda-1930-ff39-53c3-ea66ca85dc08.png)


で、Redisと同じようにホワイトリストの更新をする！

![image 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/a0056914-82fc-8b88-0d85-bbbf81ec4154.png)


これでApsaraDB for PostgreSQLの設定はおわり🐈

# AnalyticDB for PostgreSQLをたてる

次にAnalyticDB for PostgreSQLをたてる！

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.55.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/9373db06-d7be-6109-8710-508e62b97447.png)
![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.55.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/f1cd1f11-b06e-232f-bef7-0f7e1f210937.png)
![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_12.55.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/8cfecd85-7805-4de8-c119-84a25c54e0cb.png)

これもVPCはACKの属するものと同じに設定すること！

これでつくる〜

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_13.22.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/e6a194c9-5e54-d829-b7de-490da211afa9.png)

できた！ので、アカウント作成をする〜！

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_13.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/93062279-012b-37c2-36a8-3ca76fe2276d.png)
![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2025-01-20_13.23.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/9cea5460-8ffd-558e-aa25-f9cb99eae2a8.png)

完了！

AnalyticDB for PostgreSQLの設定おわり🐓

# ACKのDBまわりを付け替える

DBたちの準備がととのったので、前回作ったACKのクラスタでDBまわりのつけかえをする〜！

一旦HelmでいれたDify(ack-dify)を削除する！

![image 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/dc0ec7eb-8f39-678e-691f-948029d3877c.png)


で、もう一回HelmでDifyをいれる。このとき、Yamlファイルが編集できるので、そこでDBをマネージドのものに変える！

![image 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/047593be-d50e-1be8-135c-b4a3d693e3fe.png)

![image 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/554f18ff-adbe-1ddb-30ec-16095d891023.png)


Chartバージョンは`0.1.11`にした！

このYamlファイルのなかで、DBたちの設定部分を変更する

変更する対象はpostgresql, weaviate(ベクトルDB), redisで、それぞれを`enabled: false` にする！ベクトルDBはDifyのデフォだとweaviateを使用していたのを、AnalyticDB for PostgreSQLに置き換える感じになるのね〜

変更後の該当箇所↓

```yaml
postgresql:
  enabled: false # ここを変更
  name: postgres
  global:
    storageClass: ""
    postgresql:
      auth:
        postgresPassword: "difyai123456"
        username: ""
        password: ""
        database: "dify"

~~~

weaviate:
  enabled: false # ここを変更
  image:
    # registry where weaviate image is stored
    registry: *repo
    # Tag of weaviate image to deploy
    # Note: We strongly recommend you overwrite this value in your own values.yaml.
    # Otherwise a mere upgrade of the chart could lead to an unexpected upgrade
    # of weaviate. In accordance with Infra-as-code, you should pin this value
    # down and only change it if you explicitly want to upgrade the Weaviate
    # version.
    tag: 1.19.1
    repo: weaviate
    # Image pull policy: https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy
    pullPolicy: IfNotPresent
    pullSecrets: []
    
 ~~~
 
 redis:
  enabled: false # ここを変更
  ## "Redis database number to use (0-15)"
  dbNumber: "0"
  ## @section Global parameters
  ## Global Docker image parameters
  ## Please, note that this will override the image parameters, including dependencies, configured to use the global value
  ## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass
  ##

  ## @param global.imageRegistry Global Docker image registry
  ## @param global.imagePullSecrets Global Docker registry secret names as an array
  ## @param global.storageClass Global StorageClass for Persistent Volume(s)
  ## @param global.redis.password Global Redis&reg; password (overrides `auth.password`)
  ##
 
```

次に、各DBのendpointを確認して、それらをYamlファイルの外部DB設定箇所に反映する！

まずはRDS！

![image 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/da7569da-01ea-27b6-0938-a02638a459f6.png)


イントラネットアドレスが接続先なのでこれをYamlファイルの該当箇所に設定する！

たてたときに設定したusername, passwordも設定する〜

```yaml
###################################
# External postgres
# - these configs are only used when `externalPostgres.enabled` is true
###################################
externalPostgres:
  enabled: true # ここを変更
  username: "dify" # ここを変更
  password: "[設定したパスワード]" # ここを変更
  address: "pgm-0iwt6027t8tetn8b.pgsql.japan.rds.aliyuncs.com" # ここを変更
  port: 5432
  dbName: dify
  maxOpenConns: 20
  maxIdleConns: 5
```

次にRedisやる！

![image 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/ec7d1e84-dce7-2e06-6f7e-d3ef7fac0d01.png)


インスタンス情報に接続情報あったのでこれを使う！

```yaml
###################################
# External Redis
# - these configs are only used when `externalRedis.enabled` is true
###################################
externalRedis:
  enabled: true # ここを変更
  host: "r-0iwdbsbvq8ysq7urau.redis.japan.rds.aliyuncs.com" # ここを変更
  port: 6379
  username: "r-0iwdbsbvq8ysq7urau" # ここを変更
  password: "[設定したパスワード]" # ここを変更
  useSSL: false
```

最後にAnalyticDB for PostgreSQL！

アカウントのaccessKeyとsecretKeyが必要なので、まずそれを発行する〜

右上のアカウントからアクセスキーにとんで作成！

![image 14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/208c135a-7126-cb95-d359-4ba101a5cea3.png)


あとADBのインスタンスIDを確認して、Yamlに反映する〜

![image 15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/50d5c02e-f9b4-97ea-1149-367e770cf470.png)


```yaml
###################################
# External AnalyticDB
# - these configs take effect when `externalAnalyticDB.enabled` is true
###################################
externalAnalyticDB:
  enabled: true # ここを変更
  accessKey: "[発行したaccessKey]" # ここを変更
  secretKey: "[発行したsecretKey]" # ここを変更
  region: "ap-northeast-1" # ここを変更
  instanceId: "gp-0iwp02ngy63052z1c" # ここを変更
  account: "dify" # ここを変更
  accountPassword: "[設定したパスワード]" # ここを変更
  namespace: "dify"
  namespacePassword: "difypassword"
```

以上のYaml該当箇所修正をしたらHelmデプロイ完了〜！！！！！

Podたちが生まれ変わったのを確認して、ack-dify-apiのpodのログを見てみる

![image 16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/df587486-fbde-d508-a1ee-48e5b584d321.png)


DB migrationとかの立ち上げ準備を経て、appが立ち上がってた！

さっそくアプリにアクセスしてみると
![image 17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/c962675f-d88f-0978-5c1e-4d282982eb8a.png)


できぴ〜！！！！！！！！！！

# まとめ

ACKのHelmデプロイされたDify、Yamlの設定をちょいちょいっと変えたら各DBをマネージドのものに切り替えられた！

それぞれ難しい設定は特にせず、きちんと作って切り替えたらすんなりできたので楽だった〜〜〜〜✌️わーい

これにておわり！