目次
はじめに
こんにちは、ディーネットの山田です。
世間では、ChatGPTが流行っておりますが、AWSさんからもClaudeを使ったChatGPTみたいなサンプルが提供されておりましたので、AWS環境にデプロイしてみました。
https://github.com/aws-samples/bedrock-claude-chat/blob/main/docs/README_ja.md
今回は、IPアドレス制限を設けたいので、Cloud9上でCDKのソースコードを修正しつつデプロイします。
事前準備
1. us-east-1(バージニア北部)リージョンでBedrockのモデルに対するアクセスを申請
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/modelaccess
ドキュメントによると、以下の3種類を有効化する必要があるとのこと。
- Anthropic Claude
- Anthropic Claude Instant
- Cohere Embed Multilingual
私の環境では、すでにすべて有効化していたので、特に対応しませんでした。
2. Cloud9でCDKが実行できる環境を準備
私の環境では、Amazon Linux 2023で構成されたCloud9を使いました。
$ npm --version
10.3.0
$ node --version
v20.11.0
$ cdk --version
2.122.0 (build 7e77e02)
デプロイ手順
基本的には、READMEに従って対応を進めました。
https://github.com/aws-samples/bedrock-claude-chat/blob/main/docs/README_ja.md#deploy-using-cdk
1. bedrock-claude-chatのプロジェクトをクローン
$ git clone https://github.com/aws-samples/bedrock-claude-chat
2. npmのパッケージをインストール
$ cd bedrock-claude-chat
$ cd cdk
$ npm ci
3. AWS CDKをインストール
インストール済みの場合は対応不要とのこと。
$ npm i -g aws-cdk
4. デプロイ先リージョンを指定
CDKに関しては、初心者過ぎるので、理解が及んでいませんがCDKToolkitを東京リージョンだけだとエラーになったので、リージョン指定せずに実行してバージニア北部にもCDKToolkitを作りました。
$ cdk bootstrap aws://{AWSのアカウントID}/ap-northeast-1
$ cdk bootstrap
5. IPアドレス制限
社内からのアクセスのみに制限したいので、以下のファイルにある allowedIpV4AddressRanges
と allowedIpV6AddressRanges
の記述をそれぞれ書き換えました。
IPv6については、ループバックアドレスのみにして実質誰もアクセスできないようにしました。
- bedrock-claude-chat/cdk/cdk.json
"allowedIpV4AddressRanges": ["{当社のIPアドレスに制限}"],
"allowedIpV6AddressRanges": ["::1/128"],
6. Cognitoのセルフサインアップを無効化
知らない人が勝手にCognitoにサインアップして使われても困るんで、セルフサインアップを無効化しました。
selfSignUpEnabled
を true
から false
に書き換えました。
- bedrock-claude-chat/cdk/lib/constructs/auth.ts
const userPool = new UserPool(this, "UserPool", {
passwordPolicy: {
requireUppercase: true,
requireSymbols: true,
requireDigits: true,
minLength: 8,
},
selfSignUpEnabled: false,
signInAliases: {
username: false,
email: true,
},
});
7. CDKプロジェクトをデプロイ
$ cdk deploy --require-approval never --all
8. CDKのデプロイ完了
私の環境の場合、大体20分ぐらいかかりました。
正常にデプロイが完了すれば、以下のような結果が出ます。
✅ BedrockChatStack
✨ Deployment time: 635.32s
Outputs:
BedrockChatStack.AuthUserPoolClientIdXXXXXXXXXXXX = XXXXXXXXXXXX
BedrockChatStack.AuthUserPoolIdXXXXXXXXXXXX = ap-northeast-1_XXXXXXXXXXXX
BedrockChatStack.BackendApiBackendApiUrlXXXXXXXXXXXX = https://XXXXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com
BedrockChatStack.DocumentBucketName = bedrockchatstack-documentbucketXXXXXXXXXXXX-XXXXXXXXXXXX
BedrockChatStack.FrontendURL = https://XXXXXXXXXXXX.cloudfront.net
BedrockChatStack.WebSocketWebSocketEndpointXXXXXXXXXXXX = wss://XXXXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/dev
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXX:stack/BedrockChatStack/XXXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
✨ Total time: 652.33s
※Outputsについては、公開されると面倒な部分はすべて伏せてます。
9. CloudFrontのURLにアクセス
BedrockChatStack.FrontendURL = https://XXXXXXXXXXXX.cloudfront.net
※セルフサインアップを無効化しているので、AWSマネジメントコンソールにあるCognito画面からアカウントを作成する必要があります。
10. ログイン後の画面
若干使用した後なので、会話履歴が残っていますが、ログインして真っ先に思ったのは、ChatGPTにUIを似せているんですかね?
備考
- 自作でUIを作らなくても、AWSさんが用意してくれているので、ソースコードを少し修正すれば社内専用のチャットボットが作れそう。
- ChatGPTとの比較はやっていませんが、スクリプトも作ってくれたので、結構使えそうな気がしています。
- AuroraがServerlessだったり、DynamoDBがオンデマンドだったりするので、そのままがっつり使うのであれば、利用料金と必ずご相談ください。
- ChatGPTにもありますが、RAG(社内ナレッジを提供させる)を活用したボットを作れるみたいなので、機会あれば試してみます。
プロフィール
テクニカルサポートは卒業して、フロントサイドでお客様環境の構築をさせていただいております。
たまに、テクニカルサポートでご対応させていただくことがあるかもしれませんが、その際はよろしくお願いいたします。
インフラ系のエンジニアですが、時々休日プログラマー(Python、PHP)をやっております。
LINK
クラウドベリージャム:プロフィールページ