【CloudShell版】AWS CDKでDifyを一撃構築

はじめに


ここ最近 Difyがとても注目されていますよね
そんなDifyがAWS CDKで手早く少ない手順で構築ができるようになったので構築をしてみました

以前 Cloud9版で作っていましたが、将来的にCloud9がサービス終了になるので今回CloudShell版で作り直しました

この記事はAWSをあまり触ったことがない人向けに作成しています
おそらくGitHubのReadmeでは読み解けない(構築できない)人が多いのではないかと思いAWS初心者でもCDKでDifyのデプロイができるをゴールとし記事を作成しています

GitHubリポジトリ

こちらが今回の構築対象のGitHubリポジトリとなります
詳細を知りたい方はこちらを御覧ください

https://github.com/aws-samples/dify-self-hosted-on-aws

構成図

CloudShellの準備

ここではデプロイ用の実行環境として「CloudShell」を使います

1.1 AWSマネジメントコンソールを開き右上のCLIアイコン をクリックするCloudShell が立ち上がります



次は前提条件を満たしているかを確認していきます
1.2 CloudShellに前提のコンポーネントが入っているか確認していきます


Node.js

node --version

Docker

docker --version

AWS CLI(クレデンシャル)

aws configure list

データの削除

1.3 空きスペースを確保するためにデータを削除します

tmp配下データの削除

sudo rm -rf /tmp/* 

home配下データの削除

cd ~
rm -rf * .*


1.4 念の為 Dockerビルドの空き容量不足を防ぐため、以下の4つの実施します

未使用のコンテナを削除

docker container prune -f

未使用のイメージを削除

docker image prune -a -f

未使用のボリュームを削除

docker volume prune -f

システム全体のクリーンアップ

docker system prune -a -f

ここからいよいよ構築の実作業となります

1.5 対象のGitHubリポジトリをクローンします

git clone https://github.com/aws-samples/dify-self-hosted-on-aws


1.6 作業ディレクトリ(dify-self-hosted-on-aws)へ移動します

cd dify-self-hosted-on-aws


1.7 現在のリージョンを確認します

aws ec2 describe-availability-zones --query "AvailabilityZones[0].RegionName" --output text

aws configure get region


1.8 デプロイしたいリージョンへ変更します
※Shellコマンドで「cdk.ts」の中身を書き換えています

REGION=$(aws ec2 describe-availability-zones --query "AvailabilityZones[0].RegionName" --output text) && sed -i.bak "s/region: '[^']*'/region: '$REGION'/" bin/cdk.ts

REGION=$(aws configure get region) && sed -i.bak "s/region: '[^']*'/region: '$REGION'/" bin/cdk.ts


1.9 リージョンが正しく書き換わったか確認します

cat bin/cdk.ts


cdk.tsの中身

[cloudshell-user@ip-10-144-113-81 dify-self-hosted-on-aws]$ cat bin/cdk.ts
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { DifyOnAwsStack } from '../lib/dify-on-aws-stack';

const app = new cdk.App();
new DifyOnAwsStack(app, 'DifyOnAwsStack', {
  env: {
    region: 'us-west-2', ############### ここが実行したいリージョン名に変わっているか確認
    // You need to explicitly set AWS account ID when you look up an existing VPC.
    // account: '123456789012'
  },
  // Allow access from the Internet. Narrow this down if you want further security.
  allowedCidrs: ['0.0.0.0/0'],
  // Set Dify version
  difyImageTag: '0.14.2',

  // uncomment the below for cheap configuration:
  // isRedisMultiAz: false,
  // cheapVpc: true,
  // enableAuroraScalesToZero: true,

  // Please see DifyOnAwsStackProps in lib/dify-on-aws-stack.ts for all the available properties
});

デプロイの実行

1.10 npm依存関係のインストール:

npm ci

返り値

npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported

added 310 packages, and audited 347 packages in 17s

34 packages are looking for funding
  run `npm fund` for details


1.11 AWSアカウントのブートストラップ

npx cdk bootstrap

返り値

npx cdk bootstrap
 ⏳  Bootstrapping environment aws://515042911816/us-west-2...
Trusted accounts for deployment: (none)
Trusted accounts for lookup: (none)
Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
CDKToolkit: creating CloudFormation changeset...
 ✅  Environment aws://515042911816/us-west-2 bootstrapped.



1.12 CDKでのDifyデプロイ(デプロイに15~20分かかります)

npx cdk deploy

途中に以下が出てきますが「y」を入力(実行から約10分後

Do you wish to deploy these changes (y/n)? y

返り値の一部

 ✅  DifyOnAwsStack

✨  Deployment time: 1174.21s

Outputs:
DifyOnAwsStack.ApiGatewayApiEndpoint015055E7 = https://qpreo8y308.execute-api.us-west-2.amazonaws.com
Stack ARN:
arn:aws:cloudformation:us-west-2:515042911816:stack/DifyOnAwsStack/6136db90-3940-11ef-808b-0228350d07b1

✨  Total time: 1189.67s

デプロイ後にURLが表示されるのでURLをクリックします


ここまででDifyのデプロイが終わりました
Difyの管理者設定の画面が表示されるので管理者アカウントを設定します


先ほど設定した管理者アカウントでログインします


Difyのコンソールが表示されるので、ワークフローなど作成可能です

環境の削除

CloudShellから以下のコマンドを実行します
npx cdk destroy --force」で環境が一掃されますが、念の為 目で見て今回デプロイしたAWSリソースが全て削除されたかを確認するのをオススメします(知らぬ間に課金発生を防止

npx cdk destroy --force

返り値(10分ほどで削除)

✨  Total time: 1189.67s


ec2-user:~/environment/dify-on-aws-cdk (main) $ npx cdk destroy --force
DifyOnAwsStack: destroying... [1/1]
current credentials could not be used to assume 'arn:aws:iam::515042911816:role/cdk-hnb659fds-deploy-role-515042911816-us-west-2', but are for the right account. Proceeding anyway.

 ✅  DifyOnAwsStack: destroyed

それではよいAWS、Difyライフを!

補足


本構成の月額料金目安(バージニア リージョン)
約54ドルなのでEC2やLightsailに比べると高くはなります

いいなと思ったら応援しよう!