AWSのブログ - TECH PLAY

TECH PLAY

AWS

AWS の技術ブログ

3661

本稿は 2025 年 1 月 27 日に公開された “ Introducing the GraphRAG Toolkit ” を翻訳したものです。 Amazon Neptune チームは 2025 年 1 月 21 日に GraphRAG Toolkit を リリース しました。これは、グラフデータベースを活用した検索拡張生成 (Retrieval Augmented Generation; RAG) ワークフローの構築を容易にするオープンソースの Python ライブラリです。このツールキットは、非構造化データから、ベクトル埋め込みを含むグラフを自動的に構築するフレームワークを提供します。ユーザーの質問に答える際に、構造的に関連する情報を取得するために、このグラフをクエリする質問応答戦略を組み立てることができます。 本稿では、GraphRAG Toolkit の使い方について説明します。まず、RAG アプリケーションにグラフを追加することのメリットについて説明します。次に、クイックスタート環境のセットアップ方法とツールキットのインストール方法を説明します。最後に、このツールキットのグラフモデルとコンテンツ取得アプローチに至った設計上の考慮点について説明します。 なぜ RAG アプリケーションにグラフを追加するのか? 以下のような 架空の 物語を考えてみましょう。これは数週間にわたる、様々な架空のニュース記事、プレスリリース、業界出版物、アナリストレポートを集めたものであり、他の多くの文書と共に RAG ワークフローに投入されると想定しています。 Example Corp (人気の個人用ガジェットである “Widget” を製造する米国企業) は最近、国際的な輸送、保管、ラストマイル配送を提供する AnyCompany Logistics と提携することで、世界的な流通チャネルを拡大しました。“Widget” は、新世代の生成 AI テクノロジーによって会話機能を備えた AI 搭載のパーソナルデスクトップペットです。オースティンを拠点とする Example Corp の研究所で開発され、台湾で製造されています。 まだ 8 月であるにもかかわらず、英国のクリスマストップ 10 おもちゃの予測が既に発表されており、業界アナリストは Example Corp のおしゃべりデスクトップペット “Widget“ への大きな需要を予測しています。ロンドン、マンチェスター、その他の主要都市の小売業者は既に 100 万台以上 (1,500 万ドル相当) の注文を行っており、クリスマスまでの数ヶ月でその数字はさらに増加する見込みです。 AnyCompany Logistics は本日、最近開通した Fictitious Canal (架空の運河) を通じて全ての配送を行うことで、 2 週間かかっていた台湾から英国までの輸送時間を僅か 3 日に短縮すると発表しました。Fictitious Canal は、製造業者や流通業者がエネルギー消費とコストを削減するため、空輸から海運への移行を検討する中で、今後 5 年間で最も交通量の多い水路のひとつになる見込みです。 Fictitious Canal で地滑りが発生し、閉塞と遅延が続いています。現在、500 万トン以上の岩が南部水域を塞ぎ、コンテナ船を閉じ込め、国際サプライチェーンを混乱させています。ヨーロッパ向けの商品は数ヶ月の遅延が予想され、多くの小売業者のクリスマス在庫が危機にさらされています。 あなたがアナリストだとしましょう。どんなことを知りたいでしょうか?例えば、Example Corp の英国での販売見通しはどうか調査したいとします。 まず、ベクトルベースの主要な RAG アプリケーションに質問したところ、以下のような回答が得られました。 提供されたコンテキストに基づくと、 Example Corp の Widget 製品の英国での販売見通しは、きたるクリスマスシーズンに向けて非常に明るいものとなっています。業界アナリストは Widget おしゃべりデスクトップペットへの大きな需要を予測しており、クリスマスのトップ 10 おもちゃにもランクインしています。ロンドンやマンチェスターなど英国の主要都市の小売業者は既に 1,500 万ドル相当の 100 万台以上の注文を行っており、クリスマスが近づくにつれてさらに注文数は増加すると予想されています。このコンテキストは、 Example Corp が重要な年末商戦期間中、英国市場で Widget 製品の非常に高い販売量と収益を見込めることを示唆しています。 次に、 GraphRAG Toolkit を使用して構築されたアプリケーションに質問したところ、以下のような回答が得られました。 検索結果に基づくと、 Example Corp のおしゃべりデスクトップペット Widget の英国での販売見通しは当初非常に有望ですが、後にサプライチェーンの問題が販売を妨げる可能性があります。 検索結果によると、ロンドンやマンチェスターなど英国の主要都市の小売業者は、大きな需要を見込んで Widget 製品の 100 万台以上の注文を既に行っています。業界アナリストもこのおもちゃへの高い需要を予測しています。 この予想される需要に応えるため、 Example Corp は AnyCompany Logistics と提携して、英国を含む世界的な流通チャネルを拡大しています。 AnyCompany Logistics は、新たに開通した Fictitious Canal を経由して輸送することで、台湾から英国までの輸送時間を 2 週間から僅か 3 日に短縮する計画を発表していました。 しかし、 Fictitious Canal では地滑りによる大規模な閉塞が報告されており、500 万トン以上の岩が南部水域を塞ぎ、コンテナ船を閉じ込めています。これにより国際サプライチェーンが混乱し、英国を含むヨーロッパ向けの商品が数ヶ月遅延する可能性があります。 そのため、 Example Corp の Widget 製品の英国での初期の販売見通しは、予約注文と予想される需要に基づいて非常に有望に見えますが、状況が早急に解決されない場合、 Fictitious Canal の閉塞によるサプライチェーンの問題が今後数ヶ月間の需要への対応能力を妨げるリスクがあります。 なぜ回答にこれほどの大きな違いがあるのでしょうか?グラフアプローチは、ベクトルベースのアプローチにはない何を提供するのでしょうか? ベクトル検索では、問われている質問に対して意味的に類似している、つまり言語的に近い情報しか取得できません。類似していない情報は、構造的に取得できません。この例では、 AnyCompany Logistics による Fictitious Canal の使用と、現在 Fictitious Canal を悩ませている閉塞に関する断片情報は、問われている質問との類似性が十分でないため、ベクトルベースのソリューションではコンテキストに取り込まれません。たとえそれらが、より正確で完全な回答を作成する上で極めて重要な情報であったとしてもです。 情報検索における 関連性 (relevancy) は 関係性 (relatedness) という観点で考えることができます。質問に関連するものは、直接的または間接的に、その質問と何らかの関係があります。関係性は 類似性 (similarity) よりも広い概念です。意味的類似性は、私たちが興味を持つものが互いに関係する方法のひとつに過ぎません。例えば、テキスト A と B は意味的に類似しているために関係があると言えるでしょう。しかし、物事が関係を持つ方法は他にもたくさんあります。時間や空間における連続性、因果関係、親子関係、部分-全体関係、あるいは社会的、組織的、法的、分類学的な関係など、このリストは無限に続きます。物事が関係する方法や、それらの関係の相対的な重要性、強さ、質は、業界ドメインによって異なりますが、「意味的に類似している」ことは RAG 検索ツールボックスのひとつのツールに過ぎないと言えます。 私たちのドメインをグラフとしてモデル化し、グラフのエッジを使って私たちにとって重要な異なるタイプの関係を表現することで、質問とは異なるものの、正確で完全な回答を作成する上で構造的に関連する情報へのアクセスを提供できます。 類似性に基づく検索は依然として重要な RAG 戦略であり、質問と意味的に類似したコンテキストは、しばしば良い回答の基礎となります。しかし、類似性に基づく検索だけでは、ニュアンスのある回答を生成するのに常に十分というわけではありません。多くの場合、比較、議論、要約を展開するためのより差別化されたコンテキストを質問応答プロセスに提示するために、ベクトル類似度検索では見つけられない情報を見つけて返す必要があります。グラフ内の関係は、検索プロセスがこのような追加の関連情報を見つけるための手段を提供します。 GraphRAG Toolkit すべての RAG アプリケーションは、インデックス化 (indexing) とクエリ処理 (querying) というふたつのコア機能を中心に構築されています。 GraphRAG Toolkit は、データをグラフとベクトルストアにインデックス化し、このグラフから関連コンテンツを取得する質問応答ソリューションを構築するために使用できるオープンソースの Python ライブラリです。 ツールキットの第 1 版では、非構造化および半構造化テキストコンテンツ (ウェブページ、PDF、JSON ドキュメントなど) を用いてグラフベースの RAG アプリケーションを構築することに焦点を当てています。ツールキットのセットアップと実行の詳細については、この投稿の後半にある「GraphRAG Toolkit のインストール」セクションをご参照ください。 インデックス化 コンテンツのインデックス化は、少量のコードで実現できます。 from graphrag_toolkit import LexicalGraphIndex from graphrag_toolkit.storage import GraphStoreFactory from graphrag_toolkit.storage import VectorStoreFactory from llama_index.readers.web import SimpleWebPageReader import nest_asyncio nest_asyncio.apply() doc_urls = [ 'https://docs.aws.amazon.com/neptune/latest/userguide/intro.html', 'https://docs.aws.amazon.com/neptune-analytics/latest/userguide/what-is-neptune-analytics.html', 'https://docs.aws.amazon.com/neptune-analytics/latest/userguide/neptune-analytics-features.html', 'https://docs.aws.amazon.com/neptune-analytics/latest/userguide/neptune-analytics-vs-neptune-database.html' ] docs = SimpleWebPageReader( html_to_text=True, metadata_fn=lambda url:{'url': url} ).load_data(doc_urls) graph_store = GraphStoreFactory.for_graph_store( 'neptune-db://my-graph.cluster-abcdefghijkl.us-east-1.neptune.amazonaws.com' ) vector_store = VectorStoreFactory.for_vector_store( 'aoss://https://abcdefghijkl.us-east-1.aoss.amazonaws.com' ) graph_index = LexicalGraphIndex( graph_store, vector_store ) graph_index.extract_and_build(docs) LexicalGraphIndex はコンテンツのインデックス化の主要な手段です。この例で示すように、連続取り込み方式で使用できます。コンテンツは一連の抽出とビルドのステージを通してパイプライン処理され、グラフはすぐにデータで埋められ始め、取り込みが続いている最中でもクエリを実行できるようになります。また、抽出とビルドのステージを別々に実行することもできます。1 回限りのジョブを実行する場合だけでなく、同じ抽出されたコンテンツを再利用してグラフを複数回構築したい場合にこの仕組みが役立ちます。 LexicalGraphIndex は、グラフストアとベクトルストアで構成されています。この例では、 Neptune Database グラフストアと Amazon OpenSearch Serverless ベクトルストアを使用しています。執筆時点で、このツールキットは Neptune Database と Neptune Analytics 、OpenSearch Serverless、およびコンテンツの抽出と埋め込みに使用される基盤モデル用の Amazon Bedrock をサポートしています。 前述の例では、インデックス化するコンテンツとして、 Neptune のドキュメントの複数ページを取り込んでいます。データをパースしてインデックスに取り込むために、 LlamaIndex の SimpleWebPageReader を使用しています。ソースデータの種類と場所に応じて、 SimpleDirectoryReader や JSONReader を含む他の LlamaIndex リーダーを使用してデータをインデックスにロードすることもできます。 クエリ処理 クエリ処理、つまり質問応答は、インデックス化と同じくらい簡単です。 from graphrag_toolkit import LexicalGraphQueryEngine from graphrag_toolkit.storage import GraphStoreFactory from graphrag_toolkit.storage import VectorStoreFactory import nest_asyncio nest_asyncio.apply() graph_store = GraphStoreFactory.for_graph_store( 'neptune-db://my-graph.cluster-abcdefghijkl.us-east-1.neptune.amazonaws.com' ) vector_store = VectorStoreFactory.for_vector_store( 'aoss://https://abcdefghijkl.us-east-1.aoss.amazonaws.com' ) query_engine = LexicalGraphQueryEngine.for_traversal_based_search( graph_store, vector_store ) response = query_engine.query('''What are the differences between Neptune Database and Neptune Analytics?''') print(response.response) クエリ処理は実際には 2 段階のプロセスです。基礎となるストレージから関連情報を取得することから始まり、その後、この情報を大規模言語モデルに渡して回答を生成します。 LexicalGraphQueryEngine はこの両方のステップをあなたに代わって実行します。 インデックス化の段階で LexicalGraphIndex を構成したときと同様に、ここでも、グラフストアとベクトルストアを引数にして LexicalGraphQueryEngine を構成しています。一見すると、これは少し冗長に思えるかもしれません。しかし、インデックス化とクエリ処理はそれぞれ異なるプロセスであり、異なる環境で、異なるマシン上で、異なる時間に実行される可能性があります。そのため、各プロセスを構成する際には個別にグラフストアとベクトルストアの URI を指定する必要があります。 GraphRAG Toolkit のインストール プロジェクトの GitHub リポジトリにあるクイックスタート用の AWS CloudFormation テンプレート を使用して、 GraphRAG Toolkit を使い始めることができます。このテンプレートは、 Neptune Database と OpenSearch Serverless コレクション、そしてサンプルコードを含む Amazon SageMaker ノートブックインスタンスを作成します。これらの例では、 Amazon Bedrock の基盤モデルを使用してコンテンツの抽出と埋め込み、および回答の生成を行います。 前提条件 テンプレートを実行する前に、 Amazon Bedrock で適切な基盤モデルへのアクセスを有効にしていることを確認してください。デフォルトのモデルは以下の通りです: anthropic.claude-3-sonnet-20240229-v1:0 cohere.embed-english-v3 クイックスタートの例で構成されているモデル以外でも、ツールキットを 構成する ことができます。 CloudFormation スタックは、これらのモデルを提供している AWS リージョンで実行する必要があり、ノートブック例を実行する前に モデルへのアクセスを有効にする 必要があります。 CloudFormation スタックのデプロイ 以下のスクリーンショットは、 CloudFormation テンプレートのスタックの詳細を示しています。 まず、スタック名を指定する必要があります。ほとんどのパラメータには適切なデフォルト値が設定されていますが、変更したい項目がいくつかあるかもしれません。 ApplicationId – Neptune クラスターとインスタンス、 OpenSearch Serverless コレクションを含むデプロイメント内のリソースの名前付けに使用される一意の識別子を指定する。 IamPolicyArn – SageMaker ノートブックインスタンスにアタッチされる追加の AWS Identity and Access Management (IAM) ポリシーの Amazon リソースネーム (ARN) を指定する。このカスタムポリシーには、特定の Amazon Simple Storage Service (Amazon S3) バケットや追加の Amazon Bedrock 基盤モデルなど、使用したい追加リソースへのアクセス権限を含めることができる。 なお、このテンプレートは以下のリソースを作成します。 3 つのプライベートサブネット、1 つのパブリックサブネット、およびインターネットゲートウェイを持つ仮想プライベートクラウド (VPC) 単一の Neptune サーバーレスインスタンスを持つ Neptune Database クラスター パブリックエンドポイントを持つ OpenSearch Serverless コレクション GraphRAG Toolkit のサンプルノートブックを含む SageMaker ノートブック スタックのデプロイメントが完了したら、 SageMaker サンプルノートブックを開くことができます (スタックの Outputs タブに、ノートブックインスタンスへのリンクを含む NeptuneSagemakerNotebook 出力パラメータがあります)。そして、コンテンツのインデックス化とクエリ処理を開始できます。 ノートブックの実行 ノートブック「 01 – Combined-Extract-and-Build 」は良い出発点です。各ノートブックの最初のセルでは、 GitHub リポジトリからツールキットをインストールします。なお、このインストールは、デプロイメントごとに 1 回だけ実行する必要があるもので、各ノートブックごとに実行する必要はありません。 インストールが完了したら、2 番目のセルを実行できます。これによりサンプルコンテンツのインデックスが作成されます。 インデックス化が完了したら、コンテンツへのクエリ処理を開始できます。 ノートブック「 04 – Querying 」では、ツールキットに含まれる異なるクエリ戦略を試すことができます。 リソースのクリーンアップ デプロイされたリソースはアカウントに課金されます。不要な料金 (米国東部 (バージニア北部) リージョンで約 1.5 ドル/時) が発生しないよう、使用し終わったら スタックを削除 することを忘れないでください。 独自のアプリケーションの構築 ツールキットを使用するためには必ずしもクイックスタート用の CloudFormation テンプレートを起動する必要はありません。独自の環境にツールキットをインストールし、他のライブラリやサービスとツールキットを組み合わせて独自の Python アプリケーションを構築できます (あらかじめ必要なグラフとベクトルストアのリソースをプロビジョニングし、適切な基盤モデルへのアクセスを事前に確保する必要はあります)。 ツールキットとその依存関係は pip を使用してインストールできます (現在、ツールキットは PyPi では配布されていませんが、プロジェクトの GitHub リポジトリ上で頻繁にリリースしています)。最新バージョンをインストールするには、プロジェクトのホームページにある インストール手順 に従ってください。 プロジェクトの ドキュメント には、 インデックス化 と クエリ処理 プロセスの設定と実行に関する多くの例が含まれています。これらの例を自分のアプリケーションで使用するように適応できます。ドキュメントの例はノートブック環境で実行するように書かれています。メインエントリーポイントを持つアプリケーションを構築する場合は、アプリケーションロジックをメソッド内に配置し、 if __name__ == ’__main__' ブロックを追加する必要があります: import os from graphrag_toolkit import LexicalGraphIndex from graphrag_toolkit.storage import GraphStoreFactory from graphrag_toolkit.storage import VectorStoreFactory from llama_index.readers.web import SimpleWebPageReader import nest_asyncio nest_asyncio.apply() def run_extract_and_build(): graph_store = GraphStoreFactory.for_graph_store( 'neptune-db://my-graph.cluster-abcdefghijkl.us-east-1.neptune.amazonaws.com' ) vector_store = VectorStoreFactory.for_vector_store( 'aoss://https://abcdefghijkl.us-east-1.aoss.amazonaws.com' ) graph_index = LexicalGraphIndex( graph_store, vector_store ) doc_urls = [ 'https://docs.aws.amazon.com/neptune/latest/userguide/intro.html', 'https://docs.aws.amazon.com/neptune-analytics/latest/userguide/what-is-neptune-analytics.html', 'https://docs.aws.amazon.com/neptune-analytics/latest/userguide/neptune-analytics-features.html', 'https://docs.aws.amazon.com/neptune-analytics/latest/userguide/neptune-analytics-vs-neptune-database.html' ] docs = SimpleWebPageReader( html_to_text=True, metadata_fn=lambda url:{'url': url} ).load_data(doc_urls) graph_index.extract_and_build(docs, show_progress=True) if __name__ == '__main__': run_extract_and_build() グラフモデルとクエリ戦略の設計 RAG ソリューションを設計する際は、特定のワークロードのニーズをサポートできる適切な検索と生成の戦略、および基盤となるインデックス化とストレージの仕組みを決定するために、Working Backwards (お客様を起点に考える) アプローチを採用するといいでしょう。ワークフローは、どのような質問応答やエンドユーザー、アプリケーションのデータニーズを満たすことを意図していますか?それらのニーズを満たすためにどのようなデータを取得する必要がありますか?どのような検索戦略がこのデータをコンテキストウィンドウに最も効果的に提供しますか?そして、どのようなインデックス構造やデータモデルがそのような検索を最も効率的に促進しますか? GraphRAG Toolkit は、非構造化および半構造化テキストコンテンツに対する質問応答ワークフローをサポートするように設計されており、特に複数の潜在的に無関係なソースから、またはベクトルベースのソリューションのみでは構造的にアクセスできない情報から関連情報を取得する必要があるワークフローをサポートします。これらは 検索ベース のワークフローと呼ぶことができ、数値結果の計算を必要とする カウントベース や 集計ベース のワークフローとは異なります。 検索ベースのワークフローのニーズを満たすために、システムは質問応答プロセス、つまり基盤モデルに対して関連するテキストコンテンツの断片 (テキストのスニペット、または語彙単位 (lexical unit)) を渡す必要があります。これを念頭に置いて、最初に取り組まなければならない設計上の決定のひとつは、 基盤モデルに提供されるコンテキストの基礎となる語彙単位のサイズはどのくらいにすべきか、ということでした。多くの RAG アプリケーションでは、コンテキストの主要な単位はチャンクです。つまり、コンテキストウィンドウはコーパスから取得されたひとつ以上のチャンクで構成されます。異なるチャンク分割戦略は異なるサイズのチャンクを生成します (チャンクの万能な定義はありません) が、チャンクは通常、個々の文よりも大きく、文書全体よりも小さいものです。 GraphRAG Toolkit では、コンテキストの主要な単位はチャンクではなく、独立した主張や命題である ステートメント (statement) です。ソース文書はチャンクに分割され、これらのチャンクからステートメントが抽出されます。ステートメントは トピック (topic) ごとにテーマ別にグループ化され、 事実 (fact) によって裏付けられます。質問応答時に、ツールキットはトピックでグループ化された関連ステートメントのセットを取得し、基盤モデルのコンテキストウィンドウに渡します。 基盤モデルにステートメントの形で語彙単位を提供するという要件により、 語彙グラフ (lexical graph) モデルと、語彙グラフモデルをターゲットとする抽出プロセスを設計することになりました。この語彙グラフには 3 つの階層があります。 系統 (lineage) – ソース、チャンク、およびそれらの間の関係。下図の水色パート。 要約 (summarization) – トピック、ステートメント、およびステートメントを裏付ける事実。下図の緑色パート。 エンティティ-関係 (entity-relationship) – 基礎となるソースから抽出された個々のエンティティと関係。下図の赤色パート。 以下の図は、全体的な語彙グラフモデルを示しています。 このグラフモデルの詳細については、ツールキットの ドキュメント で確認することができます。このセクションでは、緑色で示されている「要約」階層についてより深く掘り下げます。 グラフモデルを設計する際、私たちはしばしばこのモデルを、興味のある物事を表現する能力という観点で考えます。もうひとつの、しかし補完的な視点は、モデルがサポートすることを意図しているアプリケーションとデータのニーズの文脈における、各モデル要素の役割や責任を考えることです。ツールキットのために特定した検索ベースのワークフローのニーズの文脈では、モデルは質問に直接または間接的に関連する離散的な語彙単位の取得をサポートする必要があります。モデルがこの関連性や接続性 (connectedness) をどのように示し適用するかが、検索戦略の効果を大きく決定します。単にすべてのものをすべてのものに結びつけてしまうと、無関係な情報の海の中から関連するコンテキストの単位を抽出することが難しくなります。一方、グラフ内の要素間の接続をほとんど許可しないモデルは、関連はあるものの意味的に異なる情報を発見する機会を減らします。よく設計されたグラフはバランスを取ります。関連性を薄めてしまう膨大な量の接続を避けながら、文脈的に重要だが明白でない関係を発見するのに十分な接続を確保します。 要約階層の要素は、いくつかの異なる責任を果たします。語彙単位の取得に関して、ステートメント (statement) は基盤モデルに返される主要なコンテキストの単位として機能します。接続性に関して、要約階層はローカルとグローバルの接続性を区別します。トピック (topic) は同じソースから派生したステートメント間のローカルな主題的接続を提供します。事実 (fact) は異なるソースから派生したステートメント間のグローバルな接続を提供します。また、トピックと事実には二次的な責任もあります。トピックはステートメントをグループ化する役割を果たし、事実はステートメントに注釈を付けたりより詳細な情報を提供したりします。ローカルとグローバルの接続性の責任のこの区分により、検索戦略はグラフの探索を制御できます。例えば、リトリーバー (retriever) はより遠い機会を試験的に探索しつつ、主にローカルに留まることを選択できます。あるいは、広く探索し始めてから、最も有望なトピックに絞り込むこともできます。 グラフからコンテンツを取得する際、検索戦略はまずひとつ以上の適切なエントリーポイントを見つけ、その後関連するステートメントに移動します。ベクトルストアはここでエントリーポイントを見つけるのに重要な役割を果たします。現在の語彙グラフの実装では、ステートメントとチャンクの両方が埋め込まれています。そのため、リトリーバーはチャンクレベルまたはステートメントレベルで質問と意味的に類似したエントリーポイントを見つけ、そこから近隣のローカルステートメントを探索し、より間接的に接続された遠いステートメントにホップすることができます。リトリーバーはまた、エンティティ-関係階層のエンティティに対してキーワード検索を実行し、そこからステートメントとトピックに移動することもできます。この方法は通常、より広範なステートメントのセットを生成します。 ツールキットには現在、 TraversalBasedRetriever と SemanticGuidedRetriever というふたつの異なる高レベルのリトリーバーが含まれています。 TraversalBasedRetriever は、ベクトル類似度検索を通じてチャンクを見つけ、これらのチャンクからトピックを通じてステートメントと事実に移動するトップダウン検索と、エンティティのキーワードベースの検索を実行し、事実からステートメントとトピックに進むボトムアップ検索を組み合わせて使用します。 SemanticGuidedRetriever は、ベクトルベースの意味検索と構造化されたグラフ走査を組み合わせます。意味検索とキーワード検索を通じてエントリーポイントを特定し、その後ビーム検索 (beam search) とパス分析 (path analysis) を通じてグラフをインテリジェントに探索し、再ランク付け (reranking) と多様性フィルタリング (diversity filtering) を使用して質の高い結果を得ます。このハイブリッドアプローチにより、正確なマッチングと文脈的な探索の両方が可能になります。 まとめ この記事では、 GraphRAG Toolkit の使い方について説明しました。このオープンソースの Python ライブラリは、構造的に関連する情報を取得するためにグラフを使用する RAG アプリケーションの構築を支援できます。 ぜひ、ご自身のユースケースで ツールキット を試してみて、フィードバックを共有してください。 著者について Ian Robinson は Amazon Neptune のプリンシパルグラフアーキテクトです。著書に「Graph Databases」と「REST in Practice」(いずれも O’Reilly 出版) があり、「REST: From Research to Practice」(Springer) と「Service Design Patterns」(Addison-Wesley) の共著者です。 Abdellah Ghassel は Amazon Neptune の機械学習エンジニアとしてインターンをしています。 本稿の翻訳は AWS Japan の機械学習スペシャリストソリューションアーキテクトの本橋が担当しました。
近年、企業や組織において、生成 AI を自社のプロダクトに組み込む取り組みが広がっています。生成 AI は、テキスト生成、画像や動画の生成、音声生成など、様々な分野で活用されるようになり、業務の効率化や新しい価値の創出などに期待が高まっています。 一方で、生成 AI を自社のプロダクトに組み込むにあたっては、セキュリティ面での課題にも十分に注意を払う必要があります。生成 AI は、機械学習や自然言語処理などの高度な技術を用いて構築されるため、従来のプロダクトとは異なる脆弱性が存在する可能性があります。例えば、生成 AI が不正に操作されて、偽のコンテンツを生成されたり、機微情報が漏洩したりするなど、深刻な影響が生じる可能性が指摘されています。 これらの脅威への対策は、生成 AI に関わるプロダクトを開発する企業や組織にとって重要な課題となっています。生成 AI のセキュリティ対策については、さまざまな組織や団体からセキュリティフレームワークが提案されてきています。このブログでは、OWASP が生成 AI アプリケーションにおける主要な 10 のセキュリティ脅威をまとめた OWASP Top10 for LLM Applications を参照しながら、AWS 上で生成 AI アプリケーションを設計・開発する方が考慮すべきポイントやリスクシナリオを概説します。 OWASP Top10 for LLM Applications は 2024 年 11 月にVersion 2025 が公開 されました。生成 AI の技術や活用が進むにつれて脅威も変化します。このブログでは、以前の Version との差分などに触れながら、具体的な事例や対策方法をご紹介します。生成 AI を安全に活用していくためのヒントが見つかるはずです。ぜひ最後までお読みください。 Amazon Bedrock を用いた基本的な生成 AI アプリケーションのアーキテクチャとコンポーネント AWS 上で構成される生成 AI アプリケーションをベースに OWASP Top 10 for LLM Applications の考慮事項を考えられるように、まずは基本的な生成 AI アプリケーションのアーキテクチャについて説明します。 図 1: 基本的な生成 AI アプリケーションのアーキテクチャの例 構成要素となるコンポーネントの例 以下で、図 1 の基本的な生成 AI アプリケーションのアーキテクチャで扱われているサービスをご紹介します。 Amazon Cognito :ユーザーがアプリケーションを利用する前に認証を行います。 生成 AI アプリ:ユーザーに対してウェブのインターフェースを提供します。またユーザーのリクエストを処理するために、各コンポーネントとの一連のやり取りをオーケストレーションします。一例として静的コンテンツを Amazon Simple Storage Service (Amazon S3) へホスティングし Amazon CloudFront で配信し、動的コンテンツについては Amazon API Gateway で API としてリクエストを受け付けサーバーレスの AWS Lambda で処理をするように構成する場合があります。または仮想サーバーの Amazon Elastic Compute Cloud (Amazon EC2) やコンテナ実行環境の Amazon Elastic Container Service (Amazon ECS) を利用したウェブサーバやアプリケーションサーバを構成する場合もあります。 Amazon DynamoDB :ユーザーの会話履歴を NoSQL のデータベースに保存します。 Amazon Bedrock : 大規模言語モデル (Large Language Model:LLM):ユーザーのリクエストを基に回答を生成する大規模言語モデルです。 ナレッジベース:LLM が事前学習していない (LLM 自体には学習させたくない) ユーザー固有の情報を生成 AI アプリケーションが利用できるようにするために、他のデータソースとの接続をマネージドに提供します。 埋め込みモデル:データソースに含まれるテキストなどの情報の埋め込みを行いベクトルデータに変換します。 ベクトルデータベース:埋め込みモデルで変換されたベクトルデータを保存し、ユーザからのリクエストに基づいてベクトルデータベース内を検索します。例として Amazon OpenSearch Service などがあります。 Amazon S3:LLM が事前学習していないユーザー固有の情報を生成 AI アプリケーションが利用できるようにするために、ユーザー固有の情報を保管するデータソースです。 生成 AI アプリケーションの動作 事前準備: a. 事前にアプリケーションで利用するユーザー固有の情報を S3 バケットへ格納しておきます。 b. ナレッジベースを S3 がデータソースとするように構成し、データを同期します。これにより S3 バケットに含まれる情報が埋め込みモデルによって処理されます。 c. 埋め込みモデルによって処理された情報はベクトルデータベースである OpenSearch Service へ保管されます。 アプリケーションのデータフロー: ユーザーはアプリケーションにアクセスすると Cognito にリダイレクトされ、認証を行います。 ユーザーはチャットベースのインターフェース上で、リクエストをプロンプトとして記入し送信します。 (過去のチャット履歴を参照するような処理をしている場合) アプリケーションは認証情報に含まれるユーザー ID から過去のチャット履歴を照会し、内容を取得します。 アプリケーションはユーザーのプロンプトに関連する情報を検索するために、プロンプトの文言をナレッジベースで検索します。この動作の過程でユーザーのプロンプトは埋め込みモデルでベクトル化され、ベクトルデータベース上で検索されます。これによりユーザーのプロンプトに関連性の高い情報を効率的に検索することが可能です。結果、アプリケーションはユーザーのプロンプトに関連性の高い情報と、その情報のメタデータ (ファイル名、ファイルのパスなど) を取得します。 アプリケーションは [2] で取得したユーザーのプロンプト、[3] で取得した会話履歴、[4] で取得した関連性の高い情報とそのメタデータを LLM に入力し、LLM の推論結果を取得します。 [5] で取得した LLM の推論結果をユーザーに返答します。 OWASP Top 10 for LLM Applications の概要と更新点 OWASP Top10 for LLM Applications では生成 AI アプリケーションの 10 の主要な脆弱性と、それぞれの脅威の概要やリスクシナリオが各項目ごとに示されています。2023 年 10 月に Version 1.1 が公開されていましたが、2024 年 11 月には Version 2025 がリリースされました。 前回の Version  と比べてどのような変更がなされたのでしょうか。図 2 に変更点を独自に整理した内容を記載します。 図 2: OWASP Top 10 for LLM Applications の Version 1.1 と Version 2025 の変更点比較 まず、注目すべきは順位の変化です。以前の Version では 6 位だった「機微情報の漏えい」が 2 位にランクアップしています。一方で、1 位の「プロンプトインジェクション」は変わっていません。 新たな項目として、「LLM07:2025 システムプロンプトの流出」、「LLM08:2025 ベクトル化と埋め込みの脆弱性」の 2 つが追加されました。「システムプロンプトの流出」は、ユーザーの入力のようなユーザープロンプトとは別に、本来は生成 AI アプリケーションの内部で制御に使用されるプロンプト (システムプロンプト) が不正に流出し、悪用される可能性のある脆弱性です。システムプロンプトには機微情報が含まれていたり、不適切な出力を生み出さないような出力を制御する内容が記載されている可能性があるため、システムプロンプトの適切な利用や管理が重要になります。 また、「ベクトル化と埋め込みの脆弱性」は、Retrieval Augmented Generation (RAG) を使用する生成 AI アプリケーションにおけるセキュリティリスクです。RAG では、事前学習済みの言語モデルとベクトル化された外部のデータソースを組み合わせることで、応答の性能と文脈の関連性を高めています。しかし、ベクトルや埋め込みの生成、保存、検索の方法に脆弱性があると、悪意のある行為 (意図的または非意図的) によって有害なコンテンツの注入、モデル出力の操作、機微情報へのアクセスなどが可能になる可能性があります。 OWASP Top 10 for LLM Applications の脆弱性と生成 AI アプリケーションとのマッピング OWASP Top 10 for LLM Applications の各脆弱性を AWS 上で構成する生成 AI アプリケーションで考えられるように、図2 のアーキテクチャ上にマッピングしてみましょう。 図 3: OWASP Top 10 for LLM Applications の各項目のマッピング 今回例示しているような生成 AI を活用したチャットボットのようなシンプルなアプリケーションであっても、各考慮事項がアーキテクチャ上のコンポーネントを幅広くとらえていることが図 3 からも分かります。 本ブログでは、この中から、特に Version 2025 で新たに追加された、LLM07:2025 システムプロンプトの流出と、LLM08:2025 ベクトル化と埋め込みの脆弱性について着目し深堀します。この 2 点以外も重要な観点であり Version 1.1 から内容もアップデートされていますが、引き続き「 OWASP Top 10 for LLM を活用した生成 AI アプリケーションの多層防御セキュリティ設計 」の内容が参考になります。必要に応じてご活用ください。  Version 2025 で追加された新たな考慮事項 LLM07:2025 システムプロンプトの流出 システムプロンプトの流出のリスクとは、モデルの動作を制御するために使用されるシステムプロンプトに、本来第三者に閲覧されるべきではない機微情報が含まれたり、システムプロンプトに記載されるルールやユーザーの役割や権限、フィルタリングなどのセキュリティ制御を他者に知られてしまうことです。開発者はシステムプロンプトに機微情報を含めるべきではなく、セキュリティ制御として使用すべきではないことを理解することが重要です。 システムプロンプトの例として、GitHub で公開されている generative-ai-usecases-jp (通称: GenU) のサンプル実装で記載されている いくつかのユースケースでのシステムプロンプト を例として確認してみましょう。 文章要約ユースケース あなたは文章を要約する AI アシスタントです。 最初のチャットで要約の指示を出すので、その後のチャットで要約結果の改善を行なってください。 翻訳ユースケース 以下は文章を翻訳したいユーザーと、ユーザーの意図と文章を理解して適切に翻訳する AI のやりとりです。 ユーザーは <input> タグで翻訳する文章と、<language> タグで翻訳先の言語を与えます。 また、<考慮してほしいこと> タグで翻訳時に考慮してほしいことを与えることもあります。 AI は <考慮してほしいこと> がある場合は考慮しつつ、<input> で与えるテキストを <language> で与える言語に翻訳してください。 出力は <output> {翻訳結果} </output>の形で翻訳した文章だけを出力してください。 それ以外の文章は一切出力してはいけません。 システムプロンプトの流出における、予防と緩和戦略は主に 2 点になります。1 つ目は、API キー、認証キー、データベース情報、アプリケーションの権限構造などの機微情報をシステムプロンプトに含めることを避けてください。権限を分離し、機微情報にモデルが直接アクセスしないよう外部で管理することが望ましいです。 Amazon Bedrock Converse API の Tool Use (function calling) では モデルが直接ツールを利用することなく、ユーザー側 (アプリケーション) でツールの実行を行うことが可能です。また Amazon Bedrock Agents では Action Group として Lambda 関数を指定し、モデルには関数の実行権限だけを与え、動的な処理を実装することも可能です。2 つ目は、モデルの厳格な動作の制御にシステムプロンプトを使用することは可能な限り避けることが推奨されます。システムプロンプトを明らかにしないように学習されたモデルもありますが、現時点でモデルが常にこれを遵守する保証はありません。モデルが期待に沿った動作をしているかどうかを判断するための独立した仕組みを用意することが望ましいです。これらは一般にガードレールと呼ばれ、例えば自社で開発する生成 AI アプリケーションが有害なコンテンツを生成していないかの検出と防止はモデルの外部で行うべきです。 Amazon Bedrock Guardrails のコンテンツフィルターでは、有害なコンテンツの判定が可能です。マルチモーダルにも対応しており、 テキストデータに加えて画像の検出にも活用可能 です。 (筆者注) Amazon Bedrock Guardrails は 2025 年 1 月 16 日時点で 公式には英語、スペイン語、フランス語のみをサポートしており 、他の言語でテキストコンテンツを評価すると、信頼できない結果になる可能性があります。テストデータで検証し、実装方法をご検討ください。 LLM08:2025 ベクトル化と埋め込みの脆弱性 RAG を使用する生成 AI アプリケーションの考慮事項として、不適切なアクセス制御や 反転攻撃 (モデルをリバースエンジニアリングする攻撃) によるデータの流出、ナレッジの競合、データの汚染、モデルの振る舞いへの影響などがあります。これらに対する予防・緩和戦略として 3 つの観点を掘り下げてみます。 アクセス制御: ユーザー固有の情報の保護のために適切なアクセス制御が必要です。ここでは AWS アカウントと RAG の 2 つの観点で考えてみましょう。まずは AWS アカウントについて、関係者を洗い出してみます。生成 AI アプリケーション開発者はもちろん、精度評価や改善を行うデータサイエンティスト、マルチアカウント環境の管理者や監査人などです。次にユーザー固有の情報が含まれるコンポーネントを特定します。S3 や OpenSearch、DynamoDB、またモデル呼び出しのログを記録する場合はログを格納する Amazon CloudWatch Logs や S3 などです。これらを踏まえ、アイデンティティベース、あるいはリソースベースのポリシーを活用し適切にアクセス制御を行います。厳格にアクセス制御を行うことが難しい場合、代わりに Amazon GuardDuty のような脅威検出サービスを使って S3 バケットへの異常な振る舞いや脅威を検知したり、 S3 や DynamoDB のデータに対するアクセスを AWS CloudTrail のデータイベントとして取得し、データに対するアクセスを追跡できるようにしておくことも考えられます。 続いて、ユーザーの所属する部署などに応じて参照可能なデータのみを RAG のコンテキストとして扱うケースを考えてみます。この場合、ユーザーやユーザーが所属する部署などの識別子を Cognito から取得したトークンから確認し、適切に参照する情報を制御できる必要があります。 ナレッジベースのマルチテナントに関する考察(英語) や メタデータを用いたフィルタリング をご参考いただいたり、ナレッジベースの代わりに ユーザーに応じたアクセス制御をサポートしている Amazon Kendra を利用することも考えられます。 データのバリデーションとデータソースのリスク評価: RAG で参照するデータのバリデーションを適切に行うことで、ユーザー固有の情報に含まれる個人情報などの流出から保護します。一例として、S3 にデータを格納する際に個人情報をマスクする前処理を行うパイプラインを構成しているケースがあります。データがアップロードされるとパイプラインが自動で起動し、文書の中から個人情報に該当する氏名や電話番号、メールアドレス、社員番号などの情報がマスクされてから、ナレッジベースが参照する S3 バケットにデータが格納されます。これにより、アプリケーションを通して個人情報が公開されるリスクを低減します。 またデータソースのデータが安全に利用できるものであるかリスク評価を行うことが重要です。例としてナレッジベースのデータソースタイプとして Web クローラーを活用する場合、参照先が信頼できる情報ソースなのか十分にリスク評価する必要があります。特に参照する Web サイトが任意の第三者が任意の記載を行うことができる場合、データの汚染を引き起こし、それが悪意あるプロンプトを含んでいる場合に間接的なプロンプトインジェクションが生じる可能性があります。 ログの取得と評価・分析: 悪意あるプロンプトやナレッジの競合などモデルの振る舞いに影響となる要因を特定し対処するために、ログの取得と評価や分析を行います。一例として、ナレッジベースに対して実行された処理にて、どのような情報を取得したかアプリケーションでログとして出力するように構成できます。また、ユーザーの入力と最終的にモデルが生成した出力は、アプリケーション上、あるいはモデル呼び出しのログ記録でログ取得ができます。アプリケーションが意図しない応答をしていることが分かった場合、ログを調査することでどのユーザーが行ったことなのか、意図しない応答を引き起こしたプロンプトがユーザーの入力と RAG で参照した情報のどちらに含まれていたのかを追跡できます。またアプリケーションの開発体制にデータサイエンティストが入ることで、ログの評価・分析を行う場合があります。 RAGAS などを用いて RAG の精度評価を行い、検索時と生成時のどちらに課題があるかを切り分け、分析に基づくパラメータのチューニングやアプリケーションの改修など RAG の改善活動を行います。 このような予防緩和戦略を取り入れ、図 1 のアーキテクチャの例をアップデートしたものが図 4 となります。 図 4: ベクトル化と埋め込みの脆弱性に対する予防緩和戦略の実装例 まとめ 本ブログでは生成 AI アプリケーションにおける主要な 10 のセキュリティ脅威をまとめた OWASP Top10 for LLM Applications で挙げられている脅威の概要について触れ、特に Version 2025 で新たに追加されたシステムプロンプトの流出とベクトル化と埋め込みの脆弱性について記載しました。本内容が生成 AI アプリケーションの開発に関わられている皆様の参考になれば幸いです。 著者について 片山 洋平 (Yohei, Katayama) は AWS Japan のパブリックセクターのソリューションアーキテクトです。主に医療機関をはじめとしたヘルスケア業界のお客様のソリューション構築の支援を行なっています。週末は登山を嗜んでいます。     藤浦 雄大 (Yuta Fujiura) は AWS Japan のプロフェッショナルサービス本部所属のセキュリティコンサルタントです。生成 AI セキュリティリードを担当し、生成 AI セキュリティや責任ある AI のトレーニング、アセスメント、ガイドライン策定などでお客様をご支援しています。また生成 AI に関するブログ翻訳も数多く担当しています。余暇はブロックでオリジナル作品を作っています。
お客様は常に AWS の支出をよりよく理解する方法を探しています。多くのお客様が、特定のチームがどのくらい支出をしているか、特定のアプリケーションの実行コストはどのくらいか、様々な組織的な取り組みにおける節約の機会はどのくらいあるかについて知りたがっています。リソースレベルのコストの透明性を提供できることは、AWS クラウドへの移行の大きなメリットです。このような詳細な可視化を実現するカギは、包括的かつ組織的なタグ付け戦略の実装と適用です。 コスト配分戦略を実装するためのツール この投稿では、組織のコスト意識を向上させるタグ付け戦略を定義・実装・適用するために使用できるツールと、その使用方法について紹介します。最初のツールは AWS Cost Explorer です。これは、組織の支出に関するより深い洞察をもたらす説得力のある可視化により、AWS のコストや使用状況の分析や管理を可能にしてくれます。Cost Explorer を使用すると、日次で更新される過去 12 か月間のコストデータを取得できます。日付範囲、アカウント、サービス、リージョンなど、様々なパラメーターでデータをフィルタリングできます。 コスト使用状況データを詳細にするために、リソースに「タグ」を適用することができます。タグはキーと値のペアで、AWS リソースにメタデータを追加したり、タグ値ごとにコスト使用状況データを要約したりすることができます。タグはキーと値のペアであるため、組織に合った名前 (キー) を作成したり、ビジネスにとって意味のある値を使ったりできるような柔軟性があります。たとえば、組織において “CostCenter” を使用してコストを追跡することができます。AWS では、CostCenter というキーのタグをリソースに割り当て、そこにそのリソースの課金先となる CostCenter を表す値 (例:CostCenter=12345) を割り当てることができます。 また、タグポリシーおよびサービスコントロールポリシーと呼ばれる、 AWS Organizations の 2 つの機能についても見ていきます。これらのポリシーは遡及的には機能しないため、過去に作成された “タグの付与されていないリソース” を識別しやすくするためには AWS Tag Editor (タグエディタ) を使用します。そして、 AWS Config は継続的な戦略のコンプライアンスをサポートします。 タグ付け分類の作成 タグを使用するとさらに詳細な情報を得られるため、組織レベルでのタグ付け戦略と、それを適用する方法を確立することが重要です。ベストプラクティスとしては、タグの分類を定義して、すべてのビジネスユニットに推奨されるタグを整理するところから始めるのがよいでしょう。タグは様々な目的でリソースに関連付けることができます。技術タグは識別情報を提供します。オートメーションタグは開始/停止時間をスケジュールしたり、リソースを自動的にバックアップする必要がある場合に役立ちます。ビジネスタグは所有者やビジネスコンテキストを追加し、セキュリティタグはデータセキュリティ上の懸念事項を定義するのに役立ちます。以下にこれらの例を示します。 図 1. タグの分類とタイプの例 すべてのビジネスユニットに適用されるタグ付け戦略を実装する際には、その戦略が適切にドキュメント化されているのを確認することが重要です。以下に組織で必須となるタグの詳細を記載したタグ分類ドキュメントの例を示します。 図 2. 必須タグ例のタグ分類 タグ付け戦略のアプローチ 組織は通常、タグ付け戦略を実装する際に 2 つの異なる方法に従います。すべてのポリシーをトップダウンで実装するか、子組織が自分でタグを定義できるようにするかのどちらかです。どちらにも長所と短所があります。トップダウン型のアプローチは、定義と設定に時間がかかりますが、組織全体のコストの可視性が向上する可能性があります。一方、子組織が自分でタグ付け要件を柔軟に決定できるようにすると、俊敏性は向上しますが、組織全体の AWS 支出を分析しようとする際に一貫性が失われる可能性があります。 これら 2 つの戦略を組み合わせることが、おそらく最も効果的なアプローチでしょう。たとえば、組織の最上位レベルでは、下の図に示すように、すべてのチームと組織ユニットが従うビジネスタグ付け戦略を適用できます。そのあとで、個々のユニットは自主性と柔軟性をもって追加となるビジネス固有のタグを実装することができます。 許容できるキー値を定義することで、タグ分類ドキュメント内のタグをさらに細かく指定できます。たとえば、今回の CostCenter タグの例では、ビジネスユニットまたは部門を表す “Two Digit Division (2 桁の部門)” を追加しました。また、コストを追跡するために、プロジェクト、アプリケーション、チーム、その他のグループを表す “Four Digit Code (4 桁のコード)” も追加しました。これにより、各ビジネスユニットは、リソースを適切に識別するための適切なタグ付け規則を明確に把握できます。タグ付け戦略を明確に定義してドキュメント化したら、適用に移ることができます。 図 3. CostCenter タグ例のタグドキュメント タグ付けポリシーの適用 タグ付け戦略が組織全体に浸透したら、AWS Organization 内で必須のタグの設定を開始できます。目標は、AWS リソースの作成時に、新たな標準化されたタグ付けポリシーを適用することです。ここでの例では、特定のタグに必須の ”事前定義済みの値“ がない場合、Amazon EC2 インスタンスの作成は拒否されます。今回は、カスタム CostCenter タグを使用します。 1. まず最初に、管理アカウントの AWS Organizations コンソールに移動し、[Policies (ポリシー)] を選択します。次に [Tag policies (タグポリシー)] をクリックします。 図 4. AWS Organizations ポリシーページのタグポリシー部分 2. 次に、上記の例で定義した値を使用して、CostCenter タグのタグポリシーを作成します。このポリシーを Amazon EC2 インスタンスに適用し、組織によって指定された値でなければ、CostCenter タグを使用してリソースを作成することを禁止するようにします。 画面上部のタグポリシーに名前を付けます。ポリシーの説明を追加することもできます。この画面の中央では、ポリシー自体にタグを追加して、誰がポリシーを作成したかを追跡できます (ポリシーが適用されるリソースではなく、ポリシー自体にタグを付けることに注意してください)。“Visual editor (ビジュアルエディタ)” タブ内でタグキーを定義できます。ここでの例ではそれを “CostCenter” としています。 CostCenter タグキーの下にある、大文字と小文字の区別を確認するボックスにもチェックを入れます。これにより、タグの大文字と小文字が区別される (case-sensitive) ため、タグキーフィールドで指定されたとおりに正確に入力する必要があります。 “Allowed values (許容される値)” セクションで、CostCenter タグキーに使用できる値を指定するボックスにチェックを入れます。次に、上記の例で定義した CostCenter 値のリストを追加します。 最後に、“Resource types enforcement” (リソースタイプの強制)” セクションで、”Prevent noncompliant operations for this tag (このタグの非準拠操作を防止します)” をクリックします。リストから “ec2:instance” を選択します。これにより、Amazon EC2 インスタンスに CostCenter タグが含まれていて、かつタグ付けポリシーに基づく有効な値がない場合には、Amazon EC2 インスタンスが起動されなくなります。 図 5. タグポリシー設定ページ 3. この新しく作成されたポリシーを組織全体で確実に適用するには、組織単位 (OU) にポリシーをアタッチする必要があります。そのためには、タグポリシーページに戻り、先ほど作成した “CostCenterTagPolicy” を選択します。次に “Actions (アクション)” を選択し、“Attach policy (ポリシーのアタッチ)” をクリックします。 図 6. 既存のタグポリシーページでのポリシーのアタッチ 4. 次の画面では、新しいタグポリシーが特定の組織単位 (OU) にアタッチされていることを選択して確認できます。 図 7. 組織単位 (OU) へのタグポリシーのアタッチ 5. それでは、Amazon EC2 コンソールに移動して、適切な CostCenter タグ値を指定せずに新しい Amazon EC2 インスタンスを起動してみましょう。 図 8. EC2 コンソールでのタグ付けポリシーのテスト 6. 必須のタグポリシー値を指定せずにこのインスタンスを起動しようとすると、エラーが表示されます。 図 9. 許可されていない CostCenter タグ値であることにより EC2 の起動に失敗 タグポリシーが設定されたため、タグポリシー内の CostCenter タグに設定した値パラメーターに従わないリソースを、組織が起動できなくなりました。ただし、これでは CostCenter タグキーそのものがない場合はリソースを起動できてしまいます。それを防ぐためには、サービスコントロールポリシー (SCP) を利用します。 タグの適用の強化 ユーザーが特定のタグを含めていない場合はリソースを起動できないようにするなど、タグ付けの適用に関するより厳しいポリシーが必要な場合は、 サービスコントロールポリシー (SCP) を使用できます。SCP により、組織内のすべてのアカウントで使用可能な最大権限を一元的に制御できます。SCP を使用すると、CostCenter タグなどの特定のタグが含まれていない場合に特定のアクションを拒否できます。 このタイプの SCP の例を以下に示します。作成すると、先程作成したタグ付けポリシーをアタッチしたのと同じように、特定の組織単位 (OU) にアタッチできます。 SCP を定義する には、管理アカウントの AWS Organizations ページに移動し、“ポリシー (Policies)” をクリックしてから “サービスコントロールポリシー (Service Control Policies)” をクリックします。 図 10. CostCenter タグを必要とするサービスコントロールポリシー (SCP) の例 注: SCP の使用は完全にオプションであり、特にタグコンプライアンスに関するガバナンスのレベルを高めることができます。ただし、SCP の使用は慎重に行うべきです。SCP の設定は既存のリソースに影響を与える可能性があります。たとえば、必須である CostCenter キーが設定されていないリソースのオートスケーリングプランでは、SCP がスケーリング動作を妨げる可能性があります。既存のリソースを持つ組織に SCP を導入する場合は、この点を必ず考慮してください。 タグコンプライアンスの理解 この新しいタグ付けポリシーのコンプライアンスを継続的に検証するには、AWS Config を使用できます。AWS Config には、AWS アカウントの AWS リソースの設定の詳細が表示されます。AWS Config ルール、特に “required-tags” ルールを使用すると、リソースに必要なタグがあるかどうかをチェックできます (つまり、Amazon EC2 インスタンスに、先程作成した CostCenter タグが付いていることを確認できます)。 タグコンプライアンスをモニタリングするには、AWS Config コンソールページに移動し、左側のナビゲーションメニューから “ルール (Rules)” を選択します。 図 11. AWS Config ルールセクション画面 新しいルールを追加する方法の詳細はこのブログの範囲外ですが、required-tags 組み込み設定ルールの使用方法の詳細は AWS Config ドキュメント に記載されています。AWS Config と SCP により、組織全体にタグ付けポリシーをさらに適用し、長期的なコンプライアンスを検証できます。 しかし、新しいタグ付けポリシーに準拠していない可能性のある既存のリソースについてはどうでしょうか?これらのリソースをコンプライアンスに準拠させるにはどうすればよいでしょうか? タグエディタによるタグなしリソースの識別 タグ付けポリシー実装の最後のステップは、過去にタグなしでプロビジョニングされたリソースに対処することです。これはタグエディタを使うことで実行できます。 タグエディタを使用するには、AWS マネジメントコンソールに移動し、“Resource Groups & Tag Editor” を検索してクリックします。 次に、左側のナビゲーションにある “タグ付け (Tagging)” の下にある “タグエディタ (Tag Editor)” をクリックします。 タグエディタページで、まずリソースを検索したいリージョンを選択します。この例では “All regions” を検索します。 次に、検索するリソースタイプを設定します。この例では、Amazon EC2 インスタンスを検索します。 最後に、検索するタグを入力します。ここでは、CostCenter タグが付いていないすべての Amazon EC2 インスタンスを検索します。 条件を満たすリソースのリスト、つまり CostCenter タグのついていない、すべてのリージョンのすべての Amazon EC2 インスタンスのリストが表示されます。結果を CSV にエクスポートし、組織内の従業員に通知して対応を依頼できます。 図 12. タグエディタの設定画面 注: タグエディタは単一のアカウントでのみ実行でき、組織レベルでは実行できません。組織内の各アカウントでタグが付いていないリソースを識別するには、各アカウントでタグエディタを使用する必要があります。 コスト配分タグを有効化する 新しく実装したタグ付け戦略を使って Cost Explorer でのコスト分析を開始する前に、コストと使用状況に関するレポート作成用にタグを有効化する必要があります。“請求とコスト管理” コンソールを開いて “コスト配分タグ (Cost Allocation Tags)” を選択し、新しく作成した CostCenter タグを有効化します。リソースにタグを付けてタグを有効化するまで、AWS Cost Explorer にはこれらのタグを適用した結果は表示されません。 図 13. ”請求とコスト管理“ コンソールでのコスト配分タグの有効化 AWS Cost Explorer での支出の可視化と分析 タグ付け戦略を実装し、“請求とコスト管理” コンソールでタグを有効化すると、AWS Cost Explorer を使用して個々のコストセンターのコストを分析できます。この例では、個々のコストセンターの支出をサービスごとに表示できます。 図 14. Cost Explorer レポート (フィルターなし) Cost Explorer を使用してコストを確認する際、タグ付けされているはずなのに以前の期間のコストには反映されておらず混乱してしまうことがあるかもしれません。タグ付けは遡って適用されることはなく、(タグ付け以降の) 将来のコストと使用状況のレポートにのみ正確に反映されます。 Cost Explorer を使用すると、適切な CostCenter タグが関連付けられていないアカウントのうち、最も支出が多いアカウントを分析できます。これを行うには、ディメンションを “連結アカウント (Linked Account)”、タグのフィルターを “CostCenter”、およびタグ値を “タグキーがありません :CostCenter (No tag key: CostCenter)” に設定した Cost Explorer レポートを作成します。 図 15. Cost Explorer レポート (“タグキーがありません :CostCenter” フィルターを適用した場合) このようなレポートを使用すると、組織はこれらの (タグ付けされていないリソースのある) 特定のアカウントが新しいタグ付け戦略を実装できるよう支援できます。時間が経過とともに、コストセンター別に組織の AWS 支出の詳細な内訳を示す追加の Cost Explorer レポートを作成できるようになります。 図16. Cost Explorer レポート (ディメンションを “CostCenter” タグにした場合) まとめ このブログでは、AWS アカウント内のタグ付けされていないリソースの識別を含む、組織のタグ付け戦略の定義・実装・適用に役立つプロセスの概要を説明しました。これが完了すると、Cost Explorer を使用して、これらのタグを使用して AWS のコストと使用状況を可視化・理解・管理・レポートすることができます。その結果、組織のコストに対する可視性と認識が高まるだけでなく、個々のビジネスユニットのコストの結果責任が促進され、クラウドコストの最適化とビジネス価値の実現にプラスの影響を与えることができます。 TAGS: AWS Billing Console , AWS Cost Explorer , AWS Organizations , Tagging Policies , Track and Allocate Ryan Doty Ryan Doty は、ニューヨークを拠点とする AWS のソリューションアーキテクトです。革新的でスケーラブルなソリューションを設計するためのアーキテクチャガイドラインを提供することで、米国北東部のエンタープライズカスタマーが AWS クラウドの採用を加速できるよう支援しています。ソフトウェア開発とセールスエンジニアリングのバックグラウンドを持つ彼は、クラウドが世界にもたらす可能性にワクワクしています。仕事以外では、コンピューターゲームをしたり、リバプール FC を応援したりすることが大好きです。 Bert Zahniser, CISSP, CCSP Bert Zahniser は、フィラデルフィア地域を拠点とする AWS のシニアソリューションアーキテクトです。IT インフラストラクチャで 30 年以上の経験があり、情報セキュリティに重点を置いています。彼はクラウド採用の強力な提唱者であり、クラウド移行中のお客様がセキュリティとガバナンスを念頭に置いて AWS でソリューションを設計および実装できるよう支援しています。仕事以外では、野球やアイスホッケーが好きで、ゴルフやクラフトビールの醸造所を訪れるのが大好きです。 Vishal Manan Vishal Manan は、シアトルを拠点とする AWS のスペシャリストソリューションアーキテクトです。お客様が Graviton プロセッサ (クラウドでは arm64) を使用して、費用対効果やパフォーマンスが高く、持続可能な EC2 コンピューティングインスタンスを採用できるよう支援しています。プラットフォームソフトウェア開発のスキルとコンサルティングのバックグラウンドを AWS クラウドに活かせることに興奮しています。仕事以外では、父親であること、料理をすること、ゴルフをすること、ハイキングをすることが大好きです。 翻訳はテクニカルアカウントマネージャーの堀沢が担当しました。原文は こちら です。
2024 年 11 月 7 日に、デジタル庁主催で「AI ハッカソン、アイデアソン」が実施され、AWS も参加しました。デジタル庁から公開されているブログは以下をご覧ください。 デジタル庁記事 1 デジタル庁記事 2 デジタル庁記事 3 本イベントには 2 つの主要な目的がありました。1 つ目は、AI エンジニアと行政職員の間にある「生成 AI で実現できること」に対する認知ギャップを解消すること。2 つ目は、人口減少に伴う行政職員の人手不足に対して、AI 技術を活用した実用的なソリューションを開発し、行政サービスの質を維持・向上させることです。本イベントには、AWS の他に東京都、GovTech 東京、CSP 各社様が参加され、デジタル庁や、イベントに協力機関として参加した東京都の職員の方々から寄せられる要望に対して生成 AI を活用し、合計 38 個のプロトタイプを作成しました。 AWS の技術で実現する行政デジタルトランスフォーメーション (以降 DX) 私たち AWS のエンジニアチームは、Amazon Bedrock をはじめとする最新の生成 AI 技術を活用し、デジタル庁・東京都の行政職員から提示された業務上の課題に対するプロトタイプの開発に取り組みました。AWS は、GUI で AWS のサービスを操作できる AWS マネジメントコンソールや、 Generative AI Use Cases JP (略称:GenU) を用いることで、5 時間という短時間でも業務課題の解決可能性を検証できることが明らかになりました。 AWS が作成したソリューション AWS が作成したソリューションの内今回は 3 つのソリューションをご紹介します。 パワポの研修資料(デジタル庁風)を自動作成するアプリ (デジタル庁職員からの依頼) パワポの研修資料 (デジタル庁風) を自動作成するアプリ (デジタル庁職員からの依頼) 議会答弁案作成のサポート (東京都職員からの依頼) 1. パワポの研修資料 (デジタル庁風) を自動作成するアプリ 業務の課題 府省庁横断トレーニングではデジタル庁の職員が研修資料を自前で作成していますが、元の情報が頻繁に更新されたり新機能が追加されたりするので、その都度どこが変わったのかを確認し作り直しています。 AWS のソリューション 作りたい内容の説明書、または WEB サイトの URL をプロンプトに入れると、パワーポイントの研修資料を生成するソリューションです。生成する資料は、デジタル庁で現在使っている研修資料の構成・フォーマットを参考に作成するように調整しています。 デモ動画 より詳細な映像はこちら 再現方法 生成 AI に Marp というライブラリに従う形式で Markdown テキストを出力させています。アプリケーションのインターフェイスとして GenU を使用しています。 参考 システムプロンプトの例は以下を参照してください。 あなたはスライドを生成する Marp を支援する AI アシスタントです。与えられた文章とルールに従い、Marp が出力可能な Markdown を出力してください。 <rules> * 説明は一切不要です。これは絶対のルールです。冒頭に Here's the Markdown output based on the input: などの接頭語を指定してはいけません。 * \`\`\`yaml のような接頭語も一切不要です。 * Markdown のテキストだけ生成してください。 * --- によって、スライドが分割されます。適切な粒度で分割してください。 * 標準で gaia の theme を使用します。指定があればそれ以外も使用してください。 * 図、表などの構造化された文章、箇条書きの文章や数式、画像、アイコンを使用してください。 * 画像は全体のスライド数に対して3割程度の使用として多用しないでください。 * 背景画像は 100% の比率にします。 * ソースコードを記述する場合、1 ページあたり、15 行以内にしてください。 * 画像は上下左右、自由に配置してよいものとしますが、文脈に沿っており人間が見やすい配置を意識してください。 * 挿入する画像は以下のものを使用してください。 * アプリの画面説明の場合 <画像の URL> * 人が助け合うイラスト画像 (横幅 30% くらいで) <画像の URL> * 人がカードとスマートフォンを持っている様子のイラスト画像 (横幅 30% くらいで) <画像の URL> * 人がパソコンを使用しているイラスト画像 (横幅 30% くらいで) <画像の URL> * スマホに QR コードが写っているイラスト画像 (横幅 30% くらいで) <画像の URL> * サブタイトルには必ず「Amazon Bedrock によるスライド生成」を含めてください * 背景画像は指定されない限り白にしてください。 * 1枚目は背景画像として<画像の URL> を使用します。 * 最後から 2 枚目のアンケートページの背景画像は<画像の URL> を使用します。文字は黒色にしてください。 * 最後のスライドでは背景画像として<画像の URL> を使用します。 * 2枚目のスライドには目次を入れてください。 * 最後のスライドには文字を一切記載してはいけません。最後から1つ前のスライドにまとめを書いてください。 * 重要な文字列はデジタル庁のブランドに従う青色 rgba (21,28,232,255) にしてください。 </rules> Markdown の先頭に書く theme などの Local directives のサンプルは以下のとおりです。 theme などはファイル全体に適用されます。スライド1枚ずつに記述してはいけません。 特に指定がなければ以下のフォーマットに従ってください。 <format> --- theme: gaia class: lead paginate: true backgroundColor: #fff --- ![bg 100%](<画像のURL>) <!-- header: "スライドのテーマ" ---> ヘッダーを指定 # タイトル ### サブタイトル --- ![bg 100%](背景画像) <!-- header: "スライドのテーマ2" ---> ヘッダーを指定 ## タイトル 内容 --- <!-- header: "スライドのテーマ3" ---> ヘッダーを指定 ## タイトル 内容 </format> また、スタイルを変更する場合は以下のようにしてください。 <styling-example> --- theme: base --- <style> section { background: yellow; } </style> # Tweak style through Markdown You would see a yellow slide. </styling-example> スコープ付きスタイル また、<style scoped>を通じてスコープ付きインラインスタイルもサポートしています。 style 要素に scoped 属性がある場合、そのスタイルは現在のスライドページにのみ適用されます。 スライドページごとにスタイルを微調整したい場合に便利です。 <scoped-styling-example> <!-- Global style --> <style> h1 { color: red; } </style> # Red text --- <!-- Scoped style --> <style scoped> h1 { color: blue; } </style> # Blue text (only in the current slide page) --- # Red text </scoped-styling-example> 推奨される基盤モデル Claude 3.5 Sonnet (v1)、Claude 3.5 Sonnet (v2)、Claude 3 Sonnet、Claude 3 Haiku 担当した AWS ソリューションアーキテクト Daisuke Awaji、Shota Kishimoto 2. デザインガイドラインに準拠したイラストの自動生成 業務の課題 デジタル庁が元々もっているアイコンやグラフィックを少し変えたいときにデザインガイドラインに準拠したイラストの作成業務を生成 AI を活用して出来ないかという要望をデジタル庁職員から受けました。 AWS のソリューション Amazon Bedrock のイメージプレイグラウンドにてイラストを自動生成しました。 ソリューション① : より詳細な画像生成映像 1 はこちら ソリューション② : より詳細な画像生成映像 2 はこちら 再現方法 ソリューション① : 新規画像生成:Amazon Bedrock のイメージのプレイグラウンドより作成しました。以下のプロンプトを参考にしてください。 プロンプト例:illustration, QR code, smartphone, left hand, simple color, white background, device edge color #1D2A68, high contrast 3:1 ratio, user interface components visible, graphical objects clear, minimalist style, clean design, no background items, focus on essential elements ソリューション② : 既存画像からのバリエーション生成:同じくイメージのプレイグラウンドより、 デジタル庁で公開しているイラストレーション を既存画像としてアップロードして作成しました。 推奨される基盤モデル ①、②ともに、Amazon Titan Image Generator v2 担当した AWS ソリューションアーキテクト Naoki Miyaguchi、Yozo Suzuki 3. 議会答弁案作成のサポート 業務の課題 議会における答弁作成業務では、職員がこれまでの会議録や施策情報を手作業で確認・整理していますが、AI を活用することにより、業務の効率化が期待されています。例えば、過去の会議録やホームページから関連情報を自動抽出し、根拠資料を明確にした情報を AI が提示することで、職員が行う答弁案の作成に関する業務を AI がサポートし、より効率的で質の高い業務の実現に資することが考えられます。 AWS のソリューション Amazon Bedrock Agents でウェブ検索エージェント作成し、検索結果を元に回答を出力させました。 再現方法 GenU で「 検索エージェントのデプロイ 」を行い、SearchAgent を作成し、以下のプロンプトを実行します。 あなたは優秀な東京都のデジタルサービス局長のアシスタントです。 以下 3 つの作業を実施してください。 作業内容をすべて確認してから出力してください。 必ず"マークダウン形式"で出力してください。 1: 以下の「質問文」を解釈して、インターネット上にある東京都に関する情報から質問文に関連する以前の取り組みと事実確認を行なってください。 2: 1 で調査した内容を基に、局長が議会答弁の際に話す「これまでの取り組み」をまとめる必要があります。 調査した内容から「詳細」「簡潔」「フォーマル」の 3 パターンでそれぞれ 100 字以内でまとめてください。まとめる際には以下に示した「キーワード」を意識してください。 3: 局長の最終的なチェックを助けるために、情報源にしたリンクを提示してください。 キーワード:窓口改革 質問文:東京都は、二〇二五年度を目標に、デジタルガバメント都庁の基盤構築を目指し、シン・トセイ戦略を推進してきました。 この戦略の下で、これまでアナログ業務のデジタル化などを進め、業務プロセスの抜本的な見直しを図ってきたと認識しています。 行政のデジタル化は、都民がオンラインで簡単に行政手続を行える環境を整えることを目的としていますが、オンライン手続だけでなく、 窓口での対応も同様に重要であり、今後も、都民が便利で快適に行政サービスを利用できる環境の整備を進め、デジタル化と対面サービスの双方において質の高い行政運営を実現することが必要です。 デジタルをフルに活用し、窓口における利用者視点に立った改革を一層進めるべきと考えますが、見解を伺います。 推奨される基盤モデル Claude 3.5 Sonnet (v1)、Claude 3.5 Sonnet (v2)、Claude 3 Sonnet、Claude 3 Haiku 担当した AWS ソリューションアーキテクト Masahiro Tabuki、Yohei Katayama、Kohei Hayashi まとめ デジタル庁は、この AI ハッカソン、アイデアソンの経験を活かし、これを一過性のイベントではなく、組織に根付いた持続可能な取り組みへと発展させることを目指しています。具体的には、AI で業務改善を求める職員が即座に恩恵を受けられる環境の構築、AI エンジニアと現場ニーズの効果的なマッチング、そして職員の AI エンジニアスキル育成を重点的に進めていく計画です。また、今回開発されたプロトタイプについては、イベント限定のものとせず、職員に安定して届け、継続的に改善できる体制を整備する方針とのことです。 今回実証された生成 AI ソリューションの活用は、行政分野における業務効率化や品質向上に寄与するだけでなく、医療、教育、防災など他の幅広い分野への展開可能性も示唆しており、社会全体の DX を加速する重要な一歩となりました。AWS は、このようなデジタル庁の取り組みを技術面から継続的に支援し、行政サービスのデジタル変革を加速させることを目指しています。 補足 Generative AI Use Cases JP (略称:GenU) : 生成 AI の業務活用に興味はあるもの、「どのように始めれば良いのか」「セキュリティ面は大丈夫なのか」といった課題を抱えている方も多いのではないでしょうか。GenU は、そんな課題を解決するために AWS Japan の有志を中心に開発された生成 AI アプリケーションです。Amazon Bedrock や Amazon Kendra などの AWS のサービスを活用し、チャットボットや RAG (検索拡張生成)、画像生成など、簡単にすぐに業務で活用できるさまざまなユースケースを 1 つのアプリケーションとして提供しています。 著者について 岸本尚大 (Shota Kishimoto) AWS Japan の Prototyping Solutions Architect として、公共部門のお客様を担当しています。プロトタイピングという名前の通り、実際に動作するプロトタイプ (アプリケーション) を、AWS を用いて作成し、お客様に技術提供する形でご支援を行っています。
(この記事は Cross-region disaster recovery with Amazon FSx for NetApp ONTAP を翻訳したものです。) お客様にとって、データの保護は最優先事項です。地震などの自然災害や、特定の地域(リージョン)で発生する技術的災害による被害を軽減するために、複数のリージョンにデータを継続的に複製するようなディザスタリカバリ(DR)戦略を検討する必要があるかもしれません。 Amazon FSx for NetApp ONTAP は、NetApp ONTAP ファイルシステム上に構築されたフルマネージドファイルストレージサービスです。レプリケーションサーバーを別途構築することなく、AWS リージョン 間のデータのレプリケーションをすぐに利用できます。さらに、Amazon FSx for NetApp ONTAP は、AWS リージョン間のデータの非同期レプリケーションにも対応しており、パイロットライトとウォームスタンバイの両方の DR 戦略に適用することができます。これらの特性は、DR 戦略の最適化に役立ちます。 本ブログでは、 FSx for ONTAP ファイルシステム を利用したレプリケーションターゲットを、シングルアベイラビリティゾーン(AZ)構成にする場合とマルチ AZ 構成にする場合とで、それぞれのトレードオフについて説明します。また、ファイルシステム間のデータレプリケーションを実現する機能である NetApp SnapMirror の前提条件とパフォーマンスへの影響についても解説します。さらに、FSx for ONTAP の NetApp SnapMirror 機能を使用した、AWS リージョンをまたがる DR シナリオのデータレプリケーションについても説明します。SnapMirror は、複製されたデータの圧縮とデータ重複排除により、帯域幅とストレージの使用量を軽減することも可能です。本ブログでは、ビジネスクリティカルなデータの可用性とリカバリ速度を向上するための知識を、身につけていただくことを目的としています。 クロスリージョンデータレプリケーションのソリューション概要 FSx for ONTAP は、AWS またはオンプレミスで動作する Linux、Windows、macOS といった幅広いクライアントからアクセスできる、機能豊富で高速かつ柔軟な共有ファイルストレージを提供します。FSx for ONTAP は、AZ 間または AWS リージョン間でのデータの非同期レプリケーション機能によって、DR の要件を簡単に満たすことができます。詳細については オフィシャルドキュメント を参照してください。 デスティネーション(宛先)ファイルシステムは、ソース(送信元)のファイルシステムで発生した更新データを指定したスケジュールに従って反映・更新されるので、必要となればいつでも利用することができます。さらに、セカンダリ側の AWS リージョンのボリュームは、読み取り専用でマウントできます。レプリケーションは最短 5 分間隔にスケジュール設定できますが、実際のレプリケーション間隔は RPO(Recovery Point Objectives)、RTO(Recovery Time Objectives)、およびパフォーマンスの考慮に基づいて慎重に検討する必要があります。 シングル AZ FSx for ONTAP ファイルシステムへのクロスリージョンDR シングル AZ 構成の FSx for ONTAP は、AZ 内での高い可用性と耐久性を提供するように設計されています。シングル AZ ファイルシステムを構成する AWS 基盤は、単一の AZ 内の別々のフォールトドメインに存在しています。マルチ AZ オプションの場合と同様に、インフラストラクチャは継続的に監視され、必要に応じてコンポーネントの交換が自動的に行われ、フェイルオーバーは通常数秒以内に完了します。 マルチリージョンを採択した場合、セカンダリ AWS リージョンの FSx for ONTAP ファイルシステムをシングル AZ 構成にすることができます。この構成では、マルチ AZ オプションと同じ利便性とデータ管理機能を享受しつつ、ストレージコストを 50%、スループットコストを 40%、それぞれ削減できます。 図のように、シングル AZ のファイルシステムをセカンダリの AWS リージョンに 配置します 。そのうえで、プライマリ AWS リージョンにあるファイルシステムのソースボリュームと、セカンダリリージョンのシングル AZ ファイルシステムのデスティネーションボリュームとの間に SnapMirror 関係を確立します。 図1: セカンダリリージョンにシングル AZ ファイルシステムを配置して Snap Mirror DR を実現 マルチ AZ FSx for ONTAP ファイルシステムへのクロスリージョン DR マルチ AZ 構成の FSx for ONTAP は、データを複数のアベイラビリティゾーンにわたってレプリケートします。ファイルシステムは、単一 AZ の損失に耐えられるように設計されています。その上でさらに、RPO/RTO 要件に応じて、クロスリージョンを採択できます。この場合、アプリケーションは、マルチリージョンでアクティブ・アクティブ または ウォーム・スタンバイ方式で展開されます。 図2: セカンダリリージョンにマルチ AZ ファイルシステムを配置して Snap Mirror DR を実現 マルチ AZ のファイルシステムを、セカンダリの AWS リージョンに 配置します 。その上で、プライマリ AWS リージョンの FSx for ONTAP のソースボリュームと、セカンダリ AWS リージョンのマルチ AZ FSx for ONTAP のデスティネーションボリュームとの間に SnapMirror 関係を確立します。 マルチ AZ 構成とシングル AZ 構成の比較で考慮すべき点は、ビジネスに対する FSx for ONTAP の可用性です。マルチ AZ 構成では、アベイラビリティゾーン内での FSx for ONTAP に障害が発生しても、サービスにダウンタイムは発生しません。一方シングル AZ の場合は、ダウンタイムが発生する可能性があります。 プライマリ AWS リージョンでリージョン障害が発生してセカンダリAWS リージョンにフェイルオーバーする場合、セカンダリ AWS リージョンでデータを処理するために、運用チームがセカンダリAWSリージョンの FSx for NetApp ONTAP に対して手動で操作を完了する必要があります。したがって DR を採用する場合は、RPO 及びRTO に対するビジネス成果と、その成果を達成するためのコストも含めて検討する必要があります。 FSx for ONTAP の SnapMirror 概要と考慮事項 NetApp SnapMirror は、BCDR(Business Continuity and Disaster Recovery:事業継続性とディザスタ リカバリ)を目的として NetApp ONTAP に組み込まれたソリューションで、ONTAP スナップショットテクノロジーをベースにしています。SnapMirror を使用すると、ソース側の FSx for ONTAP ファイルシステムからデスティネーション側の FSx for ONTAP ファイルシステムにデータを複製できます。SnapMirror を使用すると、次のことが実行されます。 ソース側で、ボリュームのスナップショットが作成される ソース側のスナップショットが、ディスティネーション側にコピーされる。このプロセスによって、オンラインで、読み取り専用で、かつ最新更新時のソース側と同じデータをもつボリュームが作成される デスティネーション側のボリュームが、指定したスケジュールに従って、ソースの増分変更を反映して更新される SnapMirror 関係が確立されると、デスティネーションボリュームは、スナップショット、ボリューム設定、ONTAP ストレージ効率化機能がソースボリュームと同一なレプリカとなります。DR テストを実施する際は、フェイルオーバーにあたって SnapMirror 関係を解除します。これにより、デスティネーションボリュームは書き込み可能になりますが、プライマリ の ONTAP ボリュームには影響を及ぼしません。 ソースファイルシステムとデスティネーションファイルシステム間の SnapMirror 関係を構築する手順については、 Migrating to FSx for ONTAP using NetApp SnapMirror を参照してください。また、DR サイトでデスティネーションボリュームを読み書き可能な形でマウントする手順については、 Cutting over to Amazon FSx を参照してください。 SnapMirror レプリケーショントラフィック SnapMirror はクラスター間エンドポイントを使用して、ファイルシステム間でデータをレプリケートします。ファイルシステムを構成する各ノードに1つずつクラスター間エンドポイントが作成されますが、マルチ AZ 構成の FSx for ONTAP の場合、各クラスター間エンドポイントは、それぞれ異なる AZ に存在します。そのため、FSx for ONTAP ファイルシステムへのレプリケーション中にプライマリ側の単一の AZ で障害が発生した場合も、スタンバイ AZ 上のノードへフェイルオーバーが行われた後レプリケーションを継続することができます。このような動作によって、AZ 障害においてもプライマリの AWS リージョンでのファイルサービスは継続され、かつ DR を目的としたセカンダリ AWS リージョンへの SnapMirror レプリケーションへの影響もありません。 SnapMirror ネットワークの前提条件 SnapMirror ネットワークには、次の前提条件があります。 ONTAP のプライマリファイルシステムとセカンダリファイルシステム間のネットワーク接続性を確保する必要があります。これは、VPC ピアリング、または VPC を AWS Transit Gateway に接続することで実現できます。 SnapMirror では、ポート 10000、11104、11105 を使用します。FSx for ONTAP の ENI に関連付けられたセキュリティグループが、対向のファイルシステムからのトラフィックを許可する必要があります。 プライマリのファイルシステム上のすべてのクラスター間エンドポイントは、セカンダリのファイルシステム上のすべてのクラスター間エンドポイント と通信できる必要があります。 ソース側のファイルシステムの名前と IP アドレスは、デスティネーション側ファイルシステムの hosts テーブル(vserver services name-service dns hosts)にエントリーが存在する必要があり、その逆も同様です。DNS 名を使用してSnapMirror 関係を確立する場合は、相互に名前解決可能でなければなりません。 FSx for ONTAP ファイルシステム間の SnapMirror レプリケーションの互換性については、NetApp ONTAP ドキュメンテーションセンターの「 Compatible ONTAP versions for SnapMirror relationships 」の「 Unified Replication relationships 」のセクションを参照してください。 まとめ この投稿では、Amazon FSx for NetApp ONTAP が、異なる AWS リージョン間での非同期データレプリケーションによって、DR ソリューションを簡単に提供する方法について説明しました。また、デスティネーションファイルシステムに、シングル AZ とマルチ AZ 、それぞれの構成を使用する際の考慮点についても説明しました。ここで引用した設計に基づくと、シングル AZ 設計はよりコスト効率の高い設計ですが、マルチ AZ 設計と同レベルの耐障害性はありません。DR ソリューションを構築する場合は必ず、ビジネス要件とコストのトレードオフを踏まえて検討する必要があります。SnapMirror によるレプリケーションを使用すれば、RPO を最短5分、RTO を 10 分以内を実現できます。 Amazon FSx for NetApp ONTAP は、フルマネージドサービスのメリットをすべて享受できるため、データ管理が簡素化され、オンプレミスインフラストラクチャの運用コストを削減できます。さらに、NetApp の SnapMirror を使用してデータ保護戦略を強化すれば、エンタープライズレベルのデータ保護が実現し、データを確実に保護して利用できるようになります。ぜひ Amazon FSx for NetApp ONTAP のこれらの機能を活用して、運用を効率化していきましょう。 Joe Dunn Joe は、インフラ設計とビジネス基盤のクラウド移行に 20 年以上の経験をもった、金融サービスの AWS プリンシパル・ソリューション・アーキテクトです。AWS 製品やサービスを利用したソリューションを提供することで、金融サービスのお客様が AWS クラウド上でイノベーションを起こせるよう日々支援しています。 Amit Borulkar Amit は、耐障害性と拡張性の高いクラウドアーキテクチャの構築支援に従事する、AWS プリンシパル・ソリューション・アーキテクトです。また、ノースカロライナ州立大学でコンピュータサイエンスの修士号を取得しています。 翻訳は、ソリューションアーキテクトの田中が担当しました。
アマゾン ウェブ サービス ジャパン合同会社 : (左) 近藤 祐丞 、(右) 飯田 哲夫 みなさん、こんにちは。アマゾン ウェブ サービス ジャパン合同会社 AI / ML 事業開発チームの近藤 祐丞です。 AWS では生成 AI サービスの Amazon Bedrock を始めとして、お客様の生成 AI 活用を支援する様々なサービスや機能を提供しています。AWS の年次イベント AWS re:Invent 2024 においても、生成 AI 活用を支援する サービスアップデート を発表しました。 生成 AI は、様々な業界や業種のお客様へと徐々に浸透しており、今後もその流れは進んでいくと感じています。 本日は、金融領域の事業開発チームに所属する飯田 哲夫さんに、お客様と接する中で感じた「金融業界の生成 AI 活用動向」についてインタビューしていきます。 金融領域のお客様の生成 AI 活用の現状 近藤:お時間いただき、ありがとうございます。まずは飯田さんの現在のお役割をお聞きかせください。 アマゾン ウェブ サービス ジャパン合同会社 : 近藤 祐丞 飯田:はい、私は金融領域における事業開発として、金融ビジネスにインパクトがある AWS の使い方やユースケースをご提案しています。また、お客様がクラウドを活用する上で、コンプライアンスや規制に関する課題の払しょくも支援しています。 近藤:ありがとうございます。私も AI / ML の事業開発として仕事をしていますが接する業界は様々です。本日は飯田さんが専門的に関わっている金融領域における生成 AI の活用の現状についてお伺いさせてください。 飯田:まず 2023 年から振り返ると、金融領域のお客様が自然対話型 AI サービスの利用を通じて、 生成 AI の有用性、課題などを認識されたフェーズ だったと思います。認識された課題として、ハルシネーション (=事実に基づかない情報を生成する現象) が挙げられます。 2024 年では、いかに生成 AI を業務の中に組み込み、 組織として横断的に生成 AI を活用していくかを検討するフェーズ へと進まれた印象です。 Amazon Bedrock の観点では、サービスの機能が拡充したことから、 Anthropic 社の Claude モデルを中心に業務での活用が進みました。そうした中で、 セゾンテクノロジー様の事例 のように、 複数の生成 AI モデルから最適なものを選択する 流れも生まれたと思います。一方で、 生成 AI の活用を検証段階から実ビジネスへ進めようとされる中で、業務ユースケースの特定に悩まれる お客様は多かったと感じます。 近藤:2024 年は生成 AI 活用の観点で大きく動きが変わったということですね。飯田さんの仰る通り、2024 年は同様のことを私も感じています。AWS には、お客様のプロジェクトの加速を支援するために、システムのプロトタイプの開発を支援する Prototyping Program プログラムがあります。私は本プログラムを金融領域のお客様に提案する機会も多いのですが、2023 年と比較して 2024 年から金融領域のお客様でご活用いただくケースが大きく増えました。 元々 AWS 上でアプリケーション / システムを稼働いただいている金融領域のお客様は多いと思いますが、既存のシステムとの連携で AWS の生成 AI サービスを求める声は多いですか? 飯田:はい、その観点でのご要望は非常に多いです。金融領域では AWS をクラウドの標準環境としているお客様が多くおられ、そうしたお客様は AWS 上でアプリケーションやデータ蓄積基盤を構築されています。業務アプリケーションと連携したり、業務データを活用する際には、AWS の環境に閉じているとコントロールしやすいため、そこから Amazon Bedrock をご利用いただくケースが多いです。 Amazon Bedrock であれば、複数の生成 AI モデルを API 経由で呼び出せるだけでなく、 複数モデルの評価機能 、 モデルのカスタマイズ 、 データのセキュリティ / プライバシーの担保 が実現可能です。そのため、 生成 AI 活用におけるプラットフォーム として、実ビジネスでご利用いただくケースが 2024 年後半くらいから増え、広がっていると思います。 近藤:正に Amazon Bedrock は生成 AI モデルを呼び出すだけでなく、生成 AI アプリの構築・運用をサポートする幅広い機能を提供するサービスです。生成 AI 活用のプラットフォームとしてご利用いただくケースは今後も増やしていきたいですね。 金融領域における生成 AI 活用のユースケース 近藤:金融領域のお客様の生成 AI 活用では、どういったユースケースが印象的ですか? 飯田:特徴的なユースケースとしては、 営業支援、広告審査、コールセンター業務、不正取引検知 などは挙げられます。 アマゾン ウェブ サービス ジャパン合同会社 : 飯田 哲夫 営業支援では、企業情報の状況分析や過去の取引履歴の集約などを通じて、営業活動の生産性向上を支援 しています。具体的な事例としては、 三菱 UFJ 銀行様の事例 が挙げられます。法人顧客への営業活動で最適な提案を行うには、ニーズの断片的な把握、提案スキルのルール化の難しさから、個人の技量に依存する傾向になるという課題を三菱 UFJ 銀行様は抱えておられました。そこで法人顧客への営業活動に生成 AI を活用することで、多面的かつ複合的な企業情報の分析の実現に取り組まれています。また、各営業個人が保有しているナレッジもデータとして繋ぐことにより、組織的な提案力の強化も図っています。組織全体の営業生産性の向上に繋がっている事例です。 広告審査では 野村ホールディングス様の事例 が挙げられます。本事例では AWS を活用した生成 AI を広告審査業務に適用しています。野村ホールディングス様では広告物への審査を厳しくしている一方で、審査対応の業務負担は多く、対応する人材が不足するという課題がございました。そこに 生成 AI を活用することで、広告物が金融商品取引法やガイドライン、自社規定に沿っているかを生成 AI がチェック して、 業務負荷軽減を実現 しています。最終的に広告審査を通すかどうかは人が判断する運用にしていますが、生成 AI が業務効率化に貢献する素晴らしい事例だと思います。金融機関様の中には生成 AI の活用を慎重になる場面もあるかと思いますが、 生成 AI だけに全てを任せるのではなく、人の判断と生成 AI を組み合わせた参考になる事例 だと感じます。 コールセンター業務では、例えば SBI生命保険様の事例 が挙げられます。本事例では経験の浅いオペレーターでも経験豊富な方と同レベルのサービス提供をするために、生成 AI を用いて保険商品や契約関連の手続き書類を検索可能にする文書検索システムを構築しています。このシステムでは RAG (= 検索拡張生成) の構成が用いられており、回答の正確性を担保しています。金融機関様のコールセンターの業務では、オペレーターが大量の社内ドキュメントや金融商品の知識を基に正確な回答を提供することが求められので、 スムーズな顧客対応やオペレーターの教育期間の短縮化 に貢献しています。 不正取引検知では、海外事例にはなりますが、 Nasdaq 様の事例 では不正取引の検知およびその調査業務の中で生成 AI を利用しています。Nasdaq 様は IT 関連企業などの割合が多い Nasdaq 市場の証券取引所を運営しており、市場の公平性や信頼性の確保が求められます。そのための監視業務として、担当アナリストが不審な活動の自動アラートを受け取ると、レビューを行い、更なる詳細な調査が必要かどうかを判断します。一方で、アラートのレビューや詳細調査は、様々な外部データソースから膨大な情報を分析する必要があるため、非常に負担の大きいプロセスです。Nasdaq 様は本プロセスに生成 AI を活用することで、関連情報の分析を迅速に実施できるようにしています。 担当アナリストの調査時間などの短縮 に貢献している素晴らしい事例です。 また、 AWS パートナー様が自社のプロダクト/ソリューションに生成 AI を機能として組み込み、金融機関様の課題解決を支援するケース も増えています。例えばデータ分析サービスを提供する ナウキャスト様 は、証券・保険領域の営業活動とコンプライアンス業務を効率化する「Finatext Advisory Assist」を提供しています。本ソリューションの中に Amazon Bedrock  経由で呼び出した生成 AI を組み込むことで、商談におけるコンプライアンスのチェックや商談の振り返りを AI がサポートする機能を提供しています。 サービスを利用するユーザーの営業活動の効率化を支援 しており、プロダクト / ソリューションを通じた営業支援の事例です。 その他の事例では、 野村総合研究所様 がコンタクトセンター向けのプラットフォーム「CC@Home」の AI ソリューション 「TRAINA」 シリーズに、 Amazon Bedrock 経由で呼び出した生成 AI を組み込むことで機能強化を図っています。本ソリューションは主に金融業界を中心に展開されており、コールセンター業務の効率化を目的に提供されております。その中で「FAQ 検索・表示」「通話内容の要約」「VOC の分析」の機能を生成 AI 活用によって強化されています。こちらの事例も、AWS パートナー様の自社ソリューションへの生成 AI 組み込みを通じて、 コールセンター業務の効率化を支援 している事例です。 近藤:金融領域での特徴的なユースケースですね。金融領域では生成 AI にどういったことが求められますか? 飯田:やはりセキュリティを気にされるケースは多いです。生成 AI のモデルがデプロイされているリージョンや生成 AI に用いるデータの保管場所が国内であることは重要です。それ以外にもデータへのアクセス制御や通信の暗号化、セキュリティポリシーなど、生成 AI を社内横断的に利用する際には高いセキュリティ水準が求められます。また、検証段階から実ビジネスに生成 AI の活用を進めていく動きに伴い、生成 AI 活用のユースケースごとのセキュリティ担保ではなく、 生成 AI 活用の標準基盤としてセキュリティの担保 が求められています。 Amazon Bedrock では国内リージョンが利用可能なことに加えて、 Amazon Bedrock Guardrails のような生成 AI 活用基盤としてセキュリティポリシーを担保する機能などが備わっており、よりクリティカルな業務領域で生成 AI 活用の検討を進める金融機関様が増えてきています。 近藤:生成 AI モデルやデータを活用する際のセキュリティが非常に重要ということですね。最近では様々な業界で業界特化型の生成 AI モデルを開発されるケースを聞く事が増えているのですが金融業界ではいかがでしょうか? 飯田:今後の可能性として、 お客様独自の生成 AI モデル、もしくはお客様の独自データを用いたチューニング はケースとして増加すると思います。例えば一般的な QA のように、公開データを学習した生成 AI モデルをそのまま利用することで問題ない領域もありますが、一方で金融業界では特殊な用語や自社独自の背景を学習させないと価値を発揮しにくい特殊な業務も存在しますので、そうした領域ではお客様独自の生成 AI モデル、もしくはお客様の独自データを用いたチューニングが求められてくると思います。 お客様独自の生成 AI モデルを開発する場合は、「 AWS ジャパン生成 AI 実用化推進プログラム 」を始めとするプログラムや Amazon SageMaker HyperPod などのサービスでご支援可能です。AWS 独自のチップとして AWS Trainum や AWS Inferenentia などの選択肢を揃えており、これらをご利用いただくことで深層学習と生成 AI トレーニングのパフォーマンス向上やコストを抑えながら推論の高速化に貢献できます。また、お客様の独自データを用いたチューニングにおいても、 Amazon Bedrock ではモデルのカスタマイズを支援する機能が備わっています。 生成 AI の今後について 近藤: AWS re:Invent 2024 では Amazon Nova という生成 AI モデルも発表しており、 Amazon Bedrock 上で様々な生成 AI モデルを選択肢としてご提供しています。今後、世の中でも生成 AI モデルの選択肢が増える中で、金融領域ではどのような流れを予測していますか? 飯田:生成 AI の利用が広がるにつれ、 業務目的に合わせた適切なモデル選択 と、 コスト最適化 の重要性が高まると思います。生成 AI はモデルによって性能やコストが当然異なるので、ユースケースによって生成 AI モデルを使い分ける形になるかと思います。また、生成 AI では エージェント という考えが広まってきており、それを活用した業務支援もユースケースとして出てくると思います。例えば、「ある領域における投資判断のための情報を集めてください」と生成 AI にお願いすると、アプリケーション / システム側ではこの指示を複数のタスクに分解して自動的に実行していくということが実現されると思います。 AWS では Amazon Bedrock Marketplace を発表しており、 100 を超える生成 AI のモデルにアクセス可能 になりますので、色々な選択肢の中から最適な生成 AI モデルを利用するという場面ではご支援できると思います。他にも Amazon Bedrock のエージェント が機能として実装されており、単なるモデル利用に留まらず、 生成 AI 活用を支援するプラットフォーム としてご支援できるかと思います。 近藤:ありがとうございます。これから生成 AI 活用を検討される金融機関様に対して、どのような観点でお話されていますか? 飯田:これから生成 AI 活用を検討される金融機関様においては、 これまでに多くの金融機関様が行ってきた検証や実装例を参考にしながら、解決したいビジネス課題を明確にしていくこと をお薦めしたいと思います。 AWS ではユースケース特定からモデル選定、運用体制構築までを支援するサービスを提供していますので、生成 AI 活用の検討の際は是非ご相談いただければと思っています。 ——————————————————————————— 更なる生成 AI の情報をお探しの場合は こちら をご覧ください。 本ブログの執筆はアカウントマネージャー 尾形 龍太郎が担当しました。
本稿は、2024 年 12 月 3 日に AWS Migration & Modernization Blog で公開された “ Exporting network configuration data with Import/Export for NSX ” を翻訳したものです。 Import/Export for NSX は、新しい AWS オープンソースツールで、VMware Cloud on AWS (VMC-A) またはオンプレミスの VMware Cloud Foundation (VCF) の環境から、VMware NSX 構成を ZIP ファイルにエクスポートできます。エクスポートした ZIP ファイルを、 Amazon Q Developer transformation capabilities for VMware にインポートすることができます。Q Developer は、NSX 構成を、VPC、サブネット、セキュリティグループなどの AWS ネイティブな構成要素に変換します。このブログ記事では、NSX-T 構成のエクスポートプロセスについて説明します。また、Q Developer で新しくリリースされた VMware 機能については、 概要ブログ と 使用開始ガイド を公開しています。 Import/Export for NSX の前提条件 Python3 – ローカル環境に Python3 (バージョン 3.10 以上) を ダウンロードしてインストール します。 Import/Export for NSX – GitHub で利用可能 Git をご存知であれば、リポジトリをローカル環境にクローンします。 git clone https://github.com/awslabs/import-export-for-nsx.git 図 1 : git clone コマンドを表示したターミナルウィンドウ Git を利用していない場合は、 リリースページ から最新のリリースを ZIP 形式でダウンロードし、ローカル環境で解凍します。 Python3 をインストールした後は、Python の仮想環境を有効にすることを検討してください。必須ではありませんが、推奨されるベストプラクティスです。Python の仮想環境機能を使用することで、このプログラムで使用されるライブラリがローカル環境上の既存のバージョンと競合するのを防ぐことができます。初めて Python をインストールしたために競合がない場合でも、仮想環境の使用方法を学ぶことで、より多くの Python プロジェクトを使用する意欲が湧くかもしれません。仮想環境を使用することで、将来の技術検証がより容易になります。 cd import-export-for-nsx python3 -m venv .venv source .venv/bin/activate cd import-export-for-nsx python -m venv venv .\venv\Scripts\Activate.ps1 図 2 : Python 仮想環境のコマンドを表示したターミナルウィンドウ 必要な Python ライブラリをインストールします。 pip3 install -r requirements.txt python -m pip install -r .\requirements.txt コマンドを実行すると、スクリーンショットでは出力が省略されていますが、このようにインストールされます: 図 3 : Python ライブラリのインストール状況を示すターミナルウィンドウ 重要 :VMware Cloud on AWS からエクスポートする場合は、次のセクションをお読みください。オンプレミスの NSX からエクスポートする場合は、その次のセクションにお進みください。 ステップ 1a – VMware Cloud on AWS から NSX 設定をエクスポートする VMware Cloud on AWS トークン を生成します。このトークンには、VMware Cloud on AWS Administrator ロールと VMware Cloud on AWS NSX Cloud Admin ロールが必要です。 VMware Cloud on AWS SDDC から組織 ID と SDDC ID を取得します。これらは SDDC のサポートタブで確認できます。 環境変数を作成します。 EXP_source_refresh_token="xxxxx" export EXP_source_refresh_token EXP_source_org_id="xxxxx" export EXP_source_org_id EXP_source_sddc_id="xxxxx" export EXP_source_sddc_id $env:EXP_source_refresh_token = "xxxxx" $env:EXP_source_org_id = "xxxxx" $env:EXP_source_sddc_id = "xxxxx" ステップ 1b – オンプレミス NSX から NSX 設定をエクスポートする /config_ini フォルダ内の vmc.ini を探します。 auth_mode の値を local に、 nsx_endpoint_type の値を nsx に変更します。 図 4 : vmc.ini 設定ファイルを表示している Visual Studio Code の画面 NSX Manager の URL を確認します。また、ツールに NSX Manager の認証情報を入力する必要があります。VMware Cloud on AWS とは異なり、オンプレミスの NSX からエクスポートを行う場合は、管理者権限が必要ありません。読み取り専用の NSX 監査ユーザーを使用することができます。 環境変数を作成します。 EXP_srcNSXmgrURL=https://nsxmgr.fqdn.com export EXP_srcNSXmgrURL EXP_srcNSXmgrUsername="admin" export EXP_srcNSXmgrUsername EXP_srcNSXmgrPassword="password-for-admin" export EXP_srcNSXmgrPassword $env:EXP_srcNSXmgrURL = “https://nsxmgr.fqdn.com” $env:EXP_srcNSXmgrUsername = "admin" $env:EXP_srcNSXmgrPassword = "password-for-admin" ステップ 2 – エクスポートの実行 VMware Cloud on AWS からエクスポートする場合でも、オンプレミスの NSX からエクスポートする場合でも、同じコマンドを実行します。 python3 nsx_import_export.py -o export python ./nsx_import_export.py -o export エクスポートコマンドの開始と終了: 図 5 :エクスポートコマンドの開始を示すターミナルウィンドウ 図 6 :エクスポートコマンドの終了を示すターミナルウィンドウ プログラムが _json-export.zip で終わる名前の圧縮ファイルを /json ディレクトリに配置します。このファイルを Amazon Q Developer transformation capabilities for VMware で使用することができます。Amazon Q Developer transformation capabilities for VMware の詳細については、こちらの テクニカルウォークスルー をご参照ください。 クリーンアップ 環境をクリーンアップするには、以下の手順を実行します: 認証情報をメモリから消去するため、ターミナルウィンドウを閉じます。 /json ディレクトリ内にある  _json-export.zip で終わる名前の圧縮ファイルを削除します。 ツールを再度使用する必要がない場合は、プロジェクトフォルダー全体とコンテンツ全体を削除することができます。 まとめ Import/Export for NSX は、AWS のオープンソースプロジェクトで、オンプレミスまたは VMware Cloud on AWS の NSX 構成をエクスポートできます。このブログ記事では、GitHub で利用可能な Import/Export for NSX ツールを使用して、NSX の構成をエクスポートするためのステップバイステップガイドを提供しています。このクラウド移行の重要な側面を効率化することで、Amazon は VMware ワークロードの AWS への移行を加速・簡素化する革新的な顧客中心のソリューションを提供することへのコミットメントを示し続けています。私たちの言葉を信じるだけでなく、今すぐツールを試してみてください! Amazon ではお客様から逆算して考えているため、このツールを使用する中でのフィードバックをお待ちしています。お客様のご意見は、私たちが常に最高のエクスペリエンスを提供できるよう、継続的な改善とイテレーションに役立てさせていただきます。 Patrick Kremer パトリック・クレマーは、VMware ワークロードの移行に特化したシニアスペシャリストソリューションアーキテクトです。2022 年に AWS に入社し、15 年以上にわたる VMware の経験を活かしてお客様のマイグレーションとモダナイゼーションを支援しています。AWS 認定ソリューションアーキテクトプロフェッショナルの資格を保有しており、教育とブログ執筆に情熱を注いでいます。 翻訳をソリューションアーキテクトの Furuya が担当しました。原文は こちら です。
本稿では、VPC リソースに対する AWS PrivateLink サポートを使用して、VPC やアカウントの境界を越えて、さらにはオンプレミス環境からも、共有リソースへのプライベートで安全かつ効率的な接続を実現する方法について探ります。また、SaaS プロバイダーとそのクライアントに特化した、新しい AWS PrivateLink の機能を実装するための一般的なユースケースと実装のベストプラクティスについても検討します。 AWS PrivateLink を使用すると、AWS パートナーは自社の Software-as-a-Service (SaaS) 製品を数千のクライアントの AWS アカウントに安全に公開でき、セキュアでプライベートな接続が保証されます。AWS PrivateLink の VPC エンドポイントはほとんどの SaaS 接続ニーズに対応していますが、一部のユースケースでは、ロードバランサーを介さずに共有リソースに直接接続する必要があります。このようなシナリオに対応するため、AWS は VPC リソースへの接続サポートを追加することで PrivateLink の機能を拡張しました。これにより、追加の Elastic Load Balancing インフラストラクチャを必要とせずに、共有リソースへの直接的で安全な接続を構成できます。AWS PrivateLink の VPC エンドポイントか Amazon VPC Lattice を使用して、VPC リソースにアクセスできます。両方のオプションで、VPC リソースに対するクロスアカウント機能が統合されています。 前提条件 AWSのネットワーキングの概念や Amazon Virtual Private Cloud (VPC) や AWS PrivateLink、VPC エンドポイント、Amazon VPC Lattice、VPC ピアリング、 AWS Direct Connect などのサービスについて知っていることを前提としています。これらサービスの定義に焦点は当てませんが、これらサービスの機能と、その機能を使用して VPC リソース向けの新しい AWS PrivateLink サポートを設定する方法について概説します。AWS PrivateLink と Amazon VPC Lattice を SaaS アプリケーションに活用する方法の詳細については、「 Building SaaS Services for AWS Customers with PrivateLink 」および「VPC Lattice サービスネットワーク内での SaaS サービス接続」といった記事を確認することをお勧めします。 VPC リソース向け AWS PrivateLink のサポート VPC リソース向けのプライベート接続は、VPC やアカウントの境界、およびオンプレミスインフラストラクチャを超えて、個々のリソースへの安全で一方向の接続を提供するように設計されています。特定のリソースを別アカウントとプライベートに共有する必要があるリソース所有者は、ロードバランサーを使用せずにこの接続を設定できるようになりました。これは、共有するリソースがデータストア (例えば、単一のデータベースノードやデータベースノードのクラスター)、または負荷分散型アーキテクチャに適さないリソースのクラスターである場合に役立ちます。VPCリソース向けの AWS PrivateLink のサポートでは、クライアントとリソース間の通信にプライベート IP を活用し、VPC 内のどのリソースをリソース消費者に公開するかを細かく制御することができます。 ローンチパートナー 私たちは、この機能を自社ソリューションに組み込んでいるいくつかの ISV パートナーと協力できることを嬉しく思います。 Grafana Labs: How to query private network data without an agent using AWS and Grafana Cloud Palo Alto Networks: Announcing Palo Alto Networks Cloud NGFW Integration with AWS PrivateLink – resource VPC endpoint ClickHouse: ClickPipes supports cross-VPC resource access on AWS! Neo4j: AWS PrivateLink and VPC Lattice Improve Cross-Account Resource Sharing for Neo4j DataStax: Securely Connecting to Astra DB with AWS Starburst: How Starburst secures your data in flight with AWS Informatica: Informatica Announces Broad Innovation Agenda for Analytics and GenAI Solutions, Built on AWS Redis: AWS VPC endpoints on Redis Cloud 仕組み 以下のコンポーネントにより、VPC リソースにアクセスするための AWS PrivateLink と Amazon VPC Lattice のサポートを設定できます。 リソースゲートウェイ :共有リソースにアクセスするために、リソース所有者の VPC へのイングレストラフィックポイントを提供する新しい VPC の構成概念。 リソースコンフィグレーション :共有したいリソースを指定することができます。単一のリソースを指定して単一のリソースコンフィグレーションを作成することも、複数の子リソースコンフィグレーションを含むグループリソースコンフィグレーションを作成することもできます。VPC 内の1つのリソースゲートウェイに複数のリソースコンフィグレーションを関連付けることができます。リソースコンフィグレーションは、 AWS Resource Access Manager (AWS RAM) を使用して、AWS Organization 内外の他アカウントと共有することができます。 リソースエンドポイント :リソース消費者が共有リソースにアクセスするために使用できる新しいタイプの VPC エンドポイント。 VPC Lattice サービスネットワーク :VPC またはアカウント間の接続を可能にし、サービス間通信に共通のセキュリティポリシーを適用する方法を簡素化する論理的なグルーピングメカニズムです。アカウント内にサービスネットワークを作成し、AWS RAM を使用して AWS Organization 内外のアカウントと共有することができます。 サービスネットワークエンドポイントと VPC アソシエーション :VPC Lattice サービスネットワークの VPC エンドポイントにより、リソース消費者は自身の VPC を VPC Lattice サービスネットワークに接続することができます。サービスネットワークへの接続には、サービスネットワーク VPC アソシエーションを使用することもできます。接続オプションの選択に関するベストプラクティスについては、本稿の「知っておくべきこと」セクションで詳しく説明します。 私たちは、SaaS プロバイダーとそのカスタマーがこれらのコンポーネントを活用できるユースケースに焦点を当てています。VPC リソースの接続設定に関する詳細な手順例については、 このトピックに関する Jeff Barr のブログ記事 と AWS PrivateLink のドキュメント をご覧ください。 VPC リソースの利点 AWS PrivateLink とVPC Lattice の VPC リソースサポートは、リソース所有者とリソース消費者の両方に対して、以下の主要な利点を提供します。 リソース消費者は以下のことができます。 インターネット接続なしで VPC リソースにプライベートにアクセス :リソース消費者は、インターネット接続 (例えば、インターネットゲートウェイや NAT ゲートウェイ) を使用せずに、VPC やアカウント、オンプレミス環境を横断して共有リソースにアクセスできます。 消費者主導のアクセスを維持 :接続は一方向であり、接続はリソース消費者の VPC からのみ開始できます。 重複した IPv4 アドレスを持つリソースに簡単に接続 :AWS PrivateLink と VPC Lattice の VPC リソースアクセスサポートにより、クライアントとリソースは重複した IP アドレスを持つことができます。 異なる IP バージョン をサポート :VPC リソースへのクライアントアクセスは IPv4 と IPv6 の両方で構成でき、リソース消費者とリソース所有者間で異なる IP バージョンを使用できます。 オンプレミスクライアントからのアクセスを簡素化 :リソース消費者は、 AWS Direct Connect または AWS Site-to-site VPN 経由でオンプレミスノードから別の VPC のリソースにアクセスできます。 1対多のアクセスを確立 :リソース所有者がグループリソースコンフィグレーションを使用してリソースのグループを共有する場合、リソース消費者は単一の VPC エンドポイントを通じてリソースにアクセスできます。 リソース所有者は VPC リソースへのアクセスを共有でき、次のことができます。 特定の VPC リソースを選択的に構成および共有することでアクセスを制御 :リソース所有者は、自身の VPC から特定のリソースを共有し、消費者がそれらのリソースにのみアクセスできるようにすることができます。リソース所有者 VPC 内の他リソースは消費者に公開されません。 必要な場合にのみロードバランサーを使用 :リソース所有者は、消費者とリソースを共有するためにロードバランサーを構成する必要はありません。 オンプレミスにデプロイされたリソースを共有 :リソース所有者は、Direct Connect / VPN 接続を活用することで、オンプレミスのデータセンターにあるリソースを共有できます。 同じリソースゲートウェイを通じて複数のリソースへのアクセスを許可 :リソース所有者は、単一のリソースゲートウェイに複数のリソースを関連付けることができます。リソースはリソースゲートウェイと同じ VPC にある必要はありません。ただし、リソースゲートウェイを含む VPC は、関連するリソースコンフィグレーション内のリソースへの IP 到達性を持っている必要があります。 アクセスパターンを監視し、アプリケーション通信フローを詳細に可視化 :リソース所有者は、誰が共有リソースにアクセスしているかを監視し、リソースに送信しているバイト数や接続数などを確認できます。 SaaS プロバイダー向け VPC リソースの使用例 1. SaaS プロバイダーがクライアントの VPC またはオンプレミス環境内のデータストアにアクセスする SaaS プロバイダーは、サーバーレスオファリングを実現し、クライアントのデータやシステムと統合するために、クライアントの VPC やオンプレミス環境内のリソースへのアクセスを必要とすることがよくあります。AWS PrivateLink の VPC リソースサポートにより、クライアント (リソース所有者) は自身の AWS アカウントにリソースゲートウェイをデプロイし、特定のリソースを SaaS パートナーと選択的に共有することができます。これにより、SaaS プロバイダーはクライアント管理の Network Load Balancer (NLB) を必要とせずに、必要なクライアントのリソースにアクセスできるようになり、両者の統合プロセスが効率化されます。 SaaS プロバイダー (リソースコンシューマー) 側では、この共有リソースへの接続は、次の 3 つのオプションのいずれかを使用して設定できます。 サービスネットワークエンドポイントの使用 AWS PrivateLink リソースエンドポイントの使用 サービスネットワークへの VPC 関連付けの使用 オプション a :図1は、SaaS プロバイダー (リソース消費者) が、サービスネットワークエンドポイントを使用して、クライアント (リソース所有者) が共有する VPC リソースにアクセスする方法を示しています。このオプションでは、サービスネットワークエンドポイントがリソース消費者の VPC を彼らの VPC Lattice サービスネットワークに接続します。リソース消費者は自身の VPC 内に複数のサービスネットワークエンドポイントを作成できます。各サービスネットワークエンドポイントは、異なるサービスネットワークへのアクセスを可能にします。 複数のサービスネットワークを活用することで、SaaS プロバイダーは異なるクライアントと共有するリソースを論理的に分離することができます。ただし、単一のサービスネットワークを使用して複数の共有リソースにアクセスすることも可能です。 図1. VPC Lattice サービスネットワークに接続されたサービスネットワークエンドポイントを介してリソースにアクセスする SaaS プロバイダー オプション b :図2は、SaaS プロバイダー (リソース消費者) が AWS PrivateLink リソースエンドポイントを活用して、クライアント (リソース所有者) が共有するリソースにアクセスする方法を示しています。このオプションでは、リソースエンドポイントがリソース所有者のリソースゲートウェイに直接接続します。単一のリソース消費者の VPC 内に複数のリソースエンドポイントを持つことが可能です。各リソースエンドポイントは、単一のリソースコンフィグレーションへの接続性を提供します。 図2. リソースエンドポイントを介してリソースにアクセスする SaaS プロバイダー オプション c : リソース消費者の3つ目のオプションは、サービスネットワーク と VPC の関連付けを作成し、VPC エンドポイントを個別に作成することなく、自身の VPC 全体からサービスネットワーク内の共有リソースにアクセスすることです。このオプションを使用する場合、消費者 VPC には1つのサービスネットワークのみを関連付けることができます。サービスネットワークと VPC の関連付けでは、VPC CIDR から IP アドレスを使用しないため、IP 管理が簡素化され、IP 利用が最適化されます。図3 は、オプション c のアーキテクチャ例を示しています。 図3. リソース消費者 VPC が VPC Lattice サービスネットワークに直接関連付けられている場合に、サービスネットワークと VPC の関連付けを介してリソースにアクセスする SaaS プロバイダー 2. クライアントがSaaS プロバイダーのアカウントやオンプレミスで管理するクラスターにアクセスする VPC リソースへのプライベート接続により、SaaS プロバイダーはクライアントに代わって個々のリソースまたはリソースグループを自社の AWS アカウント内でホストできます。SaaS プロバイダーは、これらのリソースを消費者のアカウント内の VPC エンドポイントを通じてクライアントに公開できます。これにより、クライアントは VPC ピアリングや Site-to-Site VPN、またはパブリックインターネットなどの必要以上に広範なネットワークアクセスを提供する可能性のあるネットワーク構成を必要とせずに、SaaS 管理のリソースにアクセスできます。リソース向け VPC エンドポイントを活用することで、SaaS プロバイダーはクライアントの管理オーバーヘッドを大幅に削減できます。これにより、リソース消費者が異なるアカウントの VPC間や、オンプレミス環境間の基盤となる接続メカニズムを設定・維持する必要がなくなります。SaaS プロバイダーは、既存のハイブリッド接続 (AWS Direct Connect または VPN) を活用して、オンプレミスでホストされているリソースを共有する柔軟性も持っています。 このユースケースでは、SaaS プロバイダー (リソース所有者) がデータベースやインスタンス、クラスター、またはオンプレミスリソースなどの管理されたリソースをホストしています。クライアント (リソース消費者) は、利用可能な次の3つのオプションのいずれかを使用して、共有リソースに接続できます。 サービスネットワークエンドポイントの使用 AWS PrivateLink リソースエンドポイントの使用 サービスネットワークへの VPC 関連付けの使用 図4は、クライアント (リソース消費者) が SaaS プロバイダー (リソース所有者) によってホストされている管理リソースに接続するために使用できる3つの異なるオプションを示しています。 図4. SaaS プロバイダーが管理・ホストするリソースにアクセスするクライアント 3. クライアントが SaaS サービスにアクセスし、SaaS プロバイダがクライアントのリソースにアクセスする このユースケースでは、PrivateLink インターフェースエンドポイントと VPC リソースへのプライベート接続の両方を活用し、クライアントと SaaS プロバイダー間のセキュアな通信を可能にします。このアプローチにより、クライアントが SaaS サービスにプライベートにアクセスできることを確保しつつ、SaaS プロバイダーはクライアントの VPC 内のリソースにプライベートにアクセスすることが可能になります。 SaaS プロバイダーがクライアントリソースにアクセスするために、リソース消費者は3つのオプションのいずれかを選択できます。これらは他の2つのユースケースでも説明されています。簡略化のため、ここではリソースエンドポイントオプションの例のみを示しています。図5では、クライアントと SaaS プロバイダーがインターフェースエンドポイントとリソースエンドポイントの両方を利用し、各方向でプライベートで、ポイント型の一方向接続を実現している様子を示しています。 図5. クライアントと SaaS プロバイダーがインターフェースとリソースエンドポイントの両方を一緒に使用している 知っておくべきこと VPC エンドポイントとリソースゲートウェイの少なくとも1つのアベイラビリティーゾーンが重複している必要があります。 共有するリソースを指定するリソースコンフィグレーションを作成する際、リソースの IP アドレスまたはパブリックに解決可能なドメイン名 (DNS ホスト名) を使用できます。 Amazon Relational Database Service (Amazon RDS) などの特定のリソースタイプでは、オプションとして Amazon Resource Names (ARNs) を使用してリソースを指定することもできます。 リソースコンフィグレーションは、単一、グループ、または子の3つのタイプのいずれかになります。単一リソースコンフィグレーションは1つのリソースを指定するために使用されます。グループリソースコンフィグレーションは、子リソースコンフィグレーションのコレクションを指定するために使用され、各子リソースコンフィグレーションには単一のリソースが含まれます。 リソースゲートウェイはロードバランシング機能を提供しません。リソースゲートウェイの背後にあるリソースにロードバランシングを追加するユースケースがある場合は、NLB/ALB を追加し、そのドメイン名をリソースコンフィグレーションで指定することを検討してください。 VPC エンドポイントの料金 と VPC Lattice の料金 を確認してください。 VPC エンドポイントのデフォルトクォータ と VPC Lattice のデフォルトクォータ を参照してください。 まとめ 本稿では、VPC (Virtual Private Cloud) リソースに対する AWS PrivateLink サポートを使用して、VPC やアカウントの境界を越えて、さらにはオンプレミス環境からも、共有リソースへのプライベートで安全かつ効率的な接続を実現する方法について探りました。また、SaaS プロバイダーとそのクライアントに特化した、この AWS PrivateLink の新機能を実装するための一般的なユースケースと実装のベストプラクティスについても検討しました。VPC リソースに対するAWS PrivateLink サポートを活用することで、SaaS プロバイダーとそのクライアントは、お互いに広範なネットワークアクセスを提供することなく、選択的なリソース共有を可能にすることができます。この新機能についてさらに詳しく知るには、 AWS PrivateLink のドキュメント をご覧ください。 本稿は、2024年12月2日に Networking & Content Delivery で公開された “ Extend SaaS Capabilities Across AWS Accounts Using AWS PrivateLink support for VPC Resources ” を翻訳したものです。翻訳は Solutions Architect の武松が担当しました。
生成 AI の活用が様々な分野で広がる中、アプリケーション開発においても、コード生成や言語間の変換といったタスクでその力を発揮しています。今回ご紹介する事例は、これらの一般的なユースケースを超えた、よりチャレンジングな取り組みです。それは、 アプリケーションのモダナイゼーションプロセス全体に生成 AI を活用する という挑戦です。 アプリケーションのモダナイゼーションは、多くの企業が直面する重要な課題です。一般的に、このプロセスは二つの主要なアプローチで説明されます。一つは既存のアプリケーションをクラウドに「リフト & シフト」する方法で、もう一つはアプリケーションを「リファクタリング」し、クラウドネイティブなアーキテクチャで再構築する方法です。「リフト & シフト」は短期的には迅速ですが、クラウドの利点を最大限に活用できない可能性があります。一方、「リファクタリング」は理想的ですが、時間とリソースを大量に必要とします。 しかし、最終的な目標は同じです。それは、アプリケーションを真にクラウドネイティブなものへと進化させることです。スケーラビリティ、柔軟性、コスト効率の向上を実現し、ビジネスの俊敏性を高めることが、このモダナイゼーションの本質的な目的です。 図 1. モダナイゼーションの2つのパターン 東京海上日動システムズ株式会社(以下、東京海上日動システムズ)と AWS は、リファクタリングによるクラウドネイティブ化への道のりに、生成AIを積極活用しようと取り組みました。従来、高度な専門知識と膨大な時間を要するこのプロセスを、生成AIの力を借りてどこまで効率化・最適化できるのか、多くの企業の皆様にとって参考になると思います。 東京海上日動システムズの状況と課題 東京海上日動システムズでは、多くの基幹系システムをすでにAWSに移行していますが、一部のシステムはまだオンプレミス環境で運用されています。また、 AWS へ移行済みのシステムも多くはシンプルなリフト&シフトのアプローチを採用したため、レガシーなアプリケーション構造をそのまま踏襲しています。 同社は、オンプレミスのサーバーや Amazon EC2 上で稼働しているレガシーなJavaアプリケーションをサーバーレスアーキテクチャへモダナイズすることを目指しています。 このモダナイゼーションプロセスを効率化させるため、同社は生成 AI の活用に着目しました。Java で構築されたモノリシックなアプリケーションを AWS Lambda を中心としたサーバーレスアーキテクチャへモダナイズする過程で、通常は高いスキルを持ったエンジニアを数多く投入する必要があります。この作業を生成 AI (Amazon Bedrock)を用いて効率化することを検討しました。 しかし、アプリケーションのモダナイゼーションは単なるコードの生成や変換といったタスクのみで実現できるものではなく、複雑な工程と高いスキルが求められる作業です。 AWS Prototyping Program の採用 この複雑で難解な課題に取り組むため、AWS は Prototyping Program  を提案しました。このプログラムでは AWS の Prototyping Engineer が、お客様の課題に合わせたシステムのプロトタイプを開発します。 AWS Prototyping Program は通常、お客様が実現したいシステムのプロトタイプをお客様に代わって、あるいはお客様と共に AWS の Prototyping Engineer が開発し、お客様の環境で AWS サービスがどのように動作するか、深い洞察や理解を得るためのものです。しかし今回のプロトタイピング活動では、お客様の業務システムを模したサンプルアプリケーションに対して生成 AI を使いながらサーバーレスアーキテクチャへモダナイズします。言うなればモダナイズされたサンプルアプリケーションがプロトタイプとなります。今回の活動では、作成されたプロトタイプそのものではなく、活動を通じて確立させた生成AIの活用プロセスと方法論を実践的に検証し、そのノウハウを蓄積することに焦点を当てました。 プロトタイピングのアプローチを選択した理由 生成 AI を活用したアプリケーションのモダナイゼーションは前例や実績が少ない新しい取り組みのため、試行錯誤しながら改善を繰り返す必要があります。また、アプリケーションのモダナイゼーションは単発作業ではなく今後繰り返し発生する作業であるため、単なる成果物にフォーカスするのではなく、そこに至るプロセスと方法論の理解が重要だと考えました。 また、生成 AI を活用したアプリケーションのモダナイゼーションは複数の技術領域に対する深い造詣が必要です。あらゆる業界やセグメントで活動実績があり、複数の技術領域や多種多様な AWS サービスを組み合わせ迅速にプロトタイプを構築できるプロトタイピングチームの参画は不可欠でした。 プロトタイピングの詳細 本プロトタイピングでは、Amazon Bedrock で利用できる Claude 3.5 Sonnet を広範囲に活用しました。アプリケーションのモダナイゼーションは複雑な作業です。単にプロンプトを工夫して入力すれば良いというものではなく、効果的な戦略を立てることが重要でした。 主なアプローチとして以下が挙げられます: タスクの分割:大規模なモダナイゼーションタスクを小さな単位に分割し、各タスクに対して最適なプロンプトを設計しました。例えば、生成 AI を使ってモダナイズ後のアプリケーションの REST API インターフェースを最初に定義することで後続タスクでやるべきことを明確に細分化できます。 段階的詳細化:アプリケーションコードは最初からいきなり生成させるのではなく、まずは必要となるコンポーネントや関数を生成 AI に列挙させ、その後にそれらの構成要素の中身を一つずつ実装させていく段階的詳細化のアプローチを採用しました。 共通タスクの前処理:DBアクセスやフロントエンドの Routing 処理など、ビジネスロジックから分離できる共通部品は予め用意しておき、プロンプトにそれら共通部品に関する情報を含めました。生成 AI が注力すべきスコープをビジネスロジックに集中させることで、ノイズの少ない生成 AI への入出力が期待できます。 コンテキストの維持:複数のステップにまたがるタスクでは、前のステップの出力を次のステップの入力として使用し、一貫性を保ちました。Anthropic Claude は 200,000 トークンのコンテキストウィンドウがあり、大量の情報を渡すことを可能にします。 人間によるレビューと修正:作業の大半は生成 AI に任せることができますが完全ではありません。生成AIの出力を人間が確認し、必要に応じて人手による修正またはプロンプトへの指示を追加することで品質を確保しました。 大規模アプリケーションの考慮:今回のプロトタイプ対象は小規模なサンプルアプリケーションであったため、アプリケーションソースコードの全量をプロンプトに含めることも可能でした。しかし大規模なアプリケーションのモダナイゼーションも考慮し、ソースコードの全量ではなくJSP や Controller のソースコードを中心に必要最低限のコードのみをプロンプトに与えても精度が落ちないように検証と改善を繰り返しました。 図 2. 変換作業の戦略 これらのアプローチを用いて、サンプルのJavaアプリケーションを対象に、以下のような成果を達成しました: アプリケーションの構造解析と依存関係の特定 フロントエンドとバックエンドを分離するための REST API インターフェースの定義 ステートレスな SPA(Single Page Application) へ変更するための DB スキーマの更新案の提案 バックエンドアプリケーション処理の抽出と AWS Lambda (今回は Python への変換も合わせて行いました)用のコードの生成 フロントエンドアプリケーション処理の抽出と Vue.js 用のコードの生成 図3. 変換前後のサンプルアプリケーションの画面イメージ お客様の評価と今後の展開 東京海上日動システムズはこのプロトタイピングの結果を高く評価し、プロトタイピングプログラムの成果物を使用して小規模な検証用アプリケーションに対してPoCを実施しました。95%以上は生成AIが生成したコードで動作し、発生したエラーについても多くは単純な修正で解消できました。一方で、一つのパッケージで完結しないJavaアプリケーションの場合やバリデーションチェック、エラーハンドリングについては作業プロセスやプロンプトの工夫によりさらなる改善の余地があると考えています。今回のPoCの総括として、アプリケーションのモダナイゼーションプロセスに生成 AI を活用する試みは一定の成果があったと判断しています。 東京海上日動システムズ デジタルイノベーション本部 デジタルイノベーション開発部 光岡様からは以下のコメントをいただいています。 AWS Prototyping Programは当社の難しい課題に対して有意義な知見を与えてくれました。今回の取り組みは非常にチャレンジングな領域なため当社社員だけだと推進が難しかったのですが、AWSの支援があってとても良い結果が出せました。今回の PoC の結果を受けて、来年度は実際のアプリケーションのモダナイズにも少しずつ活用していく予定です。そこで得た知見をもとにさらなる改善を繰り返しながら、将来的にはより複雑で規模の大きなアプリケーションのモダナイズへも展開していくことを目指しています。 まとめ 本事例を通じて、Amazon Bedrock および Anthropic Claude が複雑なアプリケーションモダナイゼーションタスクにおいても高い能力を発揮することが実証されました。特に、コードの解析、リファクタリング案の提示、アーキテクチャ変更の提案など、多岐にわたる領域で有用性が確認されました。 また、AWS Prototyping Program が、単なる成果物の提供にとどまらず、新しい技術やアプローチの実証と知見の共有に大きな価値を提供できることも示されました。この協働的なアプローチにより、お客様は自社の課題に即した形で生成 AI の活用方法を学び、実践する準備を整えることができました。 生成 AI を活用したアプリケーションモダナイゼーションは、まだ発展途上の分野です。しかし、本事例が示すように、適切な戦略と方法論を組み合わせることで、従来の手法よりも効率的かつ効果的にクラウドネイティブ化を進められる可能性があります。今後、さらに多くの企業が同様のアプローチを採用し、デジタルトランスフォーメーションを加速させることが期待されます。 ソリューションアーキテクト 小野 卓人、神部 洋介
この記事は 「 How generative AI and data are redefining retail experiences 」(記事公開日: 2024 年 10 月 22 日)の翻訳記事です。 小売業と消費財業界は、デジタルトランスフォーメーションを中核に据え、急激に変化しています。 小売業者と消費者ブランドは、このデジタル化へのジャーニーのさまざまな段階にあり、それぞれがビジネスを前進させようとカスタマイズされたソリューションを求めています。 デジタルトランスフォーメーションを推し進めるには、組織はデータに基づくインサイトを必要としており、それによってビジネスの成果を実現しようとしています。 こうした状況の中、データレイク、機械学習 (ML)、人工知能 (AI) などのテクノロジーにより、インサイトを得て、それに基づいて行動することがこれまでになく簡単になっています。 生成 AI で小売を新たな高みへ 小売業と消費財のダイナミックな世界では、生成 AI は変革をもたらす触媒として機能します。 企業が顧客と関わり、業務を管理し、成長を促進させる方法を変革します。 生成 AI の可能性は非常にエキサイティングで、Goldman Sachs は 10 年間で 世界の GDP が生成 AI によって 7% 増加し 、生産性が 1.5% ポイント向上すると予測しています。 商品マーケティングの自動化 小売業者や消費財ブランドは、 Amazon Bedrock 、 大規模言語モデル (LLM)、マルチモーダルモデルを使用することで、インテリジェントな商品分析や使用説明書用の文章作成を行うことができます。 こうしたモデルは、商品の正確性を保証するだけでなく、オンラインの商品カタログ全体で検索をかけた時にその商品がヒットするよう、使用説明書の文章の最適化も行います。 The Very Group (TVG) を例にとってみましょう。 英国の大手マルチブランドオンライン小売業者である TVG では、人気のある E コマース Web サイトを通じて、お客様は衣料品、家庭用品、電子機器などのカテゴリーにある何千もの商品ページにアクセスできます。また、 TVG で扱う商品の開発推進を目的とした生成 AI システムを開発することで、 商品開発プロセス も変革しました。 このシステムでは、Amazon Bedrock、LLM、マルチモーダルモデルを使用して商品を分析し、TVG のコピーライター向けのコンテンツを作成しています。 こうして開発処理時間が短縮され、質の高い商品説明の作成が容易になったため生産性が向上しました。 カスタマーサービスの強化 小売業者も、オンラインと店舗の両方での顧客体験の向上に努めています。 2021 年の Qualtrics の調査 では、調査回答者の 80% が、顧客体験が悪いために他のブランドに切り替えたと答えています。 一方で、AI を活用したチャットボットとカスタマーサービスソリューションとのやりとりを通じて、消費者はより自分に合ったサービスを享受できるようになりました。 アマゾンウェブサービス (AWS) のコンタクトセンターソリューションにより、企業はチャットボットを使用してウェブ上の顧客をほぼ瞬時に支援できるようになり、運用コストを削減しながら顧客満足度を向上させることができています。 また、 Amazon Q in Connect を使うと、生成 AI アシスタントが顧客からの問い合わせにどのように回答し、対応したらよいかを提案してくれるので、より迅速な問題解決と顧客体験の向上を実現しています。 Orbit Irrigation のカスタマーケア担当シニアマネージャーである Brian Dick 氏は 次のように述べています :「お客様の問題を解決するために、当社のカスタマーケア担当者は 1 回の問い合わせにつき 2 ~ 3 分かけて、いくつものデータソースを検索しています… Amazon Q in Connect を使うと、問い合わせにかかる時間を 10 ~ 15% 節約できます。そのため 1 時間あたりに処理できる通話数が増えるので、Orbit のコスト削減に直接つながることが期待できます」。こうしたパーソナライズされたアプローチは、顧客満足度を高めるだけでなく、ロイヤルティの醸成にもつながります。 カスタマーサービスを活性化させているもうひとつの企業が DoorDash です。 2024 年の初め、DoorDash は自社の Amazon Connect コンタクトセンターに 生成 AI を活用したセルフサービス を導入しました。 DoorDash は生成 AI を活用して、特に Dashers と呼ばれる配送ドライバーへのカスタマーサポート体験を強化しようとしていました。 消費者、業者、Dashers からの大量のリクエストに直面した同社は、当時、セルフサービスという選択肢の改善を模索していました。 DoorDash は AWS とその Generative AI Innovation Center で協働し、音声で操作が可能なセルフサービスのコンタクトセンターソリューションをほんの 2 か月で開発しました。 DoorDash は Amazon Connect と Amazon Lex を使用してインタラクティブな音声応答システムを構築し、カスタマーケア担当者への転送を 49% 削減しました。 また、DoorDash は 1 回の通話で解決する割合を 12% 向上させたため、顧客体験の向上と年間 300 万ドルの運用コスト削減につながりました。 しかし、通話の多くは依然としてカスタマーケア担当者によるサポートを必要としていたため、DoorDash はセルフサービス機能をさらに強化する必要に迫られました。 Dashers は配達中の問い合わせでは迅速な対応を必要とするため、DoorDash は応答時間の短縮に取り組みました。 Amazon Bedrock を通じて生成 AI を実装したことで、よくある質問にすばやく回答できるようになり、セルフサービスの効率と信頼性が向上しました。 このイニシアチブは、サポートを合理化しただけでなく、3700 万人以上の消費者と 200 万人の Dasher からなるユーザーベースの市場の発展および顧客体験の向上の両方を目指す DoorDash の取り組みを強化するものでもありました。 消費者体験を高度にパーソナライズする Amazon Bedrock を使用することで小売業者は高度にパーソナライズされたショッピング体験を提供できます。これによって、かつてないほどの正確さと魅力的なアプローチでお客様が探している商品にたどりつけるようになります。生成 AI を活用するこうした企業は、よりカスタマイズされた商品レコメンデーション、動的なコンテンツ生成、インテリジェントな検索機能を提供することで、オンラインストアの常識を変革しています。 その影響は計り知れません。 McKinsey は 2021 年に、高度にパーソナライズされた体験を提供することで平均で 10 ~ 15% の収益増加が可能であり、そうしたイニシアティブを導入した企業の収益は 5 ~ 25 パーセント増加すると報告しました。 他にも素晴らしい事例があります。 Buy with Prime は、Amazon Bedrock 検索拡張生成 (RAG)を使って高度にパーソナライズされた体験の開発を追求しています。 RAG を使用して商品サポートの問い合わせを処理するチャットボットソリューションを改善し、従来のメールベースのサポートより優れた体験を提供しています。 こうしたイノベーションによって、企業は目覚ましい成果を生み出しています。B2B 体験をパーソナライズしている企業の 77% が市場シェアの拡大を報告しており、消費者の 4 分の 3 近くがパーソナライズなしではショッピングを完了できないと答えています。 さらに、パーソナライゼーションによって顧客獲得コストを 50% も削減できます。 こうした例と実績は、生成 AI の力と可能性を実証しています。 消費者はすでに、ショッピングジャーニー全体を通じてより魅力的で効率的でパーソナライズされたサポートを利用しており、その恩恵を受けています。 高度なデータインサイトによって小売業界を変革 Amazon Q や Amazon QuickSight などの生成 AI テクノロジーには、高度なデータインサイトの収集など、いくつかの機能があります。 小売業者や消費者ブランドは、これらのインサイトを活用してデータの可能性を最大限に引き出すことができます。 なぜこれが重要なのでしょうか? 効果的なデータ管理と分析によって、小売企業や消費財企業は競争力を保つことができます。そこに AWS は、 Amazon S3 などのスケーラブルなストレージソリューションと強力な分析ツールを組み合わせた強固なフレームワークを提供しています。企業はこのAWS フレームワークを使用して、膨大な量の構造化データと非構造化データを安全に管理できます。こうしてデータ処理が効率化され、小売業者は実用的なインサイトを迅速に引き出すことができるのです。 Amazon QuickSight は、このエコシステムにおいて極めて重要なツールです。 超高速で並列性の高いインメモリ計算エンジンにより、大規模なデータセットを迅速に分析できるため、ユーザーは数十億行のデータを操作に応じてリアルタイムに視覚化できます。 この機能は、リアルタイムのデータ傾向に基づいて迅速な意思決定を行う必要がある小売業者にとって極めて重要です。 Amazon Q in QuickSight では、自然言語によるクエリもサポートしているため、ユーザーは質問をしたり、すぐにデータを視覚化してもらうことができます。 これによりデータへのアクセスが民主化され、技術的な専門知識がなくても、どの部門の従業員であっても複雑なデータセットを扱うことができます。 Amazon Q in QuickSight での自動データ準備機能は、セマンティック情報を推測してデータセットに追加することで、効率を大幅に向上させます。 これによって手作業によるデータ準備作業に費やす時間が減り、複雑なデータ管理から解放されてインサイトの抽出に集中できるようになります。 小売業者は、こうしたインサイトを、次のようなさまざまな用途に活用できます。 マーケティング戦略のパーソナライズ Amazon Q を利用すると、小売業者は自然言語によるクエリを通じて顧客の行動を迅速に分析できます。 たとえば、マーケティング担当者は「18 ~ 25 歳の顧客が先月購入した商品は何か」と尋ねることができます。そうしたデータがあれば、 販売キャンペーン を変更して改善できます。 生成 AI を統合することで、ユーザーの行動に基づいてマーケティングコンテンツをリアルタイムでカスタマイズできます。 マーケティングチームは Amazon Q を使用して販売キャンペーンのパフォーマンスに関する詳細を表示させることもでき、戦略を迅速に調整しやすくなります。 Amazon Personalize などのツールを QuickSight や Amazon Q と組み合わせると、コンテンツの作成と配信を強化できます。 さらに、Amazon Q のストーリー機能ではインサイトの共有が簡単になり、視覚的にわかりやすいレポートを作成し、チーム間のコラボレーションが向上します。 こうした機能により、マーケティングチームはトレンドに迅速に対応し、より効果的なキャンペーンを推進できます。 在庫管理 効果的な在庫管理には、コストを最小限に抑えながら最適な在庫レベルを維持することが不可欠です。 Amazon Q では、小売部門や消費財部門が簡単な自然言葉で過去の売上データをクエリできるため、正確な需要予測が容易になります。 例えば、小売業者は「過去の傾向に基づく次の四半期の売上予測はどれくらいか」と尋ねることができます。 これにより、企業は在庫レベルを積極的に調整し、人気商品の品切れを防ぎつつ過剰在庫を減らすことができます。 Amazon Q からのインサイトを活用した QuickSight の視覚化機能によって主要な在庫指標は継続的にモニタリングできるようになり、その結果、小売業者や消費者ブランドはサプライチェーンをタイムリーに調整できるようになるので、顧客満足度と業務効率が向上します。 業務効率 業務効率を最大化することは小売業者にとって不可欠です。Amazon Q は、対話型クエリを通じて動的に過去の主要業績評価指標の追跡ができ、一方で QuickSight はデータを静的に視覚化することに長けているので、QuickSight の強力な視覚化ツールを、Amazon Q の対話型クエリで補完し KPI を追跡することができます。 マネージャーは「今月は売上目標に対してどの程度達成しているか」といった質問をすることができます。 リアルタイムダッシュボードはパフォーマンスを継続的に監視し、ボトルネックを特定し、迅速な行動を促すためのインサイトを提供します。 こうした高度な機能を業務に統合することで、組織は情報に基づいたデータ主導の意思決定を迅速に行い、ビジネス目標をより早く達成できます。 さらに、生成 AI 機能を統合することで、チームはデータサイエンスの広範なトレーニングを受けなくても複雑な分析を行うことができます。 チームメンバーは Amazon Q in QuickSight に「先月の売上増加に貢献した要因は何か」と尋ねることができます。 また、主要な要因の概要を数秒以内に受け取ることができます。 この機能により、小売部門や消費財部門は表面下にある本質的な傾向を理解し、戦略を積極的に調整できるようになります。 Amazon Q と Amazon QuickSight は、小売企業や消費財企業が蓄積されたデータから実用的なインサイトを引き出すことを支援します。こうしたツールによってデータ管理プロセスが簡素化され、自然言語クエリによる可視化機能が強化されることで、企業は市場の変化に迅速に適応し、持続的な成長に向けて業務を最適化できるようになります。 まとめ 小売・消費財業界は、技術の進歩と消費者の期待の変化に促されて、急速に進化し続けています。 生成 AI の使用とデータ主導型戦略の採用は、よりパーソナライズされた体験の創出、業務の最適化、データに基づいた意思決定を目指す小売・消費財業界にあってはトレンドとなっています。 こうしたイノベーションを取り入れることで、小売業者や消費者ブランドは、成長を続けるデジタル市場において、顧客満足度を高め、プロセスを合理化し、競争力を高めることができます。 独自のソリューションを構築する際の、アーキテクチャの参照となるケースに関しては、AWS ソリューションライブラリの Generative AI Application Builder on AWS ページをご覧ください。 小売 および 消費財 分野のビジネスおよび技術ユースケース向けのさまざまな検証済みソリューションとガイダンスが紹介されています。 小売および消費財企業が、ソリューションを購入するか自社開発するかの選択に迫られた時でも、AWS には広範なパートナーコミュニティがあり、そのパートナー各社が業界ニーズに合わせて厳選したソリューションが AWS Marketplace の小売・消費財向けハブで提供されていますので Marketplace 上でいろいろと選べます。 その他のユースケースやトレンドの詳細については、 AWS for Retail and Consumer Goods ページをご覧ください。 お問い合わせはこちらへ AWSが提供する小売および消費財産業向けの充実したソリューションラインナップを見てみましょう。AWSで小売ビジネスをどのように変革できるかがわかります。 小売 と 消費財 テクノロジー を専門とする AWS パートナーとつながり、お客様固有の課題に対応する最高のツールと専門知識を入手しましょう。 イノベーションと成長へのジャーニーを始めるために、今すぐ AWS の担当者 に連絡してみましょう。 さらに読む Generative AI for Retail and Consumer Goods Intelligent Supply Chain Solutions from AWS Data Lake | AWS Solutions for Retail Demand Forecasting & Planning | AWS Solutions for Retail 著者について Anu Kaggadasapura Nagaraja Anu Kaggadasapura Nagarajaは、シアトルオフィス勤務のアマゾンウェブサービスのソリューションアーキテクトです。機械学習、AI、データ分析を専門としています。 エンタープライズグリーンフィールド小売店や 消費財のお客様と協力して、AWS プラットフォーム上で革新的なアプリケーションを設計および開発しています。テクノロジー強い信頼を寄せている Anu は、お客様がAWSを最大限に活用して、ビジネスの問題を解決できるよう支援することに力を注いでいます。 Brendan Jenkins Brendan Jenkins はソリューションアーキテクトで、AWS の企業顧客を対象に技術ガイダンスを提供し、ビジネス目標の達成を支援しています。 DevOps と機械学習テクノロジーを専門としています。 Esther Kang Esther Kang はAWS バージニアオフィス勤務のアソシエイトソリューションアーキテクトです。 AWS に入社する前、Esther はメリーランド大学で学び、コンピュータと情報科学の学士号を取得して卒業しました。 在学中にデータベースの設計とプログラミングのスキルを磨き、現在は AWS の職務でそのスキルを活かしています。 Parker Bradshaw Parker Bradshaw は AWS のエンタープライズ SA で、ストレージとデータテクノロジーを専門としています。 小売企業が大規模なデータセットを管理して顧客体験と商品品質を向上させるのを支援しています。彼はイノベーションと技術コミュニティの構築に情熱を注いでいます。休日は、家族と過ごす時間を大切にし、ピックルボールを楽しんでいます。 本ブログは CI PMO の村田が翻訳しました。原文は こちら 。
みなさん、こんにちは。2024 年 10 月 18 日に、AWS Japan 主催のコスト最適化関連イベントとなる、「 AWS 秋の Cost Optimization 祭り 2024 」を開催いたしました。本ブログでは、イベント内容概要の紹介と、イベントの中で各登壇者が発表した資料を公開いたします。 アジェンダ イベント当日は、90名以上のお客様にご参加いただき、約2時間にわたるイベントとなりました。オープニングに続き、AWS のカスタマーソリューションマネージャー 青木とテクニカルアカウントマネージャー 石王によるコスト関連セッションを実施。その後、日産自動車株式会社 吉澤様、株式会社ポーラ・オルビスホールディングス 北川様、株式会社 MIXI 木村様から、それぞれコスト最適化に関する貴重な事例をご紹介いただきました。最後に、ソリューションアーキテクト 柳のセッションを経てイベントを締めくくりました。各セッションの概要と発表資料は以下をご覧ください。 セッションの紹介 CFM フレームワーク概要 発表資料: AWS_秋のCost_Optimization祭り_2024_CSM青木_CFMフレームワークの概要 まずは、カスタマーソリューションマネージャーの青木より、「CFM フレームワーク概要」を紹介しました。Cloud Financial Management (CFM) とは、「可視化」、「最適化」、「計画・予測」と「FinOps」の 3 + 1 の柱から構成される、コスト最適化のためのフレームワークになります。セッションの中では、それぞれの柱の中でどのようなアクションを実施すべきかを説明しました。また、アクションの中で活用できる AWS サービスとして、 AWS Cost Usage and Reports (CUR), Amazon QuickSight , Cost Optimization Hub の使用方法も紹介しました。セッションの最後には、FinOps のアクションとして、IT 部門と財務部門が一体となることがクラウドのコスト最適化において重要であることをお伝えしました。 クイックウィン最適化 発表資料: AWS_秋のCost_Optimization祭り2024_TAM石王クイックウィン最適化 テクニカルアカウントマネージャーの石王より、「クイックウィン最適化」として、Cost Optimization Hub を使ったクイックウィン最適化の始め方を紹介しました。Cost Optimization Hubとは、AWS アカウントと AWS リージョン全体でコスト最適化に役立てることのできる、コスト管理機能になります。セッションの中では、Cost Optimization Hub の開始方法から始まり、AWS リソースのコスト削減余地や推奨アクションを確認するための一連の操作方法を説明しました。また、実際のマネジメントコンソールの画面をみながらデモンストレーションしたため、会場にご参加の皆様には具体的な操作イメージが伝わったのではないかと思います。 コスト最適化施策の歩みと壁(日産自動車株式会社様) 日産自動車株式会社様では、多くの業務システムを AWS 上で稼働させており、Cloud Center of Excellence (CCoE) を中心に組織的なコスト管理を行っています。コスト最適化の歩みとして、多くの削減余地に対してコスト削減施策が実行できていないこと、 AWS Savings Plans / Reserved Instance カバレッジ率の低下、RDS Reserved Instance 購入時負荷増大、各アプリのコスト削減推進不足という4つの課題それぞれに対する取り組みをご紹介いただきました。課題それぞれのお困りごとや、取り組みにより達成した成果を具体的にご説明いただきましたので、同様のお悩みを抱えておられるお客様には参考になる点も多いと思われます。今後は、コスト可視化ダッシュボードの刷新や AWS トレーニングの強化を通じて、さらなる最適化を目指すとのことでした。 複数OrganizationsのAWSコストをまとめて可視化してみた(株式会社 ポーラ・オルビスホールディングス様) 発表資料: AWS_秋のCost_Optimization祭り2024ポーラオルビスホールディングス様_複数OrganizationsのAWSコストをまとめて可視化してみた 株式会社ポーラ・オルビスホールディングス様では、コスト最適化を図るためのステップとして「可視化」「分析」「検討」「削減」の4 ステップを定義し、これらのステップを途切れず繰り返し行う「コストコントロールループ」をゴールと定められました。本セッションでは、コストの可視化についてご紹介いただきました。複数のリセラーからアカウントを調達していることから、複数の AWS Organizations コストの可視化を実現する、 AWS Cost Explorer API を使った独自のダッシュボードを作成されました。ダッシュボード作成により、各部署が好きなタイミングでコストを確認でき、また、コスト最適化を行うための月次ミーティングを実施することで、担当一人一人がコストコントロールの意識を持つことができるようになったとのことです。これらのコントロールループを実現するための具体的な課題と解決策をご紹介いただきました。 長期運用を支えるみてねの継続的なコスト最適化の取り組み(株式会社MIXI様) 発表資料: AWS_秋のCost_Optimization祭り2024_MIXI様⻑期運用を支えるみてねの継続的なコスト最適化の取り組み 株式会社 MIXI 様は、子供の写真や動画を家族と共有しコミュニケーションして楽しむ「みてね」というサービスを提供しています。本セッションでは、みてね SRE チームのコスト最適化への取り組みについてお話いただきました。Grafana を使ったコストの可視化やリソースのモニタリング、コスト最適化施策を実施する際のコスト削減効果と難易度のマトリックスのお話など、普段コスト最適化について意識されている点を具体的にご紹介いただきました。コスト最適化施策があるが実施するべきか悩まれている方には参考になるセッションだと思われます。 アーキテクチャ最適化 発表資料: AWS_秋のCost_Optimization祭り2024_SA柳_CFMフレームワークの概要アーキテクチャ最適化-Architect with cost in mind- 最後に、ソリューションアーキテクトの柳から、コスト最適化を考慮したアーキテクチャ最適化についてお話ししました。 このテーマに対するアプローチはベストプラクティスというものは無く、機能/非機能要件とのトレードオフで決定していくものであるという前置きのもと、データ取り込み、 Amazon CloudWatch 、Machine Learning を題材にケーススタディしました。データの取り込みでは、軽視されがちな Amazon S3 における API コストの考え方を、ストレージクラスごとに分類しご紹介しました。CloudWatch のコスト取り込みでは、ログの役割に応じて転送先を分けることで、よりコストを削減する構成について説明しています。そして最後に、生成 AI を活用することによって、コスト要因であったモデル作成・学習のプロセスそのものが変革されるのではないかと、提起しました。そして、総括として今までのやり方に捉われないことで根本的にコスト構造が変わりうると結んでいます。 まとめ 本イベントでは、コスト最適化にフォーカスして、AWS からの情報だけでなくお客様事例も交えて様々なトピックを紹介しました。 クラウドでは、コスト最適化に終わりはなく継続して実施することが重要です。本イベントから少しでもコスト最適化のヒントを持ち帰り、実践頂ければ幸いです。今後もこのようなイベントを通じて、お客様からの知見共有と AWS からコスト最適化の情報発信が出来ればと考えています。 本ブログは、Sr. Customer Solutions Manager の山下、Sr. Technical Account Manager の岡本により執筆いたしました。
みなさん、こんにちは。AWS ソリューションアーキテクトの木村です。 1 月 28 日(火)に AWS re:Invent Recap – インダストリー編 がオンラインで開催されます。インダストリー別に AWS の最新アップデートを紹介しますので、皆さんの業務に関連しそうなセッションにぜひご参加いただければと思います。 それでは、1 月 20 日週の生成 AI with AWS界隈のニュースを見ていきましょう。 さまざまなニュース ブログ記事「Amazon Q Developer の運用調査機能を始めよう」を公開 AWS re:Invent 2024 にて、生成 AI 技術を活用してインシデントの調査を支援する Amazon Q Developer の運用調査機能 を発表しました。このブログでは、セットアップ方法をステップバイステップで説明しています。また併せて インタラクティブデモ も公開されていますのでぜひご覧ください。 ブログ記事「Amazon Q Developer を活用し自然言語を使って簡単に AWS CLI コマンドを実行」を公開 この記事では、コマンドライン (CLI) 上での Amazon Q Developer のセットアップ方法と活用例を紹介しています。活用例では、S3 バケットの作成や CloudFront ディストリビューションの設定などの指示を自然言語で CLI 上に記述し、その内容に応じて Amazon Q Developer が生成した bash コマンドを実行してウェブサイト構築を行う例を紹介しています。 ブログ記事「新しい Amplify AI Kit で、フルスタックの AI アプリを数分で構築」を公開 この記事では、生成 AI 機能を持ったアプリケーションを Amplify AI Kit を使用して構築する方法について紹介しています。AI 機能の追加には、チャットを実現するConversation API もしくは文章生成を行う Generation API を使用します。それぞれの API の使い方と使用した際のアーキテクチャが解説されています。 ブログ記事「アプリケーションデータを使用して、カスタマイズされた AI ベースのチャットインターフェースを作成」を公開 この記事では、Amplify AI Kit を使用してアプリケーションに会話型 AI チャットを追加する方法を紹介しています。Amplify AI Kit を使い数行のコードを記載することで、会話型チャット・アバター・添付ファイル設定などをフロントエンドアプリケーションに追加することが可能です。コード例と共に紹介していますので、ぜひご覧ください。 ブログ記事「React Native と AWS Amplify、Amazon Bedrock Knowledge Base を利用したトラベルプランナーの構築」を公開 上記 2 つの記事ではアプリケーションから LLM をそのまま呼び出す方法を紹介しましたが、この記事では Amazon Bedrock Knowledge Bases で構築した RAG を Amplify AI Kit を使ってアプリケーションに実装する方法を紹介しています。 ブログ記事「【開催報告&資料公開】生成 AI と AWS Ad/Marketing Tech Services で実現する広告・マーケティングイノベーション」を公開 2024 年 10 月 17 日に、広告やマーケティングに携わる方々を主な対象としたオンラインセミナーを開催しました。こちらの記事は、そのセミナーの開催ブログです。生成 AI 含む AWS の Ad/Mktg Tech サービスの効果的な活用方法や AWS Clean Rooms のお客様事例を紹介しています。 サービスアップデート Amazon Q Business にて、チャットでアップロードされた画像のインサイト抽出機能に対応 生成 AI 搭載アシスタントである Amazon Q Business にて、チャットでアップロードされた画像に関する質問への回答とインサイトの抽出機能を提供開始しました。例えば、請求書の画像をアップロードして経費の分類を依頼したり、アーキテクチャ図を共有して設計に関する質問をしたりすることができます。この機能は、Amazon Q Business が利用可能なすべてのAWSリージョンで利用できます。 Amazon Bedrock にて Luma AI の Ray2 ビデオモデルが利用可能に Luma AI の新しいビデオ生成 AI 基盤モデルである Ray2 が、Amazon Bedrock で利用可能になりました。Luma Ray2 は、自然な動きを持つリアルな映像を作成できるビデオ生成モデルです。Ray2 は現在、540p もしくは 720p の解像度、5 秒 もしくは 9 秒のビデオ生成をサポートしています。現在オレゴンリージョンで利用可能です。 詳細はこちらのブログ をご覧ください Amazon Bedrock にて、Cohere Embed 3 Multilingual と Embed 3 English のマルチモーダルサポートを開始 埋め込みモデルである Cohere Embed 3 Multilingual と Embed 3 English にてマルチモーダルサポートを開始しました。マルチモーダルサポートにより、画像コンテンツを含むデータから重要な情報を引き出すことが可能になります。現在、東京リージョン含む 12 のリージョンでサポートされています Amazon Bedrock Flows にて、複数ターン会話のサポートを発表(プレビュー) Amazon Bedrock Flows は、LLM・エージェント・ナレッジベース・その他の AWS のサービスのワークフローを作成することが可能なサービスです。今回のアップデートで複数ターン会話がサポートされたことで、一連の処理に必要な情報が不足していた場合に、ユーザーに要求して引き出すことができるようになりました。これにより、ワークフローの処理に必要な情報を自然な会話を通じて取得できるようになります。 Amazon Neptune にて、オープンソースの GraphRAG ツールキットのサポートを開始 GraphRAG とはグラフデータベースを用いた RAG の技術を指します。今回発表された GraphRAG ツールキットは、非構造化データからグラフを自動構築し、このグラフに対してクエリを行って質問応答するための機能を提供します。詳細については、 ユーザーガイド をご覧ください。 著者について 木村 直登(Naoto Kimura) AWS Japan のソリューションアーキテクトとして、製造業のお客様に対しクラウド活用の技術支援を行なっています。最近は生成 AI と毎日戯れており、特にコード生成と LLM エージェントに注目しています。好きなうどんは’かけ’です。
みなさん、こんにちは。ソリューションアーキテクトの根本です。 今週も 週刊AWS をお届けします。 過去にもご紹介した AWS re:Invent Recap – インダストリー編 がいよいよ今週開催です。 お見逃しないよう是非ご活用ください! それでは、先週の主なアップデートについて振り返っていきましょう。 2025年1月20日週の主要なアップデート 1/20(月) アップデートはありませんでした 1/21(火) Amazon EventBridge announces direct delivery to cross-account targets Amazon EventBridge イベントバスが別アカウントのAWSサービスにイベントを直接配信できるようになりました。Amazon EventBridge イベントバスはサーバレスのイベントブローカーで、任意のアプリケーション、SaaSアプリケーション、AWSサービス間でイベントをルーティングしイベント駆動アプリケーションを作成できます。これまで、別アカウントのサービスを呼び出すにはLambda関数などを使って構築する必要がありましたが、今回のアップデートでこれらが不要になります。この機能は全ての商用AWSリージョンでご利用できます。詳細については ブログ 、もしくは ドキュメント をご確認ください。 Amazon Corretto January 2025 quarterly updates Amazon Corretto 長期サポート(LTS)バージョンと機能リリース(FR)バージョンの四半期ごとのセキュリティアップデートとクリティカルアップデートが発表されました。Amazon CorrettoはOpenJDKの無償のマルチプラットフォーム対応ディストリビューションです。最新のバージョンのCorretto 23.0.2、21.0.6、17.0.14、11.0.26、8u442は ホームページ 経由、もしくは Corretto AptまたはYumリポジトリ から利用できます。 Amazon Neptune now supports open-source GraphRAG toolkit オープンソースのGraphRag Toolkitが公開されました。このToolkitはデータソース、グラフストア、ベクターストアを設定することで、グラフストアにベクトル埋め込みが自動的に生成され、選択したグラフストア内のエンティティとその関係のグラフ表現を保存してくれるものです。グラフストアとしてAmazon Neptune DatabaseまたはNeptune Analytics、ベクターストアとしてAmazon OpenSearch Serverlessを選択できます。詳細についてはGithubにある ユーザーガイド をご確認ください。 1/22(水) CloudWatch provides execution plan capture for Aurora PostgreSQL Amazon CloudWatch Database InsightsがAurora PostgreSQL インスタンスで実行されている上位SQLクエリの実行計画を収集し、保管できるようになりました。この機能によりパフォーマンス低下等の原因を実行計画をもとに特定することが可能になります。この機能はCloudWatch Database InsightsのAdvancedモードでのみ使用できます。詳細については ドキュメント をご確認ください。 Amazon Redshift announces support for History Mode for zero-ETL integrations Amazon Redshift ゼロ ETL 統合に history(履歴) モードが追加されました。この機能によりコードを記述することなく、データベースの履歴データに基づいたデータモデリング手法の一つであるType 2 Slowly Changing Dimension (SCD 2)テーブルを作成できます。この機能によりAmazon DynamoDB、Amazon RDS for MySQL、Amazon Aurora MySQL、そして Amazon Aurora PostgreSQLのデータソースと重複したコピーを保持せずに、データ変更履歴を保存できるため、ストレージと運用の手間を削減しながら履歴データを扱えます。詳細については ドキュメント をご確認ください。 AWS Client VPN announces support for concurrent VPN connections AWS Client VPNが複数VPNへの同時接続をサポートしました。これまでは一度に1つのVPNプロファイルにしか接続できなかっため、別のネットワークに接続したい場合、その都度切断と別プロファイルでの再接続が必要でした。今回のアップデートのより切り替えなしで複数のVPNプロファイルへの接続が可能になります。この機能はAWSが提供するClient VPN クライアント version 5.0以降で利用できます。ダウンロード手順は こちら をご確認ください。 1/23(木) Luma AI’s Ray2 visual AI model now available in Amazon Bedrock Amazon BedrockでLuma AIの新しいビデオ生成人工知能基盤モデル(FM)であるRay2を利用可能になりました。Luma Ray2は、滑らかで自然な動きでリアルなビジュアルを作成できる大規模なビデオ生成モデルで、自然言語プロンプトをもとに540pおよび720pの解像度で5秒および9秒のビデオ生成をサポートしています。例えばコンセプトを視覚化、ビデオモックアップの作成などの場面で活用いただけます。Ray2はオレゴンリージョンで利用可能で、Luma AIのフルマネージドモデルの提供は現時点でAWSが最初で唯一です、ぜひお試しください!また、詳細は ブログ や ドキュメント をご確認ください。 Amazon CloudWatch allows alarming on data up to 7 days old Amazon CloudWatchのメトリクスデータ評価期間が24時間から7日間に延長されました。これにより複数日のデータを評価してアラームを出すなど、実行時間の長いプロセス、実行頻度の低いプロセスの監視がよりしやすくなります。この機能はGovCloud(米国)リージョンを含む全てのAWSリージョンで利用可能です。詳細については ドキュメント をご確認ください。 Amazon Bedrock Flows announces preview of multi-turn conversation support Amazon Bedrock Flowsは基盤モデル(FM)、プロンプト、Amazon Bedrock Agents、Amazon Bedrock knowledge base、Amazon Bedrock Guardrails、その他の AWS サービスを繋げAIワークフローを構築することができるサービスです。今回、Amazon Bedrock Flowsのマルチターン会話サポートがプレビュー発表されました。この機能ではエージェントがアクションを正常に完了するために必要な前提情報が揃っていない時に、エージェントノードはフローの実行を一時停止し、ユーザー固有の情報を要求します。ユーザーの応答に基づいてフローの動作を適応させることができるため、よりインタラクティブでコンテキストに応じた体験が可能になります。この機能はAmazon Bedrock Flowsが利用できる全てのリージョンで利用可能です。詳細は ブログ と ドキュメント をご確認ください。 1/24(金) Amazon EC2 I7ie instances now available in AWS Europe (Frankfurt, London), and Asia Pacific (Tokyo) regions Amazon EC2 i7Ie インスタンスが新たに東京、フランクフルト、ロンドンの3つのリージョンで利用可能になりました。I7ie は高密度ストレージ最適化インスタンスで、大規模なデータセットにアクセスする際に、非常に低いレイテンシーで、高いランダム読み取り/書き込み性能が必要なワークロードに最適です。最大 120 TB のローカル NVMe ストレージを提供し、前世代のI3en インスタンスと比較して最大 2 倍の vCPU とメモリを提供します。詳細については 製品ページ をご確認ください。 Amazon Aurora PostgreSQL Limitless Database now supports PostgreSQL 16.6 Amazon Aurora PostgreSQL Limitless DatabaseがPostgreSQL version 16.6をサポートしました。Aurora PostgreSQL Limitless Databaseはリレーショナルデータベースをワークロード増減に合わせて簡単にスケーリングできるサービスで、現在東京を含む10のリージョンで利用可能です。今回のアップデートにはPostgreSQL コミュニティによる製品改善、バグ修正のほかbtree_ginのサポートやAurora Limitless 固有の改善が含まれています。詳細については ドキュメント をご確認ください。 Amazon Bedrock now offers multimodal support for Cohere Embed 3 Multilingual and Embed 3 English Amazon BedrockでCohere Embed 3 MultilingualとCohere Embed 3 Englishのマルチモーダルサポートが提供されました。Cohereによると、Embed 3はテキストと画像の両方の検索機能をサポートし、100以上の言語(Embed 3 Multial言語)に対応しているため、グローバルアプリケーションに最適です。さまざまなデータセットを処理して解釈できるので、複雑なレポート、製品カタログ、設計ファイルなど様々なユースケースで効率向上に繋がります。マルチモーダルサポートのCohere Embed 3は 東京を含む12のリージョン で利用可能です。 それでは、また来週! ソリューションアーキテクト 根本 裕規 著者について 根本 裕規(Yuki Nemoto) AWS Japan のソリューションアーキテクトとして、金融機関のお客様の AWS 活用や個別案件の技術支援を担当しています。過去には公共部門やモダナイゼーションのスペシャリストもしていました。好きなサービスは AWS CodeBuild です。週末はオフロードバイクのレースをしています!
本ブログは 株式会社グレイプ様と Amazon Web Services Japan 合同会社が共同で執筆いたしました。 みなさん、こんにちは。AWS ソリューションアーキテクトの田中です。 2024 年は、非常に多くのお客様に、生成 AI の活用にチャレンジいただいた一年でした。生成 AI を活用した文書要約やチャットボットなど、社内の業務効率化に繋がる多くのユースケースが生まれました。さらに喜ばしいことに、生成 AI 活用をコアビジネスの価値向上や成長加速に繋がる事例も増えてきています。 今回ご紹介するのは、生成 AI の活用をコアビジネスの成長加速に繋げた、チャレンジングな取り組みです。月間 1.8億 PV を誇るウェブメディア「 grape(グレイプ) 」を運営する 株式会社グレイプ様 が、AWS の生成 AI サービスである Amazon Bedrock を活用して、メディアビジネスの根幹である高品質なコンテンツ制作を加速させた事例をご紹介します。 グレイプ様の状況と経緯 「 grape(グレイプ) 」は、「心に響く」をコンセプトに、読者の共感を呼ぶコンテンツを提供し続けているウェブメディアです。近年、ユーザーの情報収集手段はますますオンラインへとシフトし、従来型のマス広告だけでなく、個々のユーザーの興味や関心に寄り添ったコンテンツマーケティングの重要性が高まっています。グレイプ様は、長年培ってきたウェブメディア運営のノウハウを活かしながら、より多くの価値ある情報をユーザーに届けるためにチャレンジをし続けています。 グレイプ様が日々公開するコンテンツは、数十件にも及びます。その一つ一つに、読者の心に響く質の高さが求められます。プロのライターたちは、生成 AI には真似できないクリエイティビティを発揮されつつ、魅力的なコンテンツを多く生み出していますが、一方では課題を抱えていました。 一つは記事の校正に関する課題です。記事の品質を担保するため、各記事は二名体制での校正を行っています。校正作業は、誤字脱字のチェック、語彙のゆらぎのチェック、表現のチェックなどに加えて、HTML タグの確認など技術的な要素も含まれるケースがありました。そのため、経験が豊富なライターに頼らざるを得ない校正がいくつかあり、そのための作業に時間が費やされていました。 二つ目はタグ付けに関する課題です。記事の適切な分類と発信のためにタグは不可欠ですが、このタグはライターの経験と勘をもとに付与されていました。似たような記事でも人によってつけるタグが違ったり、経験が浅いライターにとっては効果的なタグがどれかわからないなど、適切なタグ付けが難しい状況にありました。 ソリューション/構成内容 これらの二つ課題に対して、グレイプ様は、ライターの方々に記事のライティング業務に集中してもらうため、校正作業に生成 AI の力を活用できないか、という発想からプロジェクトがスタートしました。検討の結果、Amazon Bedrock を活用したアプリケーションの構築を決定しました。コンテンツ制作はビジネスの核となる部分であるため、入力したデータが基盤モデルの学習に使用されない点が、重要な選定理由となりました。 様々な基盤モデルを比較検討した結果、 Anthropic Claude 3.5 Sonnet (v1) を採用することにしました。この基盤モデルを選んだ理由として、1) 日本語の校正に特に高い精度を示したこと、2) 簡単な文書作成においてライターから見ても自然な日本語表現ができており今後さらなる活用につながる見込みがあること、3) 応答時間とコストが現実的な範囲に収まったこと、の三点が挙げられます。 開発したアプリケーションのもつ主要機能は、以下の二つです。 1.校正支援機能 記事作成の加速を目指し、生成 AI を活用した校正支援の仕組みを構築しました。まず、ライターが作成したドラフト文書に対して、基盤モデルが誤字脱字のチェックを実施します。さらに、グレイプ様では独自の表記ルールを持っているため、このルールに沿っていない表現を見つけた場合、基盤モデルが適切な表現への置き換えを提案します。加えて、記事のドラフトに含まれる HTML タグについても、基盤モデルがチェックを行い、不適切な記述があれば正しい表記への修正を行います。 2.タグ推薦機能 基盤モデルに記事の内容をインプットとして与えると、アウトプットとして適切なタグを提案してくれる機能を実装しました。基盤モデルに対しては、記事の内容とともに、JSON 形式のタグ使用実績データも一緒に与えるようにアプリケーション内で実装しました。これによって、基盤モデルがよく利用されているタグから適切なタグを提案することができるようになり、タグに一貫性をもたせることを可能にしました。また、実際に付与するタグはライターが付与するので、その選別の手助けとなるよう、選別したタグの推薦理由も提案するようにしました。 (実際のアプリケーション画面) これらの機能開発は、記事校正ツールの開発 2 週間、タグ推薦ツールの開発はわずか 3 日間、という速さで行われました。主に開発を担当された柳本様は、それまで AWS のご経験はありませんでしたが、インフラ運用のご経験を活かし、まずはイメージがつきやすい Amazon Elastic Compute Cloud(Amazon EC2) をご自身で構築され、その上でアプリケーションの開発を進めました。 また、柳本様は生成 AI の活用も初めてのご経験でしたが、積極的にプロンプトエンジニアリングにも挑戦されました。開発中に期待する精度が得られないケースも発生しましたが、それらの問題解決にも時に生成 AI を活用しながら、一つ一つ解決していきました。 さらに、システムのテスト公開後は、ユーザーからのフィードバックを即座に取り込める体制を整えました。具体的には、実際に使用して期待する結果が得られなかった場合に、ユーザーがすぐに報告できるインターフェースを用意しました。この仕組みにより、ユーザーのフィードバックを元に追加開発を行う PDCA サイクルを素早く回すことができ、結果としてユーザーの積極的な利用に繋がりました。 導入効果 Amazon Bedrock を利用したアプリケーションの導入により、以下の効果が得られました。 記事の校正に関わる作業工数が 60 %削減 記事のタグ選定に関わる作業工数が 20 %削減 数字では表せない定性的な効果もあがっています。例えば、校正作業の品質が均一化され、一定水準以上の質が保たれるようになりました。また、タグ付けにおいても、より適切で一貫性のある記事分類が可能になりました。 導入を担当された柳本様からは「AWS・AI 初学者でも生成 AI を使ってコードを作成し、実務対応レベルのツールが作れました。自分になんてと思わず生成 AI を活用して社内の課題にまずは挑戦するという気持ちが大切です。」とコメントをいただいています。 まとめ 本事例は、文章コンテンツをコアビジネスとする企業が、生成 AI を活用してビジネスの加速に繋げることができた好例です。人しか出せない価値について理解を深めていたからこそ、効果的な生成 AI の活用ができたのではないかと思います。また、短時間での構築を実現した点も注目です。AWS では、サーバーレスな API 形式で提供される生成 AI に加え、仮想サーバーやコンテナ、サーバーレスといったコンピューティングサービスなど、お客様のスキルセットやビジネス要件に合うサービスを選択して組み合わせることができます。これらをうまく活用することで、迅速なサービスリリースにつなげることができます。 グレイプ様では、さらなる進化を目指しています。具体的には、プロンプトの継続的な改善や、RAG(Retrieval Augmented Generation)の活用を通じて、コンテンツの品質向上に取り組んでいく予定です。 生成 AI を活用したビジネスの促進、業務の効率化、AWS が提供する様々なサービスの選択肢にご興味をお持ちの方は、お気軽にお問い合わせください。 株式会社グレイプ : 技術開発部長 大槻 大作 様(中央右)、技術開発部 主任 柳澤 良介 様(中央左)、技術開発部 柳本 安利 様(中央) Amazon Web Services Japan : アカウントマネージャー 石井 美佑子(右端)、ソリューションアーキテクト 田中 里絵(左端) ソリューションアーキテクト 田中 里絵
本記事は 2024年11月25日に公開された「 Simplify global hybrid connectivity with AWS Cloud WAN and AWS Direct Connect integration 」 を翻訳したものです。 この投稿では、 AWS Cloud WAN の AWS Direct Connect アタッチメントを使用したハイブリッド接続アーキテクチャを構築する方法について解説します。また、オンプレミス環境とAWSクラウド間のシームレスな接続を実現するための、グローバルハイブリッドネットワークの設計におけるベストプラクティスや考慮事項についてご紹介します。 2024年11月25日より、AWS Cloud WAN は AWS Direct Connect ゲートウェイアタッチメントをネイティブでサポート しています。この統合により、中継点に AWS Transit Gateway を使用しなくても、グローバルなハイブリッドネットワークをより柔軟に設定できるようになります。AWS Direct Connect ゲートウェイが AWS Cloud WAN セグメントとオンプレミス環境間の経路を直接広報できるようにすることで、ルーティング管理を簡素化できます。 AWS Direct Connect ゲートウェイ を コアネットワーク に接続して、特定の AWS リージョン や Cloud WAN セグメントに応じたルーティング動作を実現できます。 この記事の最初のセクションでは、この新機能の仕組みについて解説するとともに、AWS Cloud WAN のグローバルネットワークに AWS Direct Connect を統合する際の代表的な3つの新規導入シナリオを紹介します。その後、現在 AWS Transit Gateway を介して AWS Cloud WAN と AWS Direct Connect を利用しているお客様向けに、推奨される移行方法を解説します。 前提条件 Amazon Virtual Private Cloud(Amazon VPC) 、AWS Direct Connect、AWS Transit Gateway、AWS Cloud WANといった AWS のネットワーク構成要素に精通していることを前提としています。これらのサービスの詳細な説明は行わず、それぞれの機能や取り上げるルーティングシナリオでの活用方法について説明します。この記事で紹介する移行のベストプラクティスに関する背景情報として、Transit Gateway を含むハイブリッドルーティングアーキテクチャを取り上げた以前の記事「 Advanced hybrid routing scenarios with AWS Cloud WAN and AWS Direct Connect 」をご覧になることをお勧めします。なお、本記事では AWS Cloud WAN のセグメンテーション戦略やコアネットワークセグメントの作成や管理方法については詳しく扱いません。これらについては、AWS Cloud WAN の ドキュメント をご参照ください。 基本構成 簡素化のために、AWS クラウドリソースを 3つの AWS リージョン (ap-southeast-2、us-west-2、us-east-1)にまたがって展開する基本構成(図1)を使用します。コアネットワークの各 AWS リージョンで、AWS Cloud WAN はコアネットワークエッジ (CNE) をデプロイ及び管理します。ワークロード用に Production, Development, Hybrid の3つのセグメントを設定しました。本記事で紹介する構成は、セグメント数、アタッチメントタイプ、および AWS リージョン数が異なる環境にも適用可能です。テスト環境として図示されたような AWS Cloud WAN コアネットワークを作成したと仮定しています。 ドキュメント には、図1のアーキテクチャに類似したセグメントを持つコアネットワークのポリシー例が記載されています。           図 1: 3つの AWS リージョンにわたる AWS Cloud WAN コアネットワークを示す基本構成 AWS Cloud WAN の Direct Connect アタッチメントを設定する方法について、3つのシナリオを解説します。簡素化させるために、各シナリオでは Cloud WAN コアネットワーク上で個別のセグメントを使用します。 最初の 2 つのシナリオでは、2 つの異なる AWS Direct Connect ゲートウェイを Development セグメントとProductionセグメントにそれぞれ接続し、AWS 環境とオンプレミス環境間のエンドツーエンドのセグメンテーションを実現します。 3 番目のシナリオでは、Hybrid セグメントを使用し、2 つの新しい Direct Connect ゲートウェイを使用してグローバルルーティングセグメンテーションを設定します。この例では、ハイブリッドセグメントはオンプレミスからのパートナー接続専用であり、Production および Development セグメントとは直接通信しません。 仕組み 1 つ以上の Direct Connect ゲートウェイを、コアネットワークリージョンの全てまたは一部に AWS Cloud WAN コアネットワークにアタッチできます。Direct Connect ゲートウェイをコアネットワークの一部のリージョンにのみ関連付けた場合、そのゲートウェイは関連付けられたリージョン内のローカル経路のみを受け取ります。 この統合 により、オンプレミスのルーターは、コアネットワークが Direct Connect ゲートウェイを通じて広報した経路の完全な BGP AS_PATH 属性を受け取れるようになります。これにより、グローバルネットワーク全体のルーティングの可視性が向上し、オンプレミス環境できめ細かいルーティング制御が可能になります。 Cloud WAN と Direct Connect の統合設定を、ステップごとに確認していきましょう。まず基本構成から始め、新しいDirect Connect ゲートウェイを作成し、それを Cloud WAN の3つのリージョンすべてにまたがる Development セグメントに接続します。 ステップ 1: Direct Connect コンソール に移動し、「 Direct Connect ゲートウェイ 」を選択して、「 Direct Connect ゲートウェイを作成する 」をクリックします。図 2 に示すように、Direct Connect ゲートウェイの 名前 と 自律システム番号 (ASN) を設定します。Direct Connect ゲートウェイ ASN は一意でなければならず、コアネットワークの ASN 範囲またはオンプレミス環境と重複してはなりません。「 Direct Connect ゲートウェイを作成する 」をクリックします。 図 2: Direct Connect Gateway の作成 ステップ 2: AWS Network Manager コンソール に移動し、 グローバルネットワーク を選択します。 コアネットワーク に移動し「 アタッチメント 」 を選択します。「 アタッチメントの作成 」をクリックします。アタッチメントには、以下を設定します。 (オプション) 名前 : アタッチメントの名前を入力します。 アタッチメントタイプ : Direct Connect エッジロケーション : コアネットワークの AWS リージョンの全てまたは一部をアタッチ対象として選択します。この例では、コアネットワークが設定されているすべての AWS リージョンを選択します。後述の「知っておくべきこと」のセクションで、AWS リージョンを選択するためのベストプラクティスを紹介します。 Direct Connect ゲートウェイ : ステップ 1 で作成した Direct Connect ゲートウェイを選択します。 タグ : Cloud WAN アタッチメントポリシーに合わせて適切な Key と Value のペアを設定します。 図 3: Cloud WAN Development セグメントへの Direct Connect Gateway アタッチメントの設定 Cloud WAN ポリシーでセグメントに対して「 require-attachment-acceptance: true 」が指定されている場合は、アタッチメントを承認し、正しいセグメントへの関連付けを確認してください。アタッチメントの状態が「 Available 」になると、各 AWS リージョンのセグメントルートテーブルで Direct Connect ゲートウェイから受信した経路を確認できます。オンプレミスルーターでは、選択した特定の AWS リージョンのローカル経路を Cloud WAN セグメントから自動的に受信します。 本投稿では、Direct Connect 仮想インターフェイスの設定手順は説明しません。詳細については、AWS Direct Connect の ドキュメント を参照してください。 シナリオ1: 単一のオンプレミス拠点が AWS Cloud WAN グローバルネットワークの Development セグメントに接続される場合 図4は、前述の「仕組み」のセクションで説明した設定手順を実施した後のアーキテクチャを示しています。Direct Connect ゲートウェイを Development セグメントに接続し、3つの CNE すべてに関連付けました。このサンプルアーキテクチャでは、2つの Direct Connect トランジット仮想インターフェース(VIF)を使用しており、それぞれ2本の物理的な Direct Connect 接続に分散されています。1本目の物理接続にはプライマリトランジット VIF(VIF-1)を、2本目にはセカンダリトランジット VIF(VIF-2)を設定しました。また、 Direct Connect BGP コミュニティタグ を設定し、アクティブ/パッシブ構成を実現しています。 簡略化のため、この例では AWS Direct Connect に対して高い冗長性を持つアーキテクチャは使用していません。 AWS Direct Connect でのアクティブ/パッシブ BGP 接続の構築  や、 AWS Direct Connect の回復性に関する推奨事項 について詳細を確認することをお勧めします。 図 4: シナリオ 1 – 2 つの AWS Direct Connect 接続と 2 つのトランジット仮想インターフェイスを備えた単一のオンプレミスロケーション 1.オンプレミスから AWS への経路広報 図 5 は、オンプレミスから AWS に広報された BGP 経路を示しています。 図 5: シナリオ 1 – オンプレミスから AWS への経路広報 (A), (B) – オンプレミスのルーターは、両方のトランジット VIF を通じて Direct Connect ゲートウェイに IPv4 および IPv6 のプレフィックスを広報します。BGP コミュニティタグを使用して、Direct Connect ゲートウェイの BGP ローカルプリファレンスを調整し、2つの VIF 間でアクティブ/パッシブルーティングを実現しています。 (C) – Direct Connect ゲートウェイは、すべての経路に自身の ASN を AS_PATH に追加し、関連付けられた CNE にすべてのプレフィックスを広報します。Direct Connect ゲートウェイは BGP コミュニティをそのまま保持しますが、これらの BGP コミュニティは AWS Cloud WAN の動作には影響しません。各 CNE は、Development セグメント用に最適な経路をルートテーブルに登録し、ネクストホップとしてDirect Connect ゲートウェイ Development を設定します。 (D) – 各 CNE は、Direct Connect ゲートウェイから受信した IPv4 および IPv6 経路に自身の ASN を AS_PATH として追加し、それらをリモートリージョンの他のすべての CNE に広報します。ただし、 CNE は他の CNE から受信したオンプレミス経路を優先しません。これは、Direct Connect ゲートウェイから直接受信した経路と比較して、他の CNE から受信した経路は AS_PATH 属性が長くなるためです。 2. AWS からオンプレミスへの経路広報 図6は、Cloud WAN から Direct Connect ゲートウェイを通じてオンプレミスに伝播される経路を示しています。AWS Cloud WAN に組み込まれた Direct Connect アタッチメントにより、 許可されたプレフィックスリスト の設定を必要とせず、経路が双方向で動的に伝播されます。 図 6: シナリオ 1 — AWS からオンプレミスへの経路伝播 (A) – すべての VPC プレフィックス(IPv4 および IPv6)は、アタッチメントポリシーの設定に基づいて、対応するセグメント内の CNE に自動的に伝播されます。また、コアネットワークには、 Connect や AWS Site-to-Site VPN といった他のアタッチメントタイプを使用することもできます。 (B) – CNE はセグメント内のすべてのローカル経路を互いに、そして関連付けられた Direct Connect ゲートウェイに広報します。 (C) – Direct Connect ゲートウェイは、自身の ASN を AS_PATH に追加し、すべてのプレフィックスを関連付けられたすべてのトランジット VIF に広報します。オンプレミスのルーターでは、2つのトランジット VIF(VIF-1 および VIF-2)間でアクティブ/パッシブルーティング動作を実現するために、BGP 属性を設定する必要があります。 3.トラフィックフロー VPC とオンプレミス間のトラフィックフローを図 7 に示します。 図 7: シナリオ 1 — AWS とオンプレミス間のトラフィックフロー AWS からオンプレミスへのトラフィックフロー : VPC はトラフィックをローカルリージョン内の CNE に転送します。CNE はトラフィックをローカルの Direct Connect ゲートウェイアタッチメントに送ります。ただし、Direct Connect ゲートウェイがすべてのリージョンに関連付けられていない場合、CNE はランダムにリモートの CNE を選択してトラフィックを転送します。そのため、最適なルーティングを確保するために、アタッチされたセグメントが存在するすべての Cloud WAN リージョンに Direct Connect ゲートウェイを関連付けることを推奨します。Direct Connect ゲートウェイはトラフィックをプライマリトランジット VIF-1 に転送します。 オンプレミスから AWS へのトラフィックフロー : オンプレミスから AWS へのトラフィックは、同じ経路を通って対称的に転送されます。 シナリオ2: 複数のオンプレミス拠点がユニークなプレフィックスを AWS Cloud WAN コアネットワークの Production セグメントに広報する場合 このシナリオでは、複数のオンプレミス拠点が Cloud WAN コアネットワークの Production セグメントに接続されており、それぞれが AWS に対してユニークな IP プレフィックスを広報していることを前提としています。各拠点は独自の IPv4 および IPv6 プレフィックスでアドレス指定されているため、すべてのトランジット VIF と Cloud WAN コアネットワークエッジに対して単一の Direct Connect ゲートウェイが必要です。Direct Connect ゲートウェイは、関連するリージョンからのトラフィック転送において、ユニークな IPv4 および IPv6 プレフィックスの広報を基に適切なオンプレミス拠点を判断します。簡潔さを考慮し、このシナリオでは Direct Connect に高可用性のアーキテクチャを使用せず、Direct Connect の冗長性に関する推奨事項の確認を推奨します。 このアーキテクチャは図8に示されています。この構成は、2つ以上のグローバルに分散したオンプレミス拠点に拡張することが可能です。 図8: シナリオ2 – 各オンプレミス拠点がユニークな IPv4 および IPv6 プレフィックスをコアネットワークの Production セグメントに広報 1.オンプレミスから AWS への経路広報 図9は、オンプレミスの拠点から Production セグメントに広報される IPv4 および IPv6 プレフィックスを示しています。Direct Connect ゲートウェイ Production に Direct Connect アタッチメントを設定し、すべての CNE をこれに関連付けました。これにより、コアネットワーク内のすべての Cloud WAN CNE が、Direct Connect ゲートウェイを介してオンプレミス拠点から広報された BGP 経路を直接学習できるようになります。 図9: シナリオ2 – オンプレミスから AWS への BGP 経路広報 オンプレミスからの経路広報には BGP コミュニティを使用し、各プレフィックスに対する Direct Connect ゲートウェイのプライマリおよびバックアップパスを制御しています。経路は Direct Connect ゲートウェイから AWS Cloud WAN に伝播され、シナリオ1で説明したのと同じ経路伝播メカニズムが適用されます。 2. AWSからオンプレミスへの経路広報 AWS からオンプレミスへの経路広報は、前述のシナリオ1と同様に行われます。すべてのオンプレミス拠点は、コアネットワーク内のすべてのリージョンで Direct Connect ゲートウェイに関連付けられたセグメントから、AWS Cloud WAN のプレフィックスを学習します。 3.トラフィックフロー 図10は、VPC と特定のオンプレミス拠点間のトラフィックフローを示しています。 図 10: シナリオ 2 — AWS とオンプレミス間のトラフィックフロー AWS からオンプレミスへのトラフィックフロー : シナリオ1と同様に、図10では VPC からローカルリージョン内の CNE へトラフィックが流れ、次にローカル Direct Connect アタッチメントを介して Direct Connect ゲートウェイに送信される流れを示しています。Direct Connect ゲートウェイは、特定の広報された経路と BGP コミュニティに基づいて最終的なルーティング決定を行います。この場合、パケットの宛先 IP アドレスに基づき、プライマリトランジット VIF(VIF-1 または VIF-3)を通じて適切なオンプレミス拠点にトラフィックを送信します。 オンプレミスから AWS へのトラフィックフロー : トラフィックは同じパス (VIF-1 または VIF-3 > Direct Connect ゲートウェイ Production > CNE > VPC) をたどって対称的に転送されます。 シナリオ3: 同一プレフィックスを AWS Cloud WAN コアネットワークのハイブリッドセグメントに広報する複数のオンプレミス拠点 前述のシナリオ 2 で示したように、各オンプレミス拠点から特定のプレフィックスを広報することをお勧めします。しかし、複数のオンプレミス拠点から同じ集約プレフィックスを AWS に広報する必要がある場合、複数の Direct Connect ゲートウェイを使用して Cloud WAN のルーティングを制御できます。これにより、Direct Connect ゲートウェイが集約プレフィックスの送信先としてどのオンプレミス拠点を選択するかを制御できます。 このシナリオでは、2つの Direct Connect ゲートウェイを使用して、トラフィックが AWS からオンプレミスの宛先に向かう際、地理的に最も近い AWS Direct Connect のポイントオブプレゼンス(POP)を経由するようにルーティングを行います。2つの Direct Connect ゲートウェイを Hybrid セグメントに接続し、それぞれを特定のルーティング動作を必要とする CNE に関連付けます。図11は、このシナリオのアーキテクチャを示しています。 図11: シナリオ3 – 複数の Direct Connect ゲートウェイをCloud WAN のハイブリッドセグメントに接続し、それぞれを特定の CNE に関連付け 1. オンプレミスから AWS への経路広報 図12は、2つの Direct Connect ゲートウェイを通じてオンプレミスから AWS への経路広報を示しています。両方の Direct Connect ゲートウェイは、オンプレミスから同じ集約プレフィックスを学習し、それを関連付けられた CNE に広報します。各 CNE は関連付けられた Direct Connect ゲートウェイから学習した経路と、コアネットワーク内の他の CNE から AS_PATH がより長い経路を受信します。 図12: シナリオ3 – オンプレミスから AWS への経路広報 2. AWS からオンプレミスへの経路広報 コアネットワークセグメントに接続された Direct Connect ゲートウェイは、関連する CNE が各セグメントのローカルアタッチメントから学習した経路のみをオンプレミスに広報します。このシナリオでは: Direct Connect ゲートウェイ1は、ap-southeast-2 および us-west-2 のコアネットワークリージョン内でコアネットワークの Hybrid セグメントに接続された VPC からの IPv4 および IPv6 プレフィックスのみを、関連付けられたトランジット VIF に広報します。 Direct Connect ゲートウェイ2は、us-east-1 のコアネットワークリージョン内でコアネットワークの Hybrid セグメントに接続された VPC からの IPv4 および IPv6 プレフィックスのみを、関連付けられたトランジット VIF に広報します。 3.トラフィックフロー AWS からオンプレミスへのトラフィックフロー :このシナリオでは、US 西部のオンプレミス拠点に地理的に近い CNE を Direct Connect ゲートウェイ1に関連付け、US 東部のオンプレミス拠点に近い CNE を Direct Connect ゲートウェイ2に設定しました。これにより、集約プレフィックスに対してどのオンプレミス拠点を使用するかを制御できます。CNE は、直接関連付けられた Direct Connect ゲートウェイを経由する最短の AS_PATH を持つ経路を選択します。そのため、CNE はトラフィックを関連付けられた Direct Connect ゲートウェイに転送します。Direct Connect ゲートウェイは、設定された BGP コミュニティタグに基づいて適切なトランジット VIF にトラフィックを送信します。トラフィックがいずれかのオンプレミス拠点に到達すると、オンプレミスネットワーク上で拠点間のルーティングが可能です。 オンプレミスから AWS へのトラフィックフロー :オンプレミス側のルーターでは、それぞれの Direct Connect ゲートウェイに関連付けられたリージョン内のコアネットワークセグメントからの経路を受信します。トランジット VIF 1と2上で、ap-southeast-2 および us-west-2 にローカルな Hybrid セグメントからの経路を受信します。一方、トランジット VIF 3と4上で、us-east-1 にローカルな Hybrid セグメントからの経路を受信します。オンプレミス側のルーターで BGP のベストパス選択アルゴリズムを調整することで、AWS へのトラフィックがプライマリトランジット VIF(1および3)を経由するような対称的なルーティングを実現できます。 移行のベストプラクティス この記事の後半では、AWS Cloud WAN と AWS Direct Connect を Transit Gateway 経由で利用しているアーキテクチャから移行する際に、ダウンタイムを最小限に抑えるための移行戦略を説明します。もし AWS Cloud WAN への移行を検討しているが、現在の AWS リソース(例: VPC)がまだ Transit Gateway に接続されている場合は、「 AWS Cloud WAN and AWS Transit Gateway migration and interoperability patterns 」に関するガイドラインに従うことをお勧めします。このガイドラインは、Transit Gateway を利用した Direct Connect によるハイブリッド接続を維持しつつ、AWS リソースを Transit Gateway から AWS Cloud WAN へ移行するのに役立ちます。その後、以下の手順に従って、Direct Connect を Transit Gateway から AWS Cloud WAN へ移行し、不要になった Transit Gateway を廃止することができます。 以下の移行におけるベストプラクティスを検討することをお勧めします。 Cloud WAN に接続するための新しい Direct Connect ゲートウェイを作成します。 Direct Connect ゲートウェイは無料で利用できます。新しいものを作成することでダウンタイムを最小限に抑え、移行やロールバックの手順を簡素化できます。 新しいトランジット VIF を作成し、新しい Direct Connect ゲートウェイに関連付けます。 これにより、トラフィックに影響を与えずに、既存の経路と新しい経路の広報を制御できます。この段階では、新しい BGP ピアがアクティブであることを確認しますが、まだオンプレミスからの経路を広報しないでください。 新しい Direct Connect ゲートウェイを、それぞれの AWS リージョンの AWS Cloud WAN の各セグメントにアタッチします。 このステップで、オンプレミスルーターは新しい Direct Connect ゲートウェイからコアネットワーク経路を自動的に受信します。これらの新しい経路の AS_PATH (AS_PATH = Direct Connect ゲートウェイ ASN、CNE ASN) は、古い Direct Connect ゲートウェイを経由する既存の経路 (AS_PATH = Direct Connect ゲートウェイ ASN) よりも長くなっています。この新しい Cloud WAN 統合では、Direct Connect ゲートウェイは自身の ASN で上書きする代わりに、AS_PATH 内のすべての ASN を保持します。このステップでは、オンプレミスルーターが AS_PATH の短い既存のトランジット VIF 経由で受信した経路を優先するため、ルーティングパスの変更は発生しません。 オンプレミスルーターが古い VIF と新しい VIF の両方から同じ経路を受信していることを確認します。 これにより、新しい経路設定が正しく構成されていることを確認できます。 新しい VIF 上でオンプレミスからテスト用の経路または一連の経路を広報します。 それらの経路が Cloud WAN で受信されていることを確認します。 新しい VIF 上で、古い VIF と同じオンプレミスのプレフィックスを広報します。同時に、オンプレミスルーターが新しい VIF 経由でトラフィックを優先的にルーティングするように設定します。これは、オンプレミスルーターで BGP ベストパス選択アルゴリズム(例: Local Preference の使用)を制御することで実現できます。 これにより、新しい Direct Connect ゲートウェイおよびトランジット VIF を介して、AWS Cloud WAN とオンプレミス環境間でトラフィックが対称的に流れるようになります。このステップで環境内でルーティングパスの変更が発生します。 これらの手順はすべて、計画されたメンテナンスウィンドウ中に実施することをお勧めします。ただし、既存のトラフィックフローに影響を与えるコアネットワーク内のルーティング変更が発生するのは、最後のステップのみです。ロールバックする場合は、新しい仮想インターフェイス上のオンプレミスから広報している経路を停止し、BGP のベストパス選択アルゴリズムを元に戻して古い VIF を優先するように設定します。これにより、Cloud WAN は Transit Gateway から受信したオンプレミス経路を再び優先するようになります。 知っておくべきこと Direct Connect ゲートウェイは1つの AWS Cloud WAN セグメントにしか関連付けることができません。ただし、同じセグメントに複数の Direct Connect ゲートウェイを関連付けることは可能です。また、異なる Cloud WAN セグメントに複数の Direct Connect ゲートウェイを関連付けることもできます。ただし、同じ Direct Connect ゲートウェイを複数のセグメントに関連付けることはできません。 Direct Connect アタッチメントを使用して Direct Connect ゲートウェイを AWS Cloud WAN セグメントに関連付ける際、Cloud WAN CNE 全体またはその一部を選択できます。シナリオ3で示されているような特定のルーティング要件がない限り、該当セグメントが設定されているすべての CNE にアタッチメントを関連付けることを推奨します。Direct Connect ゲートウェイアタッチメントを CNE の一部にのみ関連付けた場合、Direct Connect ゲートウェイは関連付けられた CNE のローカルアタッチメントからのみ経路を受信します。 Direct Connect BGP コミュニティタグ は Direct Connect ゲートウェイにのみ関連し、Cloud WAN コアネットワークのルーティング決定には影響しません。 Cloud WAN の経路評価アルゴリズムの詳細は こちら です。MED は AS 間を超えて伝播されないローカルな BGP 属性であるため、Direct Connect ゲートウェイは Cloud WAN に広報されるすべての経路で MED をリセットします。 AWS Cloud WAN の新しい Direct Connect アタッチメントでは、許可されたプレフィックスリストを使用する必要なく、経路を双方向に動的に伝播させることができます。ただし、Transit Gateway を Direct Connect ゲートウェイに関連付ける場合には、引き続き許可されたプレフィックスリストの使用が必要です。Direct Connect ゲートウェイを分離されたセグメントにアタッチした場合、VPC の経路はオンプレミスルーターに伝播されず、オンプレミス経路もコアネットワークセグメントには伝播されません。 ドキュメント に記載されている手順に従うことで、複数のアカウントから Direct Connect ゲートウェイを AWS Cloud WAN コアネットワークにアタッチすることができます。 コアネットワークセグメントから Direct Connect ゲートウェイアタッチメントに広報できる経路数、およびオンプレミス環境から Direct Connect 仮想インターフェイス上で広報できる経路数のクォータについては、 AWS Cloud WAN のドキュメント および AWS Direct Connect のドキュメント に詳しく記載されています。 まとめ この投稿では、 AWS Cloud WAN と AWS Direct Connect の統合機能 を活用して、ハイブリッド接続アーキテクチャを構築する方法について解説しました。AWS 上でグローバルなハイブリッドネットワークを設計し、オンプレミス環境と AWS クラウド間のシームレスな接続を可能にするためのベストプラクティスを解説しました。この統合により、中継点に AWS Transit Gateway を使用する必要がなく、グローバルなハイブリッドネットワークの構成においてより柔軟性が得られます。また、AWS Cloud WAN セグメントとオンプレミス環境間で経路を直接広報することで、ルーティング管理を簡素化できます。AWS Cloud WAN に関する詳細は、 ドキュメント をご確認ください。この投稿に関して質問がある場合は、 AWS re:Post で新しいスレッドを開始するか、 AWS サポート にお問い合わせください。 翻訳はテクニカルアカウントマネージャーの米山 京佑が担当しました。原文は こちら です。
このブログは、SAP の Senior Cyber Security Design Specialist である Amos Wendorff と共同で執筆されました。 はじめに: AWS では、お客様がクラウドサービスを安心して利用できるように、堅牢なセキュリティソリューションを提供することにコミットしています。 この記事では、SAP がお客様向けに AWS 上で実行している、安全で規制を遵守した RISE with SAP および SAP BTP (Business Technology Platform) 環境について説明し、AWS サービスを利用したセキュリティ監視およびアラート通知の自動化ソリューションの実装についても説明します。 RISE with SAP は、企業に ERP システムをトランスフォームしクラウドに移行する道筋を提供する包括的なオファリングです。SAP のインテリジェント エンタープライズ ソフトウェア、クラウド インフラストラクチャ、サービスを組み合わせることで、お客様は IT ランドスケープの簡素化、より速いイノベーション、デジタル トランスフォーメーションの推進が可能になります。RISE with SAP を採用することで、お客様は SAP S/4HANA など SAP アプリケーションのパワーを活用しながら、クラウドのスケーラビリティ、セキュリティ、コスト効率の恩恵も得られます。 背景: SAP が RISE with SAP と SAP BTP を急速に導入したことにより、SAP が使用する AWS アカウントの数が指数関数的に増加しました。SAP は現在 33 の AWS リージョンで運用しており、このブログ記事の執筆時点で 7,000 を超える AWS アカウントを管理しながら、新しいリージョンの立ち上げとともに展開地域を拡大しています。 これらの多数のアカウントを手動で監視およびセキュアに維持することは大変な課題となります。そこで SAP は、AWS の強力なセキュリティサービスを活用しながら、お客様のニーズに合わせてスケールできる、セキュアで自動化されたソリューションを必要としていました。 技術的な実装: SAP の Global Security & Cloud Compliance (SGSC) チームは、7,000 を超える AWS アカウントを対象に包括的なセキュリティを確保するため、AWS のサービスとサードパーティ製ツールを組み合わせた堅牢な「セキュアなデフォルト」フレームワークを構築しています。 このアーキテクチャの中核は、 Amazon GuardDuty です。 Amazon GuardDuty は、機械学習、異常検知、脅威インテリジェンスを活用して、AWS 環境における悪意のあるまたは不正な活動を継続的に監視し、リアルタイムの脅威検知を実現します。 すべての Amazon GuardDuty の検出結果とセキュリティログは、 Amazon S3 に集約されます。 Amazon S3 は、 AWS Organization 全体のログの中央リポジトリとして機能します。 このセットアップにより、SAP は膨大なクラウドインフラストラクチャの可視性と管理を維持できます。 大量のデータを処理するために、SAP は Splunk のような先進的な分析と可視化のための宛先へのルーティング前に、ログをフィルタリング、強化、正規化することで Cribl を使用します。これにより、セキュリティチームはデータを効率的に管理し分析して、脅威を迅速に特定し対応できます。さらに SAP は、アカウント所有者とセキュリティ対応者の連絡先情報を含むメタデータを保持する MasterData Cloud Database を維持しています。これにより、セキュリティ問題が検出された際に対象を絞った通知と対応が可能となり、明確な説明責任と迅速な対応能力を維持することが可能になります。 検出と分析に加えて、SAP は特定のセキュリティ上の問題を自動化して修正するための AWS Lambda 関数を利用しています。たとえば、GuardDuty がセキュリティポリシーに違反しているオープンポートを検知した場合、AWS Lambda 関数がトリガーされ、セキュリティグループルールの調整によってその問題を自動的に修正します。この自動化により、手動による介入の必要性を削減し、すべての AWS アカウントにおいてコンプライアンスを確実にします。RISE with SAP や SAP BTP のお客様の環境は SAP が運用しているため、この自動化アーキテクチャにより、クラウドリソースがこれらの厳格なセキュリティコントロールの下で継続的に監視・保護されるため、安心と継続的な運用が可能になります。 SAP のアプローチは、AWS ネイティブのセキュリティ機能を高度なデータ処理ツールと統合することで、AWS 上の SAP アプリケーションのニーズに特化した自動化、スケーラブル、かつセキュアなクラウド環境を実現しています。 セキュリティ制御の概要: SAP の「デフォルトで安全」な管理の対策には、AWS のネイティブなセキュリティ機能を利用して、安全なクラウド環境を確保するさまざまな対策が含まれています。その中には、すべてのアカウントを AWS の組織に組み入れてポリシーを統一的に適用すること、SAP Active Directory との統合、SAP ドメインユーザ以外のアクセスを防止すること、クラウド管理者に対する強制的な多要素認証の実施などがあります。 集中型のログ管理システムは、全アカウントを対象として、API の利用記録やストレージへのアクセス履歴を常時監視しています。これらのログデータは、セキュリティ分析基盤 (SIEM) に自動的に集約され、リアルタイムでセキュリティ監視と分析が行われる仕組みとなっています。このアプローチは、公開リソースや暗号化されていないデータなど一般的なクラウド設定のミスを防止するだけでなく、AWS の組織ガバナンス機能を活用して、特定のポートをブロックする高度なネットワーク管理や、安全な通信のための TLS 1.2 以上を強制するなどの対策を講じています。 デプロイメントリングを使ったフェーズドロールアウト: 新しい予防統制は、4 つのデプロイメントリングでロールアウトされます。 この段階的なアプローチにより、チームがポリシーをテストし、混乱を最小限に抑えることができます。 アカウントの所有者は、デプロイメントリングでのアカウントの配置を選択でき、ポリシーの施行の少なくとも 2 週間前に通知を受けることができます。 SAP は、潜在的な混乱を考慮し、特定の管理対象に対する例外または遅延を検討して、影響を最小限に抑えています。 通知と修復のプロセス: 自動化されたセキュリティ監視は、検出された管理違反の重大度に基づいて通知プロセスをトリガーします。 重大度の高い警告は、AWS Lambda を利用した SAP の自動化プロセスによって自動的に修復されます。 自動アカウントプロビジョニングとセキュリティ標準: SAP の自動アカウント プロビジョニング プロセスにより、新しい AWS アカウントはそのはじめから、予め定義されたセキュリティ標準とベストプラクティスを遵守することが保証されます。 これには、必要な IAM ロール、 AWS セキュリティツール の実装、および SGSC セキュリティポリシーへの準拠が含まれます。 このプロセスでは、高度な自動販売システムがアカウントのライフサイクルを自動的に管理します。セキュリティの第一層は、特定のアクションとリソースをブロックする Service Control Polices (SCP) によって実装されています。Amazon GuardDuty と AWS CloudTrail を使用して、検出メカニズムが導入されています。 Orca Security は、脆弱性、設定ミス、コンプライアンスリスクの自動化されたエージェントレススキャンと修復によって、SAP のクラウドセキュリティポスチャを強化します。 SAP は、SAP AWS 全組織にセキュリティを直接埋め込むことで、ライフサイクルの初期段階でリスクを特定し、軽減するプロアクティブなアプローチを採用しています。この統合により、お客様のワークロードに堅牢なセキュリティ基盤が確保され、攻撃対象領域を最小限に抑え、クラウドネイティブ環境のベストプラクティスに準拠します。 標準的なセキュリティ対策に加えて、SAP は RISE with SAP 環境のアカウントレベルのセキュリティを強化するために、AWS の複数の機能を活用しています: RISE with SAP のバックアップ用の EBS Snapshot Lock: クライアントのデータをより良く保護するため、SAP は Amazon Elastic Block Store (Amazon EBS) Snapshot Lock を採用しました。この機能は、1 日から約 100 年の範囲のロック期間を使用し、新規および既存の Amazon EBS Snapshot をロックします。これにより、保存されたデータが意図せず削除されるのを防ぎ、SAP のエンタープライズカスタマにより安心感を与えています。SAP は Amazon Data Lifecycle Manager を使用して、予め定義されたスケジュールと保持ガイドラインに基づいてスナップショットの作成、保持、削除を自動化します。そして、Amazon EBS Snapshot Lock を使って、これらのバックアップを厳格なコンプライアンス管理下に置きます。この機能のコンプライアンスモードでは、スナップショットが承認されたユーザによっても削除できないことを検証します。最大 72 時間のクーリングオフ期間を経た後は、スナップショットやロックはロック期間が切れるまで削除できず、モードも変更できません。SAP のお客様は、数週間から最大 2 年までの範囲で、スナップショットのロック期間をカスタマイズする選択肢もあります。 RISE with SAP での Bring Your Own Key (BYOK): お客様は、自身の AWS KMS customer master key (CMK) を使用して、RISE with SAP 環境のデータを暗号化することで、セキュリティを強化できます。お客様は同じリージョンで CMK を作成し、RISE with SAP AWS アカウントに権限を付与することで、EFS、データボリューム、バックアップ用の暗号化キーを利用できます。このアプローチでは、データ暗号化に対する制御を高め、キーアクセスの取り消しが可能であり、AWS KMS の 99.999 % の可用性サービスレベル SLA の恩恵を受けながら、暗号化要件を満たすことができます。 RISE with SAP 向け AWS WAF: AWS WAF (Web Application Firewall) は、RISE with SAP 環境の主要なセキュリティコンポーネントであり、Web アプリケーションと API を一般的な Web 攻撃やジオブロッキングによるリソース乱用から自動的に保護します。環境プロビジョニング時の自動デプロイと設定により、お客様の介入なく一貫した保護が確保されます。この設定により、RISE with SAP 環境の全体的なセキュリティポスチャにおいて、エンタープライズグレードの Web アプリケーションセキュリティが提供されます。 RISE with SAP 内の AWS ユーザ向け相互 TLS (mTLS) 検証: 相互 TLS (mTLS) 検証は、RISE with SAP 環境内の AWS のお客様向けの高度なセキュリティ機能です。この機能は、ネットワーク通信に対する認証とセキュリティの追加層を提供し、機密性の高いワークロードやアプリケーションに対するセキュリティ強化を図っています。mTLS の主な利点は、従来の TLS よりも強力な認証によるセキュリティ強化、許可されたクライアントのみがサービスに接続できるようクライアント検証、転送中のデータの機密性と整合性の維持による完全性の確保などです。さらに、mTLS は金融やヘルルスケアなどの業界における厳格な規制要件の遵守に役立ち、関連する基準を満たします。mTLS を導入することで、RISE with SAP のお客様は高度に安全で規制に準拠したクラウド環境の恩恵を受け、アプリケーションやワークロードの全体的なセキュリティポスチャを一層高めることができます。 RISE with SAP 向け SAP BTP Private Link Service: AWS PrivateLink に基づくサービスである SAP BTP Private Link Service は、SAP BTP と RISE with SAP 環境間の安全な プライベートネットワーク接続を確立し、トラフィックを AWS の内部ネットワークを介して送受信することで、パブリックインターネットへの公開を回避しながらも、低レイテンシーで高パフォーマンスな通信を実現します。 自動化ソリューションのメリット: 向上したセキュリティポスチャ: セキュリティ違反のリアルタイム検出と警告により、迅速な対処が可能になり、セキュリティインシデントを防ぐことができます。 スケーラビリティ: 数千の AWS アカウントにわたってセキュリティコントロールをスケーリングし、包括的な対応とセキュリティ保護を実現します。 自動化: セキュリティ監視の自動化により、手動での介入が不要になり、SAP のセキュリティ オペレーションの効率が向上します。 同様のアプローチを実装しようとしている企業にとって、重要な出発点は、クラウドネイティブのマインドセットを持ち、AWS 内蔵のセキュリティ機能を十分に活用することです。これには、AWS Organizations を使用して集中管理のためのアカウントを設定し、セキュリティガードレールとしてサービスコントロールポリシー (SCP) を適用することが含まれます。Amazon GuardDuty を利用した脅威検知、AWS CloudTrail を利用した監査ログ記録、AWS Key Management Service (KMS) を利用した安全な鍵管理など、クラウドネイティブツールを使うことで、組織はゼロトラストアーキテクチャを構築し、攻撃対象領域を大幅に削減し、全体的なセキュリティポスチャを強化することができます。暗号化基準を確保し、パスワードポリシーを施行し、すべてのアクセスポイントで多要素認証を有効にすることは実践すべき手順です。これらのセキュリティベストプラクティスの実装に関する包括的なガイダンスについては、組織は AWS Well-Architected Framework のセキュリティの柱の文書 を参照する必要があります。加えて、AWS Security Services と RISE with SAP の活用に関する具体的なガイダンスは、 AWS Security Considerations for RISE with SAP に記載されています。 結論: AWS の堅牢なセキュリティサービス、自動化機能、組織のポリシーエンジンを活用したクラウドネイティブのセキュリティ戦略を採用することで、SAP の「セキュア バイ デフォルト」ソリューションにより、AWS 上の RISE with SAP、SAP BTP、その他の SAP ソリューションを利用するお客様は、確かなセキュリティ態勢のもと、本来のビジネス目標に専念することができます。このアプローチには、ゼロトラストアーキテクチャ (ZTA) の原則が組み込まれており、ユーザーアクセスの継続的な検証、クラウドリソースの厳格な管理、そして AWS ネイティブツールによるコンプライアンスの徹底が最重要とされています。SAP は、リアルタイムの検知、アラート、自動修復を通じてリスクを最小限に抑えています。これにより、SAP のお客様は、AWS 上の包括的でスケーラブルなセキュリティフレームワークによって機密データとワークロードが確実に保護されているという安心感を持ちながら、クラウド投資の価値を最大限に引き出すことができます。 翻訳は Partner SA 松本が担当しました。原文は こちら です。
本記事は、2024 年 11 月 22 日に公開された “ Build a Travel Planner with React Native, AWS Amplify, and Amazon Bedrock Knowledge Base ” を翻訳したものです。翻訳は Solutions Architect の 吉村 が担当しました。 Amplify AI kit の発表により、 カスタム UI コンポーネント 、 会話の履歴 、 会話の流れに外部データを追加 する方法を学びました。この記事では、React Native を使用してトラベルプランアプリケーションを構築する方法を学びます。このアプリケーションは、 Knowledge Base に基づいて、Retrieval Augmented Generation (RAG) および Large Language Models (LLM) を使用して応答を生成します。 大規模言語モデル (LLM) に最新の独自情報を付与するには、RAG という手法を使用できます。これは、企業のデータソースからデータを取得し、プロンプトを強化することで、より関連性が高く正確な応答を提供できるようになります。Amazon Bedrock Knowledge Bases を使えば、会社のプライベートデータソースから FM とエージェントにコンテキスト情報を提供し、RAG がより関連性があり、正確で、カスタマイズされた応答を提供できます。 この記事のバックエンドの構築、Knowledge Base の作成、RAG の部分は、どのウェブフレームワークでも使用できます。 ただし、このチュートリアルでは React Native でアプリケーションを構築することを想定しており、それに応じてフロントエンドのコードを説明します。 Amplify アプリの構築 Amplify アプリケーションを作成するには、アプリケーションのルートフォルダで create-amplify コマンドを実行する必要があります。 npm create amplify@latest -y これにより、AWS Amplify に対してプロジェクトに必要な依存関係がインストールされます。IDE でプロジェクトを開くと、新しい amplify フォルダが表示されます。 このフォルダには、メール認証付きのシンプルな ToDo アプリケーションが含まれています。関連するカテゴリのリソースは、それぞれ専用のフォルダの下に定義されています。たとえば、認証については auth/resource.ts ファイルを更新します。 ユーザーにパーソナライズされた体験のためのサインアップ認証フローを追加しましょう。まず auth/resource.ts ファイルを開き、次のように更新します。 import { defineAuth } from "@aws-amplify/backend"; export const auth = defineAuth({ loginWith: { email: { verificationEmailSubject: "Welcome to Travel Advisor! Verify your email!", verificationEmailBody: (code) => `Here is your verification code: ${code()}`, verificationEmailStyle: "CODE", }, }, userAttributes: { preferredUsername: { mutable: true, required: true, }, }, }); これにより、ユーザー確認メールがカスタマイズされ、登録時にユーザー名の作成が求められます。次に、Amplify サンドボックスを介して、初期デプロイを行います。個人用のクラウドサンドボックス環境は、フルスタックアプリを迅速に構築、テストしていてレーションを回すことができる、分離された開発スペースを提供します。チームの各開発者は、クラウドリソースに接続された使い捨てのサンドボックス環境を使用できます。それでは最初のデプロイを行いましょう。その前に、 backend.ts を次のように更新してください。 import { defineBackend } from "@aws-amplify/backend"; import { auth } from "./auth/resource"; import { data } from "./data/resource"; /** * @see https://docs.amplify.aws/react/build-a-backend/ to add storage, functions, and more */ defineBackend({ auth, }); データリソースをコメントアウトしておくことで、データリソースをデプロイしないでおくこともできます。次のコマンドを実行して、認証用のサンドボックス環境を起動します。 npx ampx sandbox 次のステップはフロントエンドの実装です。これには、 Amplify UI コンポーネント を使用します。Amplify UI とは、アクセシビリティが高く、テーマ設定が可能で、高パフォーマンスなコンポーネントの集合体で、クラウドに直接接続することができます。わずか数行のコードで、複雑なタスクを些細なタスクに変えることができます。 まず、UI ライブラリを使うために必要なライブラリをインストールします。 npm install --force @aws-amplify/ui-react-native aws-amplify @aws-amplify/react-native react-native-safe-area-context @react-native-community/netinfo @react-native-async-storage/async-storage react-native-get-random-values React Native の最新バージョンと UI ライブラリが競合するため、forceフラグを追加しています。 iOS 向けに Pod をインストールして、ネイティブライブラリにライブラリをバインドします。 npx pod-install 次に、 App.tsx 内の App コンポーネントを次のように更新してください: import outputs from "./amplify_outputs.json"; Amplify.configure(outputs); const SignOutButton = () => { const { signOut } = useAuthenticator(); return ( <TouchableOpacity onPress={signOut}> <MaterialIcons name="exit-to-app" size={32} /> </TouchableOpacity> ); }; export default function App() { const [username, setUsername] = useState(""); useEffect(() => { const fetchUsername = async () => { const attributes = await fetchUserAttributes(); const username = attributes.preferred_username ?? ""; setUsername(username); }; fetchUsername(); }, []); return ( <Authenticator.Provider> <Authenticator> <SafeAreaView style={styles.container}> <KeyboardAvoidingView behavior={"height"} style={styles.container}> <View style={styles.header}> <Text style={styles.headerIcon}>✈</Text> <Text style={styles.headerText}>Travel Advisor</Text> <SignOutButton /> </View> </KeyboardAvoidingView> </SafeAreaView> </Authenticator> </Authenticator.Provider> ); } 以下は主な変更点です。 fetchUserAttributes を介して、定義した追加属性を取得しています。 useAuthenticator フックを使用して、signOut ボタンを呼び出しています。 Authenticator コンポーネントと Authenticator.Provider コンポーネントで、認証用の UI を作成し、認証フローを制御します。 認証フローはテストする準備ができました。次のステップは AI 機能を実装することです。 Amplify の新しい AI 機能により、生成 AI を使いやすくなりました。たとえばコンポーネントを生成する場合は、生成機能を使ってみると、どのようになるかを確認できます。 data/resource.ts ファイルを開き、次のように更新してください: import { type ClientSchema, a, defineData } from "@aws-amplify/backend"; const schema = a.schema({ generateDestination: a .generation({ aiModel: a.ai.model("Claude 3.5 Sonnet"), systemPrompt: ` You are an advanced travel assistant with comprehensive knowledge about global destinations, including their geography, climate patterns, historical significance, tourist attractions, and cost of living. Your task is to analyze the following information: {{input}} Based solely on this input, determine the single best city on Earth for the user. Your response should be concise and definitive, presenting only the chosen city along with comprehensive information about their geography, climate patterns, historical significance, tourist attractions, and cost of living and why it's the ideal match. Do not ask for additional information or clarification. Provide your recommendation based exclusively on the given details. `, }) .arguments({ input: a.string().required(), }) .returns(a.string().required()) .authorization((allow) => [allow.authenticated()]), }); export type Schema = ClientSchema<typeof schema>; export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: "userPool", }, }); このおかげで、質問に対する回答を生成できます。 App.tsx ファイルを開き、どこからでも以下のように generateDestination を呼び出せば、目的地を生成できるようになりました。 const { data, errors } = await client.generations.generateDestination({ input: inputText, }); Knowledge Base の作成 (LLM に与える) 情報は、プロンプトの強さに大きく左右されます。また、情報は AI モデルとその特性に関するものです。しかし、Amazon Bedrock Knowledge Base を使えば、プロンプトにさらに情報を与えることができます。 以下のような基本的な Knowledge Base を作成します。 都市 国 人口 説明 金融ハブ 首都? ランキング 東京 日本 973 万人 東京は日本の首都です。超近代的な高層ビルと歴史的な寺院と庭園が共存しています。独自のポップカルチャー、先進的な技術、そして絶品の料理で知られています。世界最大の魚市場と最も混雑した横断歩道があります。 はい はい 1 イスタンブール トルコ 1,546 万人 イスタンブールはボスポラス海峡に跨っており、ヨーロッパとアジアの境目に位置しています。歴史に富み、ビザンティンとオスマンの建築物が見られます。バザール、ハンマーム、様々な料理で有名です。アヤソフィアとブルーモスクは象徴的な建造物です。 はい いいえ 5 ベルリン ドイツ 370 万人 ベルリンはドイツの首都で、活気ある芸術シーンと現代的な建築物、複雑な歴史で知られています。世界トップクラスの博物館、多様な地区、ベルリンの壁の残骸があります。テクノクラブ、ストリートアート、多文化な料理で有名です。 いいえ はい 2 ニューヨーク アメリカ 880 万人 ニューヨーク市は金融、芸術、文化の世界的ハブです。自由の女神像やエンパイアステートビルなど有名な観光スポットがあります。多様な地区、ブロードウェイの劇場、世界トップクラスの博物館、食の多様性で知られています。植民地時代から現代までの豊かな歴史があります。 はい いいえ 4 プラハ チェコ共和国 130 万人 プラハはチェコ共和国の首都で、「百塔の都市」として知られています。プラハ城やカレル橋など中世の建築物で有名です。ビール文化、クラシック音楽の遺産、よく保存された旧市街広場で名高いです。 いいえ はい 3 Amazon S3 コンソール に移動し、 Create bucket ボタンをクリックします。 バケットに一意の名前を選び、他はデフォルトの選択のままにします。次に、ファイルを S3 バケットにアップロードします。 それでは Knowledge Base を作成しましょう。まず AWS コンソールを開き、 Amazon Bedrock ページへ移動します。ページにアクセスしたら、左側のメニューから Knowledge bases を選択してください。 Create knowledge base ボタンをクリックしてください。すべてのデフォルト値のままにして (S3 が選択されていることを確認) 次へをクリックします。次のページで、S3 バケットからデータソースを選択してください。 データを変換するための埋め込みモデルを選択してください。 お客様に代わって Amazon が Vector Store を作成するか、以前作成したストアを選択して、Bedrock がデータの埋め込みを格納、更新、管理できるようにします。これで Knowledge Base を作成する準備が整いました。 Amazon Bedrock Knowledge Base のデフォルトのセットアップは OpenSearch Serverless で、これは使っていない間もデフォルトのコストがかかります。注意していないと AWS から請求が来るかもしれません。もしこれをテストするだけなら、終了後に必ず OpenSearch Serverless インスタンスをオフにしてください。 既にコンソール上で Knowledge Base をテストし、データが期待通りに動作するかどうかを確認できます。 Knowledge Base をアプリケーションで使用する時が来ました。 作成した Knowledge Base の利用 まず、いくつか片付けをしましょう。 Knowledge Base に対応した会話を作成し、そのデータベースと通信するための AppSync リゾルバーに接続する必要があります。 data/resource.ts ファイルを次のように更新してください。 import { type ClientSchema, a, defineData } from "@aws-amplify/backend"; const schema = a.schema({ chat: a .conversation({ aiModel: a.ai.model("Claude 3 Haiku"), systemPrompt: `You are a helpful assistant.`, tools: [ a.ai.dataTool({ name: "DestinationKnowledgeBase", description: "A knowledge base to be checked about everything related to the cities.", query: a.ref("searchDestination"), }), ], }) .authorization((allow) => allow.owner()), searchDestination: a .query() .arguments({ input: a.string() }) .handler( a.handler.custom({ dataSource: "DestinationKnowledgeBaseDataSource", entry: "./bedrockresolver.js", }) ) .returns(a.string()) .authorization((allow) => [allow.authenticated()]), }); export type Schema = ClientSchema; export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: "userPool", }, }); これにより、先ほど作成した Knowledge Base がツールとして conversation に追加されます。description は、LLM が Knowledge Base とやり取りするための説明テキストになります。js リゾルバーを追加するには、bedrockresolver.js というファイルを作成し、次のコードを貼り付けてください。 export function request(ctx) { const { input } = ctx.args; return { resourcePath: "/knowledgebases/<knowledge-base-id>/retrieve", method: "POST", params: { headers: { "Content-Type": "application/json", }, body: JSON.stringify({ retrievalQuery: { text: input, }, }), }, }; } export function response(ctx) { return JSON.stringify(ctx.result.body); } これにより、AppSync を通じて会話のコンテキストに指定した ID の Knowledge Base が取得されます。最後に、 backend.ts ファイルの Lambda からデータソースへのポリシーを更新する必要があります。 import { defineBackend } from "@aws-amplify/backend"; import { auth } from "./auth/resource"; import { data } from "./data/resource"; import * as iam from "aws-cdk-lib/aws-iam"; const backend = defineBackend({ auth, data, }); const KnowledgeBaseDataSource = backend.data.resources.graphqlApi.addHttpDataSource( "DestinationKnowledgeBaseDataSource", "https://bedrock-agent-runtime.<region>.amazonaws.com", { authorizationConfig: { signingRegion: "<region>", signingServiceName: "bedrock", }, } ); KnowledgeBaseDataSource.grantPrincipal.addToPrincipalPolicy( new iam.PolicyStatement({ resources: [ "arn:aws:bedrock:<region>:<user-id>:knowledge-base/<knowledge-base-id>", ], actions: ["bedrock:Retrieve"], }) ); 最後に、UI を次のように更新してストリーミングを処理します。 import React, { useEffect, useState } from "react"; import { StyleSheet, Text, View, TextInput, TouchableOpacity, SafeAreaView, KeyboardAvoidingView, FlatList, ActivityIndicator, } from "react-native"; import MaterialIcons from "@expo/vector-icons/MaterialIcons"; import { Authenticator, useAuthenticator } from "@aws-amplify/ui-react-native"; import { fetchUserAttributes } from "aws-amplify/auth"; import { Amplify } from "aws-amplify"; import { Schema } from "./amplify/data/resource"; import { generateClient } from "aws-amplify/data"; import outputs from "./amplify_outputs.json"; import { createAIHooks } from "@aws-amplify/ui-react-ai"; Amplify.configure(outputs); const client = generateClient<Schema>(); const { useAIConversation } = createAIHooks(client); const HomePage = () => { const [username, setUsername] = useState(""); const [inputText, setInputText] = useState(""); const [ { data: { messages }, isLoading, }, handleSendMessage, ] = useAIConversation("chat"); const handleSend = () => { handleSendMessage({ content: [{ text: inputText }], }); setInputText(""); }; useEffect(() => { const fetchUsername = async () => { const attributes = await fetchUserAttributes(); const fetchedUsername = attributes.preferred_username ?? ""; setUsername(fetchedUsername); }; fetchUsername(); }, []); return ( <SafeAreaView style={styles.container}> <KeyboardAvoidingView behavior={"height"} style={styles.container}> <View style={styles.header}> <Text style={styles.headerIcon}>✈</Text> <Text style={styles.headerText}>Travel Advisor</Text> <TouchableOpacity onPress={() => { const { signOut } = useAuthenticator(); signOut(); }} > <MaterialIcons name="exit-to-app" size={32} /> </TouchableOpacity> </View> <FlatList data={messages} keyExtractor={(message) => message.id} renderItem={({ item }) => item.content .map((content) => content.text) .join("") .trim().length == 0 ? ( <View style={styles.loadingContainer}> <ActivityIndicator /> </View> ) : ( <ChatMessage text={item.content .map((content) => content.text) .join("") .trim()} isUser={item.role == "user"} userName={item.role == "user" ? username : "Travel Advisor"} /> ) } contentContainerStyle={styles.chatContainer} ListEmptyComponent={() => ( <View style={styles.emptyContainer}> <Text style={styles.emptyText}> Start a conversation by sending a message below! </Text> </View> )} /> <View style={styles.inputContainer}> <TextInput style={styles.input} value={inputText} onChangeText={setInputText} placeholder="Describe your dream travel..." multiline={true} numberOfLines={3} /> <TouchableOpacity style={[styles.sendButton, isLoading && styles.sendButtonDisabled]} onPress={handleSend} disabled={isLoading} > <Text style={styles.sendButtonText}>Send</Text> </TouchableOpacity> </View> </KeyboardAvoidingView> </SafeAreaView> ); }; interface Message { text: string; isUser: boolean; userName: string; } const ChatMessage = ({ text, isUser, userName }: Message) => ( <View> <View style={[ styles.messageBubble, isUser ? styles.userMessage : styles.aiMessage, ]} > <Text style={styles.messageText}>{text}</Text> </View> <Text style={[styles.nameText, isUser ? styles.userName : styles.aiName]}> {userName} </Text> </View> ); export default function App() { return ( <Authenticator.Provider> <Authenticator> <HomePage /> </Authenticator> </Authenticator.Provider> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: "#FFFFFF", }, header: { flexDirection: "row", alignItems: "center", padding: 15, borderBottomWidth: 1, borderBottomColor: "#E0E0E0", }, headerIcon: { fontSize: 24, marginRight: 10, }, headerText: { fontSize: 20, fontWeight: "bold", flex: 1, }, signOutIcon: { fontSize: 24, }, chatContainer: { padding: 10, }, messageBubble: { maxWidth: "80%", padding: 10, borderRadius: 20, marginBottom: 5, }, aiMessage: { alignSelf: "flex-start", backgroundColor: "#F0F0F0", }, userMessage: { alignSelf: "flex-end", backgroundColor: "#DCF8C6", }, messageText: { fontSize: 16, }, nameText: { fontSize: 12, marginBottom: 10, }, userName: { alignSelf: "flex-end", color: "#4CAF50", }, aiName: { alignSelf: "flex-start", color: "#666666", }, inputContainer: { flexDirection: "row", padding: 10, borderTopWidth: 1, borderTopColor: "#E0E0E0", }, input: { flex: 1, backgroundColor: "#F0F0F0", borderRadius: 20, paddingHorizontal: 15, paddingVertical: 10, fontSize: 16, }, sendButton: { backgroundColor: "#4CAF50", paddingHorizontal: 12, borderRadius: 20, justifyContent: "center", alignItems: "center", marginLeft: 10, }, sendButtonDisabled: { backgroundColor: "#A5D6A7", }, sendButtonText: { color: "#FFFFFF", fontSize: 24, }, loadingContainer: { alignSelf: "flex-start", marginBottom: 10, }, loadingText: { fontSize: 24, color: "#666666", }, emptyContainer: { flex: 1, justifyContent: "center", alignItems: "center", height: 500, }, emptyText: { fontSize: 16, color: "#666666", textAlign: "center", }, }); 上記のコードで最も重要な部分は以下の通りです。 const { useAIConversation } = createAIHooks(client); 会話情報を取得し、メッセージを受信・送信するための React フックを作成します const [ { data: { messages }, isLoading, }, handleSendMessage, ] = useAIConversation("chat"); メッセージを受信し、メッセージを送信します 全体として、このアプリは取得した情報をリアルタイムに取得して、画面に表示します。 サンドボックスを再デプロイすると、アプリケーションが提供された情報を使用して Knowledge Base を呼び出すことがわかります。それではアプリケーションを実行して、その様子を確認しましょう。 クリーンアップ このブログ記事では、Amazon Bedrock Knowledge Base を通して LLM を呼び出す方法を学びました。最後に、次のコマンドを実行して Amplify サンドボックス内のリソースを削除することを忘れずに行ってください。 npx ampx sandbox delete -y また、ベクトルデータベースは高価な場合があるので、アプリケーションのテストが終わったら、必ず Amazon OpenSearch Serverless ダッシュボードからインスタンスを削除してください。 おわりに このブログ記事では、 Knowledge Base の作成方法とアプリケーションでの利用方法を学びました。さらに詳しく知りたい場合は、 AI 入門ガイド をご覧ください。Amplify AI kit の使い方について詳しく説明しています。
2024 年 11 月 29 日、私たちはフルスタックの開発者が会話型検索やチャット、要約などの AI 機能を備えたウェブアプリを構築する最も早い方法である、AWS Amplify AI Kit の一般提供を開始しました。Amplify AI Kit を使えば、クラウドアーキテクチャや機械学習の経験がなくても、フルスタックの生成 AI 機能を構築することができます。リソースのプロビジョニングやセキュアなフロントエンドへのアクセスを心配する必要はなく、すべてがサーバーレスなので迅速なイテレーションが可能で、使った分だけの料金を支払えば済みます。 AWS Amplify では TypeScript を全面採用しており、 Amplify Gen 2 の場合、アプリのクラウドバックエンドのすべての部分が TypeScript で定義されています。認証バックエンド、データバックエンド、ストレージバックエンド、生成 AI 、これら全てを TypeScript で定義することができるのです。 このブログでは、Amplify AI Kit の中身とそれが Amplify および Amazon Bedrock を使って安全なフルスタック AI アプリケーションを構築する作業をどのように簡素化するかについて説明します。すぐに始めたい場合は、 入門ガイド または サンプルリポジトリ をご覧ください。 セットアップ ローカル開発用に セットアップ済みの AWS アカウント が必要で、使用したい Amazon Bedrock の基盤モデルにアクセスできる権限が必要です。 Amazon Bedrock コンソール に移動してアクセス権を要求できます。 フロントエンドのプロジェクトがセットアップされていない場合は、Next.js または Vite を使ってセットアップできます。その後、プロジェクトディレクトリ内で create amplify スクリプトを実行してください。 npm create amplify@latest 次のコマンドを実行すると、TypeScript で書かれたバックエンド定義が含まれる amplify フォルダが作成されます。 npx ampx sandbox これにより、Amplify サンドボックスが起動し、実際の AWS リソースを使ってテストできるクラウド サンドボックス環境が用意されます。 AI 機能の追加 Amplify AI Kit に AI 機能を追加するには、データモデルやカスタムクエリと同様に、Amplify データスキーマに AI ルートを定義します。AI ルートは、バックエンドの AI 機能と対話するための API エンドポイントのようなものです。現在、AI ルートには 2 種類あります。 Conversation: Conversation ルートはリアルタイム、マルチターンの API です。会話とメッセージは自動的に DynamoDB に保存され、応答がリアルタイムにクライアントにストリーミングされます。チャットベースの AI エクスペリエンスや会話型 UI などがこれにあたります。 Generation: シンプルなリクエスト・レスポンス API です。Generation ルートは、定義に従って構造化データを生成する AWS AppSync クエリです。一般的な用途は、非構造化入力から構造化データを生成したり、要約することです。 Amplify のデータリソース定義では、スキーマ定義内で AI ルートを定義できます: import { a, defineData, type ClientSchema } from '@aws-amplify/backend'; const schema = a.schema({ // This will add a new conversation route to your Amplify Data backend. chat: a.conversation({ aiModel: a.ai.model('Claude 3 Haiku'), systemPrompt: 'You are a helpful assistant', }) .authorization((allow) => allow.owner()), // This adds a new generation route to your Amplify Data backend. generateRecipe: a.generation({ aiModel: a.ai.model('Claude 3 Haiku'), systemPrompt: 'You are a helpful assistant that generates recipes.', }) .arguments({ description: a.string(), }) .returns( a.customType({ name: a.string(), ingredients: a.string().array(), instructions: a.string(), }) ) .authorization((allow) => allow.authenticated()), }); export type Schema = ClientSchema; export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: "userPool", }, }); ここでは、2 つの AI ルートを作成しています。1 つは ‘chat’ という名前の Conversation ルート、もう 1 つは ‘generateRecipe’ という名前の Generation ルートです。コードを 1 ステップずつ見ていきましょう。 chat: a.conversation({ ここでは新しい「chat」という Conversation ルートを作成しています。ルートの名前は任意に付けられ、定義できる AI ルートの数の制限は、AWS AppSync スキーマのサイズの制限のみです。 aiModel: a.ai.model('Claude 3.5 Sonnet'), 次に、使用したい大規模言語モデル (LLM) を定義します。Amplify AI Kit は、ツール使用とストリーミングをサポートする Bedrock の任意の LLM をサポートしています。ここでは、Anthropic の Claude 3.5 Sonnet モデルを使用しています。 systemPrompt: 'You are a helpful assistant', システムプロンプトは、LLM に対して、その役割と応答の仕方を指示します。 .authorization((allow) => allow.owner()), Amplify Data には組み込みの認証方式があります。Conversation ルートの場合、特定の会話の所有者のみがアクセスできるようにしたいと思います。つまり、ユーザーは他のユーザーの会話履歴にアクセスできません。 generateRecipe: a.generation({ ここでは、generateRecipe と呼ばれる Generation ルートを作成しています。Generation は、入力に基づいて特定の型のデータを生成したい場合に使用する同期リクエスト/レスポンス API です。 .arguments({ description: a.string(), }) これにより、クライアントがレスポンスを受け取るためにどのような入力型を送る必要があるかを定義します。 .returns( a.customType({ name: a.string(), ingredients: a.string().array(), instructions: a.string(), }) ) これが生成したいデータの出力形式です。 Conversation と Generation のルートが定義できたので、Amplify クライアントライブラリで接続できます。 リアルタイム更新機能付きの型安全クライアント Amplify では、フルスタックアプリケーションのコードベースの中にある amplify フォルダにバックエンドリソースを定義します。これによって、データスキーマとフロントエンドクライアントが型を共有できるので、データスキーマと常に同期する型安全なクライアントを手に入れることができます。 import { generateClient } from "aws-amplify/api"; import type { Schema } from "../amplify/data/resource"; const client = generateClient(); // new generations / conversations namespace client.generations.generateRecipe({ }); // type-safe based on schema client.conversations.chat.create(); Amplify AI Kit には、React フックも含まれているので、ネットワーク要求や UI の状態を管理する心配はいりません。UI にフックするだけで、リアルタイム、セキュア、永続的な生成 AI との会話を利用できます。 import { generateClient } from "aws-amplify/api"; import { Schema } from "../amplify/data/resource"; import { createAIHooks } from "@aws-amplify/ui-react-ai"; const client = generateClient(); const { useAIGeneration, useAIConversation } = createAIHooks(client); function Chat() { const [ { data: { messages }, isLoading, hasError, }, sendMessage, ] = useAIConversation('chat'); //... } function RecipeGenerator() { const [ { data, isLoading }, handleGenerate] = useAIGeneration('generateRecipe'); //... } 生成 AI をデータとして活用 データに適切なアクセスができることは、意味のある生成 AI 機能を構築するために重要であり、私たちはデータを LLM に接続することをできるだけ簡単にしたいと考えました。Amplify では、データモデルを厳密に型付けされたスキーマで定義し、生成 AI 機能を追加することは、データモデルやカスタムクエリを追加するのと同じくらい簡単です。TypeScript でデータモデルとクエリの形状を定義しているため、Amplify AI Kit は、Bedrock の LLM がアクセスできるデータとそのアクセス方法を正確に知ることができるように、必要な部分をフックアップします。さらに、データスキーマで定義されたアクセス制御により、LLM はエンドユーザーがアクセスできるデータにのみアクセスできます。すべてのデータリクエストは、クライアントからのリクエストでも LLM からのデータリクエストでも、AWS AppSync を経由します。 「Post」というデータモデルを持つアプリケーションがあると仮定します。このデータにアクセスするには、Conversation ルートにツールを使用します。 import { a, defineData, type ClientSchema } from '@aws-amplify/backend'; const schema = a.schema({ Post: a.model({ title: a.string(), body: a.string() }) .authorization((allow) => allow.owner()), chat: a.conversation({ aiModel: a.ai.model('Claude 3 Haiku'), systemPrompt: 'You are a helpful assistant', // This allows the LLM to query for your data tools: [ a.ai.dataTool({ name: 'PostQuery', description: 'Searches for Post records', model: a.ref('Post'), modelOperation: 'list', }), ] }) .authorization((allow) => allow.owner()), //... }); このコードを分解しましょう。 tools: [ ツールは、LLM がデータを照会し、アクションを実行する手段です。Amplify AI Kit は、LLM へのリクエストでインプットを記述し、ツールの呼び出しと LLM への結果の送信を処理します。 a.ai.dataTool({ name: 'PostQuery', description: 'Searches for Post records', model: a.ref('Post'), modelOperation: 'list', }), LLM にスキーマで定義したデータモデルへのアクセスを提供できます。これにより、LLM はデータモデルの属性に基づいてレコードを照会できます。さらに所有者ベースの承認では、LLM はユーザーが作成したレコードにのみアクセスできます。LLM に カスタムクエリ の呼び出しも許可できます! サーバーレス AI アーキテクチャ Amplify AI スタックはフルマネージドのサーバーレスです。すばやくスピンアップでき、 Amplify サンドボックス を使えば、バックエンドのコードを反復しながら更新を実際のクラウド環境で確認できます。Amplify のサンドボックスを使うと、クラウドリソースにローカル開発環境を作れます。機能開発時にフロントエンドとバックエンドを同時に更新できるので、開発の分断なくエンドツーエンドの機能構築ができます。デプロイする準備ができたら、Amplify Hosting にブランチをプッシュすると、バックエンドとフロントエンドが同時にデプロイされます。 Amplify AI kit architecture AWS AppSync API: クライアントと安全にリアルタイム接続するための AI ゲートウェイ。AppSync API はハブとして機能し、すべてのデータリクエスト (クライアントまたは LLM からのリクエスト) が AppSync を通過します。 Lambda 関数: AppSync と Amazon Bedrock の間の橋渡し役。会話履歴を取得し、Bedrock のストリーミング会話 API を呼び出し、AppSync クエリに基づきツールの呼び出しをハンドリングします。 DynamoDB: 特定のアプリケーションユーザーに対する会話履歴とメッセージデータを保存します。 Generative UI の紹介 Amplify AI Kit でもう 1 つ行いたかったことは、生成 UI を構築することを簡単にすることでした。AI アシスタントが、テキストのみならず、カスタム UI コンポーネントで応答できるようにすることです。これにより、より豊かな体験が可能になり、会話型検索などの構築が可能になります。 Amplify AI Kit には、 <AIConversation /> React コンポーネントと useAIConversation React フックが用意されており、カスタマイズ可能なインターフェースを AI ルートで簡単に構築できます。このコンポーネントには、AI アシスタントが応答可能な responseComponents (コードで定義した React コンポーネント) を指定できます。コンポーネントの説明と props を定義すれば、Amplify AI Kit が残りの処理を行います。 function Chat() { const [ { data: { messages }, isLoading, }, sendMessage, ] = useAIConversation('chat'); return ( { return { city }; }, props: { city: { type: 'string', required: true, }, }, }, }} /> ); } 本番環境への移行 本番環境に移行する準備ができたら、Amplify コンソールで Git リポジトリを追加できます。ブランチにコードを push すると、フルスタックアプリケーション用の完全な継続的デプロイメントパイプラインが実行されます。アプリケーションが公開されると、アプリケーション内で会話データを確認できます。 クリーンアップ Amplify サンドボックスコマンドは ctrl + c で終了できます。その後、 npx ampx sandbox delete コマンドでクラウドサンドボックスリソースを削除できます。 まとめ 私たちは、Amplify AI Kit でみなさんが何を構築するのか非常に楽しみにしており、みなさんからのフィードバックを心待ちにしています。この 1 週間、毎日新しい記事を投稿し、Amplify AI Kit の異なる機能を紹介していきます。Amplify AI Kit の使用開始方法の詳細については、 docs.amplify.aws/ai をご覧ください。 問題がある場合は、 GitHub リポジトリ でお問い合わせいただくか、私たちのコミュニティ Discord で質問してください。 本記事は「 Build fullstack AI apps in minutes with the new Amplify AI Kit 」を翻訳したものです。 翻訳者について 稲田 大陸 AWS Japan で働く筋トレが趣味のソリューションアーキテクト。好きな AWS サービスは Amazon Location Service と AWS Amplify で、日本のお客様向けに Amazon Location Service の解説ブログ などを執筆しています。
フロントエンドの開発者は、アプリで永続的な会話型 AI チャット体験を開発するとき、しばしば複雑な API、複雑なリアルタイム UI の更新、設定が難しいアクセス許可を扱う必要があります。それに加えて、複雑なクラウド インフラストラクチャをセットアップしなければなりません。そういった理由から、私たちは AWS Amplify AI Kit とその会話型チャット体験をご紹介できて、大変嬉しいです。 わずか数行のコードで、TypeScript を使って会話型チャットを自分のフロントエンドアプリケーションに追加することができます。複雑なクラウド設定や追加の権限は必要ありません。作成したチャットには、さまざまな Amazon Bedrock モデルの 1 つを接続できます。それぞれのチャットに対して、お客様のユーザーアカウントに関連付けられた永続的な会話履歴が保持されます。また、アプリケーションのニーズに合わせてチャット体験をカスタマイズすることができます。 この機能は、バックエンドにルーティングする新しい conversation API によって動作します。Amazon Bedrock で動作する大規模言語モデル (LLM) を指定したり、お客様のニーズに合わせてカスタマイズしたシステムプロンプトを作成したりするオプションが用意されています。オプションとして、Amplify はツールの使用に対応しており、外部データや機能と対話して、必要に応じて正確に応答できるようになっています。 フロントエンドの Amplify では、 AIConversation コンポーネントと useAIConversation React フックを提供する新しい UI ライブラリがリリースされました。これらの API は、最小限の構成で React アプリケーションにドロップインすると、お客様が対話を開始できるチャット ウィンドウを表示できます。そのうえで、アプリケーションのルックアンドフィールに合わせてカスタマイズを行うこともできます。たとえば、アバター、表示テキスト、添付ファイルの許可、特定のレスポンス用コンポーネントの作成などができます。 このチュートリアルでは、アプリケーションに会話ルートを追加し、カスタマイズする方法を説明します。 前提条件 以下の手順を始める前に、アプリケーション内で AWS Amplify Gen 2 をセットアップする必要があります。これはアプリケーションのルートで create コマンドを実行するだけで簡単に行えます。 npm create amplify@latest これにより、プロジェクトのルートに新しい amplify フォルダが作成され、そこでバックエンドリソースを定義することができます。続行する前に、使用したい Amazon Bedrock モデル を有効にしてください。このチュートリアルでは、Claude 3 Haiku を使用します。さらに、必要に応じて、 ローカル開発用に AWS を設定する ことで、 クラウドサンドボックス環境 でローカルでテストができるようになります。 まだ Amplify AI Kit についてご覧になられていない方は 発表時のブログ記事 をご覧ください。この記事で紹介された機能のすべての使用例と、その他の例を見たい方は、 Amplify AI サンプルリポジトリ をご覧ください。 Conversation ルートの追加 Amplify AI Kit は、Amplify Data の規約に基づいています。この規約に従うことで、シンプルな TypeScript 対応の構文を使って、任意のデータソースに接続するためのデータモデルを作成できます。今回は、 data/resource.ts ファイルのスキーマ定義にある新しい a.conversation API を使用して、チャット会話のルートを構築します。 まず初めに、データリソースファイルに追加し、 chat という新しい会話を作成しましょう。 // data/resource.ts import { type ClientSchema, a, defineData } from "@aws-amplify/backend"; const schema = a.schema({ chat: a.conversation({ aiModel: a.ai.model("Claude 3 Haiku"), systemPrompt: "You are a travel advisor app. You help travelers find locations.", }).authorization(allow => allow.owner()), }); export type Schema = ClientSchema<typeof schema>; export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: "userPool", }, }); Conversation API を利用するユーザーは認証が必要です。これはデフォルトで変更できません。慣例として、AWS Amplify Gen 2 を設定する際には、 auth カテゴリ を介して Amazon Cognito User Pool が作成されます。自分でテストする場合は、フロントエンドを Authenticator コンポーネントでセットアップすることをお勧めします。このコンポーネントは Amplify auth カテゴリを利用し、数行のコードでサインイン/サインアウトの UI を提供します。 チャットをセットアップする上で最も重要な部分の 1 つは、 aiModel と systemPrompt を定義することです。 aiModel には Claude 3 Haiku を選択しました。これは最新の Anthropic Claude 3 モデルの 1 つで、ユーザーからの質問に対応するための LLM として機能します。Claude 3 Opus、Claude 3 Haiku、Cohere、LLama、Mistral など、選択可能な複数のモデルがローンチ時に提供されています。 システムプロンプトは、LLM に期待する動作を定義します。この記事では、プロンプトをシンプルにしていますが、使用ケースによっては、より簡潔なプロンプトを試してみる価値があるかもしれません。Few-Shot プロンプティングなどの他の プロンプト 戦略を検討することで、より良い結果が得られる可能性があります。 オプションで、モデルの token 、 temperature 、 top P を設定するための inferenceConfiguration を追加できます。別のオプションとしてツールを追加することができます。ツールの利用は、関数呼び出しとも呼ばれ、対応するモデルが外部の関数やデータと対話できるようにします。たとえば、Amazon Bedrock Knowledge Base で検索拡張生成 (RAG) を使用したい場合は、カスタムリゾルバーでリソースファイルに追加することができます。このような例については、今後の記事でご紹介します。 ルートにある amplify フォルダ内の backend.ts ファイルは、この Conversation API を追加するための他の追加設定は必要ありません。新規プロジェクトから開始する場合、 data が defineBackend 関数呼び出しにインポートされます。さらなる IAM ポリシーの更新は必要ありません。裏側では、AWS AppSync リゾルバを構築し、Amazon Bedrock と直接やり取りする AWS Lambda 関数を作成するための AWS Cloud Development Kit (CDK) コードが生成されます。Amplify は必要な IAM ポリシーも作成し、ユーザーアカウントごとに会話履歴を永続化するための Amazon DynamoDB のデータソースを設定します。 ローカルでのクラウドサンドボックステスト 同じようにコードを実行したい場合は、アプリケーションのルートで npx ampx sandbox コマンドを実行してローカルでテストできます。このコマンドは amplify フォルダを読み込み、テスト環境としてクラウドリソースをプロビジョニングします。 フロントエンドの更新 バックエンドの定義が完了したので、次にフロントエンドのコードを追加します。Vite または Next.js で React アプリケーションを使用していると仮定します。 npm i @aws-amplify/ui-react-ai この ライブラリには、Amplify の新しい AI コンポーネントを使用するために必要なすべてが含まれています。 新しい Chat.tsx コンポーネントを作成し、次のコードを追加してください。 import { Avatar, View } from "@aws-amplify/ui-react"; ... <AIConversation messages={messages} handleSendMessage={sendMessage} avatars={{ user: { avatar: <Avatar src="erik.jpg" />, username: "Erik", }, ai: { avatar: <Avatar src="robot.jpg" />, username: "🤖", }, }} /> この新しいコンポーネントをアプリのエントリポイントファイルに追加します。テストする際は、ユーザーがすでにサインインしていることを確認してください。また、アプリケーションを Authenticator コンポーネントでラップすることをお勧めします。これにより、ユーザーがチャットにアクセスする前にサインインしてアカウントを作成する必要があります。 メインエントリをロードすると、使用可能なシンプルなチャットインターフェースが表示されます。 複数のチャット会話を追加する方法が気になるところでしょう。 useAIConversation フックを詳しく見て、オプションの id を追加しましょう。 const [ { data: { messages }, isLoading, }, sendMessage, ] = useAIConversation("chat", { id: "123" }); デフォルトでは、ユーザーは 1 つのチャットのみ持っています。 id を追加することで、その ID に基づいて、ユーザーごとに複数の個別のチャットを作成できます。各チャットは、システムにログインしているユーザーに紐付けられます。いつでも generateClient API を使用して、会話を取得、削除、あるいは更新できます。設定方法の完全な例については、 Amplify AI Examples リポジトリをご覧ください。 チャット体験のカスタマイズ AIConversation コンポーネントには、ユーザーへのチャット体験をカスタマイズするためのいくつかのプロパティがあります。ユーザー体験を向上させるためのいくつかのカスタマイズを見てみましょう。 アバターの更新 会話型チャットでは、ユーザーのアバターを表示することをしばしば求められますが、 avatars を設定することで設定できます。 import { Avatar, View } from "@aws-amplify/ui-react"; ... <AIConversation messages={messages} handleSendMessage={sendMessage} avatars={{ user: { avatar: <Avatar src="erik.jpg" />, username: "Erik", }, ai: { avatar: <Avatar src="robot.jpg" />, username: "🤖", }, }} /> avatars は user と ai オブジェクトを取ります。チャットでそれぞれに表示されるアバターとユーザー名を定義できます。この例では、 @aws-amplify/ui-react ライブラリからの Avatar コンポーネントを使用して画像を表示しています。AI に関しては、名前を絵文字に変え、新しいアバターを指定しています。 レスポンスコンポーネント response component を使うと、開発者は LLM から返された応答メッセージに基づいてカスタム応答を作成できます。アプリ開発者はコンポーネントを作成し、 responseComponents プロップに追加することで、これらのメッセージの出力を定義できます。たとえば、ユーザが休暇地についての情報を求めた場合、チャットはカスタムの場所カードに名前と説明を表示できます。 以下のコードでは、ユーザー向けのカードを作成するために LocationCard コンポーネントが使用されています。 import { LocationCard } from './LocationCard.tsx'; ... <AIConversation messages={messages} handleSendMessage={sendMessage} responseComponents={{ LocationCard: { description: "Used to display a location to the user", component: LocationCard, props: { name: { type: "string", description: "The name of the location", }, description: { type: "string", description: "The description of the location", }, }, }, }} /> この例では、地名と説明を整えられたカードに表示しています。 responseComponents プロパティは、ツールを介して会話ルートに接続された外部 API でも動作します。 添付ファイルの許可 必要に応じて、チャットウィンドウ内に直接ファイルを添付できます。この機能を有効にするには、ファイルを受け付ける LLM を使用する必要があります。この機能を有効にするには、 allowAttachments を追加してください。 <AIConversation messages={messages} handleSendMessage={sendMessage} allowAttachments /> この allowAttachments を追加すると、チャットウィンドウの下部にファイルを添付するボタンが表示されるようになります。 アップロードした全ての画像は Amazon DynamoDB に保存されますので、ご注意ください。上限は 400KB なので、400KB 以下の画像のみ追加できます。画像を添付したら、その画像に関する質問をし、LLM による回答を得ることができます。 メッセージレンダラ message renderer プロパティはテキスト出力のフォーマットを指定します。たとえば、出力を Markdown で表示したい場合を想像してください。ほとんどの LLM がマークダウンをサポートしているので、会話のメッセージでマークダウンを利用できると便利です。これは、 react-markdown ライブラリをインストールし、 ReactMarkdown コンポーネントを使用して、全ての出力を適切にフォーマットできます。 import ReactMarkdown from "react-markdown"; ... <AIConversation messages={messages} handleSendMessage={sendMessage} messageRenderer={{ text: ({ text }) => <ReactMarkdown>{text}</ReactMarkdown>, }} /> react-markdown を rehypeHighlight のような他のプラグインと組み合わせると、追加のコードハイライト機能が使えます。 これは、 messageRenderer でコードのテキストを表示するために、 rehypeHighlight プラグインを使用しているチャットの例です。 クリーンアップ サンドボックスを実行中の場合は、次のコマンドをターミナルで実行すると、サンドボックスとそれに作成された全てのバックエンドインフラストラクチャを削除できます。 npx ampx sandbox delete 次のステップ この記事では、Amplify AI Kit を使用してアプリケーションにセキュアな会話型チャットを追加する方法を見てきました。ユーザー向けにカスタムチャット体験を作成するために、新しい Amplify AI UI ライブラリを追加するのがいかに簡単かを確認しました。さらに、レスポンスコンポーネント、アバター、メッセージレンダラを使用してユーザー体験をさらに向上させることができることも確認しました。 詳しく学びたい方は、 AI のスタートガイド をご覧ください。Amplify AI Kit の使い方を詳しく説明しています。また Discord チャンネル に参加して、直接質問することもできます。 本記事は「 Create a Customized AI-Based Chat Interface With Your Application Data 」を翻訳したものです。 翻訳者について 稲田 大陸 AWS Japan で働く筋トレが趣味のソリューションアーキテクト。好きな AWS サービスは Amazon Location Service と AWS Amplify で、日本のお客様向けに Amazon Location Service の解説ブログ などを執筆しています。
AWS Amplify Hosting は、開発者が Web アプリケーションを保護し、さらにセキュリティを強化できる新しいファイアウォール機能を発表しました。これは AWS WAF との直接統合であり、開発者は Amplify Hosting にホストされたアプリケーションに Web ACL を直接 追加することができます。Web アプリケーションファイアウォールは、一般的な Web 攻撃からアプリケーションを保護し、セキュリティを強化し、コンプライアンスを確保するためには必要不可欠です。IP の許可/ブロック、地理的制限、Bot からの保護などの機能があります。WAF を提供することで、Amplify のお客様はアプリケーションのセキュリティ保護を大幅に向上させ、リスクを軽減し、データとユーザーエクスペリエンスの完全性を維持できます。 AWS WAF は、Webアクセスコントロールリスト(Web ACL)と呼ばれる一連のルールを設定できるサービスであり、お客様が定義したカスタマイズ可能な Web セキュリティルールと条件に基づいて、Web リクエストを許可、ブロック、または監視(カウント)することができます。Amplify Hosting と AWS WAF を統合することで、トラフィックをさらに制御できるようになります。AWS WAF の詳細については、開発者ガイドの AWS WAF の動作方法 をご覧ください。 AWS WAF を初めて利用する場合でも Amplify Hosting では開発者が簡単に設定できるようになっています。 IP アドレス 許可/ブロック – 指定の IP アドレス範囲からのリクエストを許可または拒否することで、Web トラフィックを制限します 地理的制限 – 特定の国からのアクセスを許可または拒否します ファイアウォール保護 – Web アプリケーションで最も一般的に見られる脆弱性から保護するための一般的なファイアウォール保護、Amazon の内部の脅威インテリジェンスに基づく潜在的な脅威からの IP アドレスブロック、および悪意のあるアクターがアプリケーションの脆弱性を発見するのを防ぐ保護 Amplify URL の無効化 – デフォルトの Amplify で生成された amplifyapp.com ドメインへのアクセスを制限します (カスタムドメインを追加した後、Bot と検索エンジンがそのドメインをクロールするのを防ぐのに便利です) Amplify コンソールで有効化された保護は、お客様の AWS アカウント内の Web ACL に適用されます。細かいルールセットが必要な場合、開発者は WAF コンソールのルールビルダーを活用できます。 スタートガイド アプリに WAF を関連付ける手順については、 ドキュメント を参照してください。 可用性と価格 ファイアウォールのサポートは、Amplify Hosting が運用されているすべての AWS リージョンで、プレビュー版としてリリースされています ( オプトインリージョンを除く )。この統合は、CloudFront と同様のグローバルリソースの WAF に分類されます。Web ACL は複数の Amplify Hosting アプリにアタッチできますが、同じリージョン内に存在する必要があります。 プレビュー中は、AWS WAF の利用料金のみが発生します。AWS WAF は Web ACL ごとに $ 5/月、ルールごとに $ 1 を請求するほか、他の課金もあります。詳細は WAF の料金 をご覧ください。1 つの Web ACL と 2 つのルールを想定すると、この統合で最低でも $ 7 の課金が発生します。 さらに、Amplify ファイアウォール 機能を利用するには、新しい Amplify Hosting の上位プランへの加入が必要になります。この上位プランには、リリース時にほかの機能も含まれます。プレビュー期間中に Amplify ファイアウォールを有効にすると、この上位プランに自動的に加入しますが、Amplify ファイアウォール機能が一般提供されるまでは追加料金はかかりません。いつでも Amplify ファイアウォールを削除すれば、一般提供後も料金が請求されることはありません。この上位プランの具体的な価格は一般提供時にお知らせします。コミットメントも前払い投資も不要です。 次のステップ アプリにファイアウォール保護を設定するには、 AWS Amplify コンソール にアクセスしてください。 本記事は「 AWS Amplify Hosting Adds Web Application Firewall Protection – Public Preview 」を翻訳したものです。 翻訳者について 稲田 大陸 AWS Japan で働く筋トレが趣味のソリューションアーキテクト。普段は製造業のお客様を支援しています。最近「 三菱電機グループエンジニアが作る新しい風 “Mitsubishi Electric AWS User Group (通称: MAWS-UG)” の軌跡 」を執筆しました。好きな AWS サービスは Amazon Location Service と AWS Amplify で、日本のお客様向けに Amazon Location Service の解説ブログ などを執筆しています。