DifyをEC2上に構築してBedrockと接続する手順（IAMロール対応版）

大人気のDify（[公式サイト](https://dify.ai/)、[GitHub](https://github.com/langgenius/dify)）をEC2上に構築する手順です。

https://dify.ai/

EC2からBedrockにアクセスする際、ベストプラクティスにしたがってIAMロールで接続させたいのですが、以前検証した際は、DifyがIAMロールに対応していませんでした。
そのため、LiteLLMを経由することでIAMロールを使ってBedrockへのアクセスを実現していました。その時の投稿がこちらです。

https://qiita.com/moritalous/items/246782c67a256f41f6ed

最新のDifyはIAMロールに対応したので、LiteLLMが不要となりましたので、改めて構築手順の確認を行いました。


## 準備

まずEC2を起動してください。私はt3.mediumインスタンスで検証しました。ブラウザからの接続確認を80番ポートで行いますので、セキュリティグループの設定を行い通信できるようにしておいてください。

セッションマネージャーでEC2に接続した状態から解説をスタートします。

EC2ユーザーに切り替えます。

```shell
sudo su - ec2-user
```

GitとDockerをインストールします。

```shell
sudo dnf install -y git docker
```

Dockerの実行権限を追加します。

```shell
sudo usermod -aG docker $USER
```

権限設定反映のため、`exit`コマンドでec2-userを抜け、再度ec2-userへ切り替えます。

```console
[ec2-user@ip-10-0-10-96 ~]$ exit
logout
sh-5.2$ sudo su - ec2-user
Last login: Sat Jun 22 23:59:21 UTC 2024 on pts/1
[ec2-user@ip-10-0-10-96 ~]$
```

Docker Composeをインストールします。

```shell
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins

curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
```

Dockerを起動します。

```shell
sudo systemctl enable docker
sudo systemctl start docker
```

DockerとDocker Composeのインストールを確認します。

```shell
docker version
```
```
Client:
 Version:           25.0.3
 API version:       1.44
 Go version:        go1.20.12
 Git commit:        4debf41
 Built:             Mon Feb 12 00:00:00 2024
 OS/Arch:           linux/amd64
 Context:           default

Server:
 Engine:
  Version:          25.0.3
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.20.12
  Git commit:       f417435
  Built:            Mon Feb 12 00:00:00 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.11
  GitCommit:        64b8a811b07ba6288238eefc14d898ee0b5b99ba
 runc:
  Version:          1.1.11
  GitCommit:        4bccb38cc9cf198d52bebf2b3a90cd14e7af8c06
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```

```shell
docker compose version
```
```
Docker Compose version v2.28.0
```

## Difyの構築

GitHubにdocker-composeが用意されてます。

```shell
git clone https://github.com/langgenius/dify.git
```

```shell
cd dify/docker
```

```shell
docker compose up
```

しばらくすると起動します。

## Difyの動作確認

80番ポートで待ち受けていますのでSecurity Groupなどの設定を行い、ブラウザから`http://{EC2のグローバルIPアドレス}/install`にアクセスします。

:::note warn
HTTP通信での検証を行いました。HTTPS化などは本投稿では触れませんが、十分なセキュリティ対応を検討してください。
:::

管理者ユーザーを作成し、ログインします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/cb55f564-4355-7011-0d44-f05ad5ff1679.png)

ログイン直後の画面です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/607ab647-45cc-7ba7-4927-516631e5a511.png)

右上のユーザー名をクリックし、「設定」をクリックします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/de54193e-d027-41c5-fdf6-ff7a27c1fd88.png)

「モデルプロバイダー」タブを選択します。「Bedrock」を探し、クリックします。「セットアップ」ボタンが表示されるのでクリックします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/cf8b8846-aa8a-dcf2-2a90-1793705a3596.png)

`AccessKey`や`Secret Access Key`は空欄のままとし、AWSリージョンの選択と、任意のモデルID（`amazon.titan-text-express-v1`）を入力します。（ここで入力するモデルIDはBedrockとの接続確認で利用するだけですので任意のものでOKです）
入力後、「保存」ボタンをクリックします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/99631b05-297c-a6a7-0b4a-88997a8bec59.png)


上部の登録済みモデル一覧にBedrockが追加されます。利用可能なモデルが自動でリストアップされ有効化されます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/9e858482-5e4d-8bd8-461b-03273014f1a4.png)

接続確認を行います。
設定のモーダルを閉じ、「最初から作成」をクリックします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/aeddc9a0-6ee0-ee5b-78de-173b7080db31.png)

アプリの名称を入力し、「作成する」ボタンをクリックします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/c9045466-d490-365c-bb4f-1ac2139b5036.png)

右上のモデル部分から使用したいモデルに切り替え、チャットを入力します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ac7cdb42-abc5-5470-cc84-a5ec084e1bf3.png)

正しく返答がありました。

Difyをお楽しみください。

---

最後に宣伝

Bedrockの書籍を出版します。いよいよ今週発売です！
興味を持っていただいた方は、どうぞお手に取ってください。Difyのことも少しだけ触れてますよ！

[Amazon Bedrock 生成AIアプリ開発入門 [AWS深掘りガイド]](https://www.sbcr.jp/product/4815626440/)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/0900206c-494d-2964-ea56-0aec854eda22.png)