【CloudShell版】AWS CDKでDifyを一撃構築
はじめに
ここ最近 Difyがとても注目されていますよね
そんなDifyがAWS CDKで手早く少ない手順で構築ができるようになったので構築をしてみました
この記事は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に比べると高くはなります