AWSのマーケットプレースで提供されているDify Premiumを構築してみた

何事も実際に手を動かすと勉強になります。

## Difyとは

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

> Dify は、生成AI アプリの統合開発プラットフォームです。「Backend-as-a-Service」と
「LLMOps」のコンセプトのもとで開発されており、迅速に生成AI アプリを開発できます。

### Dify Premium

Dify Premimについては、GitHubの[README](https://github.com/langgenius/dify/blob/main/README_JA.md)に言及がありました。

> AWSを使用しているスタートアップ企業や中小企業の場合は、AWS MarketplaceのDify Premiumをチェックして、ワンクリックで自分のAWS VPCにデプロイできます。さらに、手頃な価格のAMIオファリングどして、ロゴやブランディングをカスタマイズしてアプリケーションを作成するオプションがあります。

### Dify Premiumの価格

EC2の料金（約154.08ドル/月）に加え、Dify Premiumの料金が0.30ドル/時（約216ドル/月）が必要です。



## 手順

### マーケットプレースでサブスクリプションする

1. マネジメントコンソールにアクセスします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/36325e98-9e68-0e3f-e9fe-c18e503756d1.png)

1. 検索欄に「marketplace」と入力し、「AWS Marketplace」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/accd1bbb-e361-03dd-2288-ac0dfa26e99f.png)

1. 左側のメニューを表示し、「製品を検出」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/97239b4e-3786-9997-983e-d56ae6f36a74.png)

1. 画面右側の検索欄に「Dify」と入力し、検索します。見つかった「Dify Premium」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/25474769-adc3-7ad7-c2b7-b75d64e8add2.png)

1. Dify Premiumの商品ページが表示されます。（ちなみに直リンクは[こちら](https://aws.amazon.com/marketplace/pp/prodview-t22mebxzwjhu6)）。「Continue to Sbscribe」ボタンをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/904564dc-f6f6-0ade-2a2e-710f4bededf6.png)

1. 「Terms and Conditions」を確認の上、「Accept Terms」ボタンをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/f4e757da-6e6a-c1b6-1be1-d731e6e0eb3a.png)

1. 少し待ちます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/183ac852-734a-8c11-5832-0a15a122f9e5.png)

1. しばらくすると、右上の「Continue to Configuration」ボタンが有効化されるのでクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/09e443f9-351c-ebd7-3466-c04167879f4a.png)

1. Difyを構築するバージョンやリージョンを選択します。2024/7/5時点で導入できる最新バージョンは「0.6.4」です。右上の「Continue to Launch」ボタンをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/88bd2f7d-ea61-8925-157b-b56d00fdbae0.png)

1. EC2の起動設定を進めます。「Choose Action」、「EC2 Instance Type」はデフォルトのままとします。インスタンスタイプは「c5.xlarge」がおすすめのようです
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/3efac31a-417b-0817-6b86-4ba9735f4fc4.png)

1. VPCを選択します。今回は新しいVPCを作ろうと思いますので、「Create a VPC in EC2」のリンクをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/dff8def2-08da-26ff-acdf-57414ab53e31.png)

1. 作成するリソースを「VPCなど」に変更し、VPCを作成します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/fd396386-454d-42c8-7192-d617f9a480e5.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/efa2b75d-2c2c-95fd-abeb-4de13990d886.png)

1. Difyの設定画面に戻り、作成したVPCとサブネットを選択します。サブネットはインターネット側からアクセスする必要があるのでパブリックサブネットを選択します。

    続けてセキュリティグループを作成します。「Create New Based On Seller Settings」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/32d18d1c-82fd-3e8d-a1aa-1c44ccf87995.png)

1. Sellerおすすめのセキュリティグループは全ポートをフル公開でした😫。

    :::note warn
    セキュリティ上あまり好ましくないので、Source (IP or Group)を「My Ip」に変更しておきましょう
    
    私の環境では、この画面でMy Ipを指定すると実際と異なるIPアドレスが設定されました（理由不明）。そのため、再度セキュリティグループの設定画面より、設定をし直しました。
   :::
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/d10f5155-ace3-8213-6729-ba3b569bb79d.png)

1. キーペアを作成する必要があります。「Create a key pair in EC2」をクリックし、新しいキーペアを作成します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/2525baa9-f50d-c9e4-4e0f-111db4753808.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/14386a1e-c0f0-9d43-9cc8-9f3a3c469f52.png)

1. すべての設定が終わったら、「Launch」ボタンをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/2525baa9-f50d-c9e4-4e0f-111db4753808.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/7da795a9-e038-a7e1-985a-caf626cee8e2.png)

1. EC2にグローバルIPアドレスが付与されていないため、このままでは外部から接続できません。[Elastic IPの管理画面](https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#Addresses:)からElastic IPの割り当てと関連付けを行います

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/bb54c02d-428a-8519-e575-38eb4e12cf1f.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/572c9fba-ed8a-66fa-f8de-a1884fc6239c.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/1d879f33-3fe9-4b10-fd97-dc6fb6b6b6b2.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/943cde02-bfb7-dcac-be6d-27de9a976fff.png)

1. EC2が起動したら、`http://[Elastic IP]/`にブラウザでアクセスします。（HTTPSではなくHTTP通信です）

    「管理者初期化パスワード」にEC2のインスタンスIDを入力します。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/945e5393-4253-a44f-f3a3-9e39f9f28e20.png)

    ちなみに、管理者初期化パスワードがインスタンスIDだというのは、こちらの「Usage Instructions」に記載がありました。（見つけるのに苦労した。。）

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/39c2ffb4-c68e-5b0e-c366-cf1137bc3415.png)

1. 管理者アカウントの設定を行います
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/8a999eeb-2cd5-4d89-a6f6-f282b34f66ee.png)

1. 管理者でログインしました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/b65e6195-0576-fb01-4f79-579ba1659209.png)


##　色々確認

* バージョン番号
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/95355f9e-a177-78a6-3986-80fd4aa18f5d.png)

* Powered by ブランド画像の変更
    設定の中にありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/e50cc060-a428-e414-65fd-d6d253894208.png)

* Bedrockの対応
    DifyのIAMロール対応はバージョン「0.6.12」からなので、残念ながら認証キーをセットする必要があります。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/7e05d261-7cc5-af08-0088-954d42ce5ae8.png)


## やってみた感想

マーケットプレースから入手し、構築しました。構築自体は簡単にできましたが、セキュリティグループの設定や、通信の暗号化などが適用されていないので、このままプロダクション利用は難しいのでは？と思いました。また、1台構成ですので、せっかくAWSだから冗長化したりRDS使ったりしたいなと思いました。