AWS CDKでDifyを一撃構築
はじめに
ここ最近 Difyがとても注目されていますよね
そんなDifyがAWS CDKで手早く少ない手順で構築ができるようになったので構築をしてみました
この記事はAWSをあまり触ったことがない人向けに作成しています
おそらくGitHubのReadmeでは読み解けない(構築できない)人が多いのではないかと思いAWS初心者でもCDKでDifyのデプロイができるをゴールとし記事を作成しています
この記事ではCDKの説明やDifyの説明はいたしませんのでその点ご理解お願いします
GitHubリポジトリ
こちらが今回の構築対象のGitHubリポジトリとなります
詳細を知りたい方はこちらを御覧ください
構成図
![](https://assets.st-note.com/img/1720013964141-yHv67ggTsb.png?width=800)
この記事ではDifyをオレゴンリージョンにデプロイしているのでその点はご注意ください
※オレゴン以外でも構築は可能です
Cloud9の準備
ここではデプロイ用のIDE環境として「Cloud9(以下C9)」を使います
AWSマネジメントコンソールの検索窓から「C9」を入力しC9の画面を開きます
![](https://assets.st-note.com/img/1720015715508-K9laHOxOMK.png?width=800)
C9から環境を作成を押下します
![](https://assets.st-note.com/img/1720014545614-5p07kr25dX.png?width=800)
任意の名前を入力しt3.smallを選択します
(t2microだと接続に時間がかかり固まることがあったのでパフォーマンス不足でした)
![](https://assets.st-note.com/img/1720014635367-wyACVNM3or.png?width=800)
ネットワークの設定はデフォルトで作成を押下します
![](https://assets.st-note.com/img/1720014698886-eUUjCvJBgN.png?width=800)
数分で作成が完了するので開くから作成したC9を開きます
![](https://assets.st-note.com/img/1720093527547-FsxcNDS6Pi.png?width=800)
事前準備
IAMポリシーのアタッチ:
AWSCloud9SSMAccessRoleロールに以下のポリシーをアタッチします
AdministratorAccess
AWSマネジメントコンソールの検索窓からIAMを検索し開きます
IAMの画面で以下の通り操作してください
①ロールを選択する
②AWSCloud9SSMAccessRoleを入力する
③AWSCloud9SSMAccessRoleが表示されるのクリックします
![](https://assets.st-note.com/img/1720017100778-ZQidryNjQZ.png?width=800)
許可ポリシーから許可を追加を押下するとメニュー表示されるのでポリシーをアタッチを選択します
![](https://assets.st-note.com/img/1720017503328-VB6pxa9xBs.png?width=800)
その他の許可ポリシーから
①AdministratorAccessを入力します
②AdministratorAccessにチェックを入れます
③許可を追加を押下します
![](https://assets.st-note.com/img/1720017572305-8excLqIfzt.png?width=800)
次は前提条件を満たしているかを確認していきます
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をクリックします
![](https://assets.st-note.com/img/1720014938765-4BsQmRvAuT.png?width=800)
ここまででDifyのデプロイが終わりました
Difyの管理者設定の画面が表示されるので管理者アカウントを設定します
![](https://assets.st-note.com/img/1720014879177-GWkkZhYlHp.png?width=800)
先ほど設定した管理者アカウントでログインします
![](https://assets.st-note.com/img/1720015056054-r0bpCrkWxG.png?width=800)
Difyのコンソールが表示されるので、ワークフローなど作成可能です
![](https://assets.st-note.com/img/1720015115301-jK7GnkWupe.png?width=800)
環境の削除
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を選択し削除を押下します
![](https://assets.st-note.com/img/1720016600587-8diOvInAIv.png?width=800)
削除と入力し削除を押下します
![](https://assets.st-note.com/img/1720016679162-1w2RsDLuqT.png?width=800)
以上で終了となります
お疲れさまでした
それではよいAWS、Difyライフを!
この記事が気に入ったらサポートをしてみませんか?