AWS CDKでDifyを一撃構築

はじめに


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

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

この記事ではCDKの説明やDifyの説明はいたしませんのでその点ご理解お願いします

GitHubリポジトリ

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

構成図

この記事ではDifyをオレゴンリージョンにデプロイしているのでその点はご注意ください
※オレゴン以外でも構築は可能です

Cloud9の準備

ここではデプロイ用のIDE環境として「Cloud9(以下C9)」を使います
AWSマネジメントコンソールの検索窓から「C9」を入力しC9の画面を開きます

C9から環境を作成を押下します

任意の名前を入力しt3.smallを選択します
t2microだと接続に時間がかかり固まることがあったのでパフォーマンス不足でした)

ネットワークの設定はデフォルトで作成を押下します

数分で作成が完了するので開くから作成したC9を開きます

事前準備

IAMポリシーのアタッチ:
AWSCloud9SSMAccessRoleロールに以下のポリシーをアタッチします

  • AdministratorAccess

AWSマネジメントコンソールの検索窓からIAMを検索し開きます
IAMの画面で以下の通り操作してください
ロールを選択する
AWSCloud9SSMAccessRoleを入力する
AWSCloud9SSMAccessRoleが表示されるのクリックします

許可ポリシーから許可を追加を押下するとメニュー表示されるのでポリシーをアタッチを選択します

その他の許可ポリシーから
AdministratorAccessを入力します
AdministratorAccessにチェックを入れます
許可を追加を押下します


次は前提条件を満たしているかを確認していきます
C9の画面に戻っての作業となります

C9にはNode.js、Docker、AWS CLI(クレデンシャルの設定)が既に入っていますが、念の為 確認します

C9を使用した理由として環境依存をなるべく排除し、コンポーネントのインストールや設定を軽減させることができます

それではC9に前提のコンポーネントが入っているか確認していきます


Node.js

node --version

Docker

docker --version

AWS CLI(クレデンシャル)

aws configure list

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

GitHubをクローンします

git clone https://github.com/tmokmss/dify-on-aws-cdk


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

cd dify-on-aws-cdk


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

aws configure get region


デプロイしたいリージョンへ変更します

以下のコマンドで「bin/cdk.ts」に宣言するリージョン指定を書き換えます
(ここではオレゴン=us-west-2に書き換えています)
このコマンドではC9を稼働させているリージョンを読み込み「bin/cdk.ts」内へリージョンを反映させています
以下はAWS SDKがインストールされている前提のコマンドですが、C9には既にAWS SDKがビルトインされています

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


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

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' }, // 正しいリージョンかを確認
// Allow access from the Internet. Narrow this down if you want further security.
allowedCidrs: ['0.0.0.0/0'],
difyImageTag: '0.6.12',
});

bin/cdk.tsファイルの編集
C9を実行している(Difyをデプロイする)リージョン名に変更をします
※以下はオレゴンリージョンの記述になります
※ファイルの保存をするときはCtrl+S

#!/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' }, // !!!!!!!!ここを当該リージョンに変更する!!!!!!!!!
allowedCidrs: ['0.0.0.0/0'],
difyImageTag: '0.6.12',
});

デプロイの実行

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


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.


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

npx cdk deploy

途中に以下が出てきますが「y」を入力

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のコンソールが表示されるので、ワークフローなど作成可能です

環境の削除

C9から以下のコマンドを実行します
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

C9の削除
該当のC9を選択し削除を押下します

削除と入力し削除を押下します

以上で終了となります
お疲れさまでした

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

この記事が気に入ったらサポートをしてみませんか?