こちらのイベントにて登壇させていただきました。
その中で、「東京リージョンからバージニア北部のBedrockを呼び出すことはできるの?ネットワーク的に大丈夫なの??」という質問をいただきました。
東京リージョンからバージニア北部のBedrockを呼び出す方法
書籍「Amazon Bedrock 生成AIアプリ開発入門 [AWS深掘りガイド]」のP.92の「2_invoke-model.py」を例にします。(コードはGitHubに公開しています→こちら)
Bedrockクライアントを作成する際に、リージョンを指定するだけでOKです。
# Bedrockクライアントを作成
bedrock = boto3.client("bedrock-runtime")
# Bedrockクライアントを作成
bedrock = boto3.Session(region_name="us-east-1").client("bedrock-runtime")
東京リージョンに構築したCloud9でプログラムを動かします。
変更前のソースはリージョンが未指定のため、暗黙的のCloud9と同じリージョンのBedrockを呼び出そうとします。
しかし、東京リージョンのClaude 3は提供されていないため、以下のエラーとなります。
botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the InvokeModel operation: The provided model identifier is invalid.
変更後のソースは、リージョンを明示的に指定することで、バージニア北部リージョンのBedrockを呼び出します。
"Bedrock"には主に2つの意味があります。
1. 地質学の用語として、岩盤の最下部を指す言葉です。土壌や砂礫の下にある、しっかりとした固い岩盤のことを指します。
2. 転じて、何かの基礎や礎となる部分を表す比喩的な表現として使われます。例えば、"The bedrock of our society is family values." (家族の価値観が我々社会の礎となっている)などと言われます。揺るぎない土台や基盤という意味合いがあります。
人工知能の分野でも"Bedrock"という言葉が使われる場合があり、システムの根本的な部分や、基盤となるアーキテクチャなどを指す言葉として使われることがあります。
要するに、"Bedrock"とは物事の下支えとなる最も基礎的で重要な部分を表す言葉なのです。
ネットワーク的に大丈夫なのか??
AWSのVPCに関するFAQに以下の記述があります。
2 つのインスタンスがパブリック IP アドレスを使用して通信する場合、またはインスタンスがパブリックな AWS のサービスエンドポイントと通信する場合、トラフィックはインターネットを経由しますか?
いいえ。パブリック IP アドレスを使用する場合、AWS でホストされているインスタンスとサービス間のすべての通信は AWS のプライベートネットワークを使用します。AWS ネットワークから発信され、AWS ネットワーク上の送信先を持つパケットは、AWS 中国リージョンとの間のトラフィックを除いて、AWS グローバルネットワークにとどまります。さらに、データセンターとリージョンを相互接続する AWS グローバルネットワークを流れるすべてのデータは、安全性が保証された施設を離れる前に、物理レイヤーで自動的に暗号化されます。すべての VPC クロスリージョンピアリングトラフィックや、カスタマーまたはサービス間のトランスポート層セキュリティ (TLS) 接続などといった追加の暗号化レイヤーもあります。
要約すると、 AWS内の通信は、AWSのプライベートネットワークの中にとどまり、更に通信は暗号化される ということです。
書籍中でも解説しております。
リージョンを跨ぐアーキテクチャでも安心して利用できると思います。