[Amazon Bedrock] 話題の Amazon Bedrock をインターフェイス型 VPC エンドポイントでプライベートに利用したい

話題の Amazon Bedrock をVPC エンドポイント経由で利用してみました。インターネットを出ずに利用可能となれば利用の幅も無限大!
2023.09.29

こんにちは、AWS事業本部の平木です!

今か今かと待ち望んでいた AWS の生成 AI サービス、 Amazon Bedrock がついに一般公開されました!

サービス概要や AWS マネジメントコンソールでどのように使えるかは、他のブログで紹介されているためぜひ参照してみてください。
Amazon Bedrock の記事一覧 | DevelopersIO

今回は、そんな Amazon Bedrock(以下、Bedrock)をプライベートに利用したい!と思いブログにしました。

構成

AWS の様々なサービスは VPC エンドポイントを経由することで、
インターネットを経由せずに API を利用できます。

Bedrock は、利用可能なリージョンで VPC エンドポイントが用意されているため、
プライベートに利用したい場合にはインターフェイス型 VPC エンドポイントを活用することで実現可能です。

今回はせっかくなので東京リージョンに設置されたプライベートサブネット上の EC2 サーバから、
クロスリージョンでバージニア北部リージョンの VPCエンドポイントを経由して Bedrock を利用してみます。

他のリージョンの VPC エンドポイントを利用するには、
各リージョンの VPC をピアリング接続することで利用可能です。(その他セキュリティグループやルートテーブルの設定も適宜必要です。)

Bedrock の VPC エンドポイントは2種類あります。
それぞれ名称と役割は以下の通りです。

サービス名 役割
com.amazonaws.{REGION}.bedrock モデルの管理、トレーニング、デプロイ等の Bedrock の設定
com.amazonaws.{REGION}.bedrock-runtime Amazon Bedrock でホストされているモデルの推論リクエストを行う等の Bedrock のモデルの利用

今回は、Bedrock のモデルを利用するためcom.amazonaws.{REGION}.bedrock-runtimeのほうを使用します。

やってみた

Bedrock のモデルを利用可能にする

Bedrock を使用するにがまず各モデルを利用可能な状態にする必要があります。

詳細は下記ブログよりご確認ください。
AWSの生成AIサービス Amazon Bedrock がリリースされました | DevelopersIO

今回は複数あるモデルの中から、Jurassic-2 Mid を使用してテキストの生成をしてみます。

プライベートに利用してみる

今回は先ほどの構成図中の EC2 (Amazon Linux)サーバより AWS CLI を使って試してみました。

本日(2023/09/29)時点では AWS CLI バージョン2に対応していません。
AWS CLI で検証する場合には、AWS CLI バージョン1に下げて検証してください。
AWS CLI バージョン 2 のアンインストール - AWS Command Line Interface
Linux での AWS CLI バージョン 1 のインストール、更新、アンインストール - AWS Command Line Interface
本日(2023/10/03)時点で確認したところ AWS CLI バージョン2に対応しました。

AWS CLI の最新バージョンで確認すると、
bedrock-runtimeが追加されていることが分かります。

またこのサービス名で AWS CLI の Reference を確認すると、
AWS CLI バージョン1: bedrock-runtime — AWS CLI 1.29.57 Command Reference
AWS CLI バージョン2: bedrock-runtime — AWS CLI 2.13.23 Command Reference
にて CLI の Reference を確認できました。

下記が簡単な使用方法です。

aws bedrock-runtime invoke-model \
    --model-id {モデル名} \
    --body "{プロンプト}" {出力したいファイル名}

今回は、VPC エンドポイントを経由したプライベートアクセスなため下記のようになります。
--endpoint-urlの引数には VPC エンドポイントの固有の DNS 名を入れます。

aws bedrock-runtime invoke-model \
 --body "{\"prompt\": \"{テキストプロンプト}\"}" \
 --model-id "{モデル名}" \
 --endpoint-url "{エンドポイントのDNS名}" \
 --region {リージョン名} {出力したいファイル名}

このまま実行すると{出力したいファイル名}にしたファイルへ出力結果が JSON 形式で出力されるため、
そのまま標準出力に出してみたい場合には、下記のようなコマンド例になります。
また、プロンプトにはmaxTokenstemperaturetopPも指定することで入出力のパラメータを調整可能です。

aws bedrock-runtime invoke-model --debug \
 --body "{\"prompt\": \"日本で一番人口の多い都道府県はどこですか?\",\"maxTokens\": 100}" \
 --model-id "ai21.j2-mid-v1" \
 --endpoint-url "https://vpce-xxxxxxxxxxxxxxxx-xxxxxxxx.bedrock-runtime.us-east-1.vpce.amazonaws.com" \
 --region us-east-1 outfile > /dev/null && cat ./outfile | jq -r .completions[].data.text

上記を実際に実行してみると、

「日本で一番人口の多い都道府県は東京都です。住民数は約13百万人です。」 と返ってきました!

ちなみに VPC エンドポイントを指定しない状態の場合、レスポンスが返ってきません。
debug オプションを付与し確認すると、グローバル IP が返るエンドポイントを経由しようとしているため、止まっています。

以上がインターフェイス型 VPC エンドポイントを経由した Bedrock の利用方法でした。

追記

執筆当初(2023/09/29)は、まだ東京リージョンでは Bedrock を使用できませんでしたが、
本日(2023/10/03)より東京リージョンもサポートされました。

Bedrock が東京リージョンをサポートしていない時の方法をご紹介しましたが、
現在は東京リージョンにも同様に VPC エンドポイントが用意されているため、
東京リージョンの EC2 インスタンスから Bedrock を使用したい場合は、
クロスリージョンとする必要はなく、東京リージョンの VPC エンドポイントから利用可能です。

※東京リージョンの Bedrock では一部モデルが使用できないなど現状制約があるため、
場合によってはクロスリージョンで使用する必要はあります。

参考

終わりに

今回は、本日一般公開された Amazon Bedrock をプライベートに利用してみました。

独自のデータからカスタムモデルを作成する項目をあるようなので、自社のデータからプライベートモデルを作成し、セキュアに接続する需要が出てくると思われます。
また、オンプレミスから専用線を経由して Bedrock を利活用するようなシーンも今後出てくるのかなと思うとわくわくしますね!
Bedrock の登場で様々なサービスの活用の仕方の幅が広がっていくと期待されると思いますのでぜひみなさんも試してみてください!

この記事がどなたかの役に立てば嬉しいです。