

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AI と機械学習
<a name="machinelearning-pattern-list"></a>

**Topics**
+ [ある の AWS CodeCommit リポジトリ AWS アカウント を別のアカウントの Amazon SageMaker AI Studio Classic に関連付ける](associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.md)
+ [Amazon Textract を使用して PDF ファイルからコンテンツを自動的に抽出する](automatically-extract-content-from-pdf-files-using-amazon-textract.md)
+ [Amazon SageMaker AI Studio Lab で時系列に DeepAR を使用してコールドスタート予測モデルを構築する](build-a-cold-start-forecasting-model-by-using-deepar.md)
+ [Amazon SageMaker AI と Azure DevOps を使用して MLOps ワークフローを構築する](build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.md)
+ [を使用して Amazon Bedrock でモデル呼び出しログ記録を設定する AWS CloudFormation](configure-bedrock-invocation-logging-cloudformation.md)
+ [SageMaker 用のカスタム Docker コンテナイメージを作成し、AWS Step Functions のモデルトレーニングに使用する](create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.md)
+ [Amazon Bedrock エージェントを使用してテキストベースのプロンプトで Amazon EKS でのアクセスエントリコントロールの作成を自動化する](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)
+ [Terraform と Amazon Bedrock を使用して AWS に RAG ユースケースをデプロイする](deploy-rag-use-case-on-aws.md)
+ [Amazon SageMaker の推論パイプラインを使用して、前処理ロジックを単一エンドポイントの ML モデルにデプロイする](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.md)
+ [Kiro やその他のコーディングアシスタントで MCP サーバーを使用してリアルタイムのコーディングセキュリティ検証をデプロイする](deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.md)
+ [RAG と ReAct プロンプトを使用して高度な生成 AI チャットベースのアシスタントを開発する](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Amazon Bedrock エージェントとナレッジベースを使用して、完全に自動化したチャットベースのアシスタントを開発する](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.md)
+ [Amazon Bedrock と Amazon Transcribe を使用して音声入力から組織の知識を文書化する](document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.md)
+ [Amazon Personalize を使用して、パーソナライズされ再ランク付けされたレコメンデーションを生成します](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [SageMaker AI と Hybrid を使用して、ローカルでの開発からスケーラブルな実験に至るまでの機械学習ワークフローを合理化する](streamline-machine-learning-workflows-by-using-amazon-sagemaker.md)
+ [自然言語を OpenSearch と Elasticsearch のクエリ向けにクエリ DSL に変換する](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Amazon Q Developer をコーディングアシスタントとして使用して生産性を高める](use-q-developer-as-coding-assistant-to-increase-productivity.md)
+ [SageMaker Processing を使用して、テラバイト規模の ML データセットの分散型特徴量エンジニアリングを実現](use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets.md)
+ [フラスコと AWS Elastic Beanstalk を使用して AI/ML モデルの結果を視覚化](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)
+ [その他のパターン](machinelearning-more-patterns-pattern-list.md)

# ある の AWS CodeCommit リポジトリ AWS アカウント を別のアカウントの Amazon SageMaker AI Studio Classic に関連付ける
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account"></a>

*Amazon Web Services、Laurens van der Maas,Aubrey Oosthuizen*

## 概要
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-summary"></a>

このパターンでは、ある AWS アカウント (アカウント A) の AWS CodeCommit リポジトリを別の ( AWS アカウント アカウント B) の Amazon SageMaker AI Studio Classic に関連付ける方法の手順とコードを示します。関連付けを設定するには、アカウント A に AWS Identity and Access Management (IAM) ポリシーとロールを作成し、アカウント B に IAM インラインポリシーを作成する必要があります。次に、シェルスクリプトを使用して、アカウント A からアカウント B の Amazon SageMaker AI Classic に CodeCommit リポジトリをクローンします。

## 前提条件と制限事項
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-prereqs"></a>

**前提条件**
+ 2 つの [AWS アカウント](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/)のうち 1 つには CodeCommit リポジトリが、もう 1 つにはユーザーの SageMaker AI ドメインが含まれていること
+ プロビジョニングされた [SageMaker AI ドメインとユーザー](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html)、インターネットアクセスまたは仮想プライベートネットワーク (VPC AWS STS) エンドポイントを介した CodeCommit および AWS Security Token Service () へのアクセス
+ 「[IAM](https://docs.aws.amazon.com/iam/?id=docs_gateway)」の基本的な理解
+ [SageMaker AI Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) の基本的な理解
+ [Git](https://git-scm.com/) と [CodeCommit](https://docs.aws.amazon.com/codecommit/index.html) に関する基本的な知識

**制限事項**

このパターンは SageMaker AI Studio Classic にのみ適用され、RStudio on Amazon SageMaker AI には適用されません。

## アーキテクチャ
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-architecture"></a>

**テクノロジースタック**
+ Amazon SageMaker AI
+ Amazon SageMaker AI Studio Classic
+ AWS CodeCommit
+ AWS Identity and Access Management (IAM) 
+ Git

**ターゲットアーキテクチャ**

以下の図は、アカウント A の CodeCommit リポジトリをアカウント B の SageMaker AI Studio Classic に関連付けるアーキテクチャを示したものです。

![\[クロスアカウント関連付けのアーキテクチャ図\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/d40df9eb-6ee2-4cb8-8257-051fa624e52a/images/abb89a66-fc8f-4e72-8f45-f0f44c2ec6ce.png)


この図表は、次のワークフローを示しています:

1. ユーザーはアカウント A の `sts:AssumeRole` ロールを通じてアカウント A の `MyCrossAccountRepositoryContributorRole` ロールを引き受け、アカウント B の SageMaker AI Studio Classic で SageMaker AI 実行ロールを使用します。引き受けたロールには、指定されたリポジトリをクローンして操作するための CodeCommit 権限が含まれています。

1. ユーザーは Git コマンドを SageMaker AI Studio Classic のシステムターミナルから実行します。

**自動化とスケール**

このパターンは、[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/?id=docs_gateway)、[AWS CloudFormation](https://docs.aws.amazon.com/cloudformation/?id=docs_gateway)、[Terraform](https://www.terraform.io/) のいずれかを使用することで自動化できる手動のステップで構成されています。

## ツール
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-tools"></a>

**AWS ツール**
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。
+ [Amazon SageMaker AI Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) は、ウェブベースの機械学習用の統合開発環境 (IDE) です。この IDE を使うと、機械学習モデルを構築、トレーニング、デバッグ、デプロイ、モニタリングできます。
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) は、独自のソースコントロールシステムを管理しなくても、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。

  **注意**: AWS CodeCommit は新規顧客には利用できなくなりました。の既存のお客様は、通常どおりサービスを AWS CodeCommit 引き続き使用できます。[詳細はこちら](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。

**その他のツール**
+ 「[Git](https://git-scm.com/)」は、ソフトウェア開発中のソースコードの変更を追跡するための分散型バージョン管理システムです。

## エピック
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-epics"></a>

### アカウント A で IAM ポリシーと IAM ロールを作成
<a name="create-an-iam-policy-and-iam-role-in-account-a"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Account A でリポジトリアクセスの IAM ポリシーを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html)IAM ポリシーの範囲をユースケースに最低限必要なアクセス権限に制限するのがベストプラクティスです。 | AWS DevOps | 
| Account A でリポジトリアクセスの IAM ロールを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html) | AWS DevOps | 

### アカウント B で IAM インラインポリシーを作成します。
<a name="create-an-iam-inline-policy-in-account-b"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アカウント B の SageMaker ドメインユーザーにアタッチされている実行ロールにインラインポリシーをアタッチします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html) | AWS DevOps | 

### SageMaker AI Studio Classic のリポジトリをアカウント B 用にクローンします。
<a name="clone-the-repository-in-sm-studio-classic-for-account-b"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アカウント B の SageMaker AI Studio Classic でシェルスクリプトを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html) | AWS DevOps | 
| システムターミナルからシェルスクリプトを呼び出します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html)SageMaker AI Studio Classic のクロスアカウントで CodeCommit リポジトリのクローンが作成されました。システムターミナルからすべての Git コマンドを実行できるようになりました。 | AWS DevOps | 

## 追加情報
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-additional"></a>

**IAM ポリシーの例**

この例のポリシーを使用するには、次を行います。
+ をリポジトリ AWS リージョン の `<CodeCommit_Repository_Region>`に置き換えます。
+ アカウント A のアカウント ID で `<Account_A_ID>` を置き換えます。
+ アカウント A の CodeCommit リポジトリの名前に `<CodeCommit_Repository_Name>` 置き換えてください。

```
{
"Version": "2012-10-17",		 	 	 
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "codecommit:BatchGet*",
            "codecommit:Create*",
            "codecommit:DeleteBranch",
            "codecommit:Get*",
            "codecommit:List*",
            "codecommit:Describe*",
            "codecommit:Put*",
            "codecommit:Post*",
            "codecommit:Merge*",
            "codecommit:Test*",
            "codecommit:Update*",
            "codecommit:GitPull",
            "codecommit:GitPush"
        ],
        "Resource": [
            "arn:aws:codecommit:<CodeCommit_Repository_Region>:<Account_A_ID>:<CodeCommit_Repository_Name>"
        ]
    }
]
}
```

**SageMaker AI シェルスクリプトの例**

この例のスクリプトを使用するには、次を行います。
+ アカウント A のアカウント ID で `<Account_A_ID>` を置き換えます。
+ 前に作成した IAM ロールの名前で `<Account_A_Role_Name>` を置き換えます。
+ をリポジトリ AWS リージョン の `<CodeCommit_Repository_Region>`に置き換えます。
+ アカウント A の CodeCommit リポジトリの名前に `<CodeCommit_Repository_Name>` を置き換えてください。

```
#!/usr/bin/env bash
#Launch from system terminal
pip install --quiet git-remote-codecommit

mkdir -p ~/.aws
touch ~/.aws/config

echo "[profile CrossAccountAccessProfile]
region = <CodeCommit_Repository_Region>
credential_source=EcsContainer
role_arn = arn:aws:iam::<Account_A_ID>:role/<Account_A_Role_Name>
output = json" > ~/.aws/config

echo '[credential "https://git-codecommit.<CodeCommit_Repository_Region>.amazonaws.com"]
        helper = !aws codecommit credential-helper $@ --profile CrossAccountAccessProfile
        UseHttpPath = true' > ~/.gitconfig
        
git clone codecommit::<CodeCommit_Repository_Region>://CrossAccountAccessProfile@<CodeCommit_Repository_Name>
```

# Amazon Textract を使用して PDF ファイルからコンテンツを自動的に抽出する
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract"></a>

*Tianxia Jia (Amazon Web Services)*

## 概要
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-summary"></a>

多くの組織は、ビジネスアプリケーションにアップロードされた PDF ファイルから情報を抽出する必要があります。例えば、組織は税務分析や医療請求処理のために、税務または医療用 PDF ファイルから情報を正確に抽出する必要があるかもしれません。

Amazon Web Services (AWS) クラウドでは、Amazon Textract が PDF ファイルから情報 (印刷されたテキスト、フォーム、表など) を自動的に抽出し、元の PDF ファイルからの情報を含む JSON 形式のファイルを生成します。Amazon Textract は、AWS マネジメントコンソールまたは API コールを実装して使用できます。大量の PDF ファイルをスケーリングして自動的に処理するには、[プログラムによる API 呼び出し](https://aws.amazon.com/textract/faqs/)を使用することをお勧めします。

Amazon Textract がファイルを処理すると、ページ、テキストの行と単語、フォーム (キーと値のペア)、テーブルとセル、選択要素の `Block` オブジェクトリストが作成されます。[バウンディングボックス](https://docs.aws.amazon.com/textract/latest/dg/API_BoundingBox.html)、信頼区間、ID、関係など、その他のオブジェクト情報も含まれます。Amazon Textract はコンテンツ情報を文字列として抽出します。データ値はダウンストリームアプリケーションでより簡単に使用できるため、正しく識別され変換されたデータ値が必要です。 

このパターンは、Amazon Textract を使用して PDF ファイルからコンテンツを自動的に抽出し、クリーンな出力に処理するためのステップバイステップのワークフローを示しています。このパターンでは、テンプレートマッチング技術を使用して必要なフィールド、キー名、テーブルを正しく識別し、各データタイプに後処理による修正を適用します。このパターンを使用してさまざまな種類の PDF ファイルを処理し、このワークフローをスケーリングおよび自動化して同じ形式の PDF ファイルを処理できます。  

## 前提条件と制限事項
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ Amazon Textract で処理するために JPEG 形式に変換された PDF ファイルを保存するための既存の Amazon Simple Storage Service (Amazon S3) バケット。S3 バケットの詳細については、Amazon S3 ドキュメントの「[バケットの概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)」を参照してください。
+ `Textract_PostProcessing.ipynb` Jupyter Notebook (添付)、インストール、設定。Jupyter Notebook の詳細については、Amazon SageMaker ドキュメントの「[Jupyter Notebook の作成](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-prepare.html)」を参照してください。
+ 同じ形式の既存の PDF ファイル。
+ Python について理解していること。

**制限**
+ PDF ファイルは高品質で、読みやすいものでなければなりません。ネイティブ PDF ファイルを使用することをお勧めしますが、個々の単語がすべて鮮明であれば、スキャンして PDF 形式に変換した文書も使用できます。詳細については、AWS 機械学習のブログの「[PDF document pre-processing with Amazon Textract: Visuals detection and removal](https://aws.amazon.com/blogs/machine-learning/process-text-and-images-in-pdf-documents-with-amazon-textract/)」を参照してください。
+ 複数ページのファイルの場合は、非同期操作を使用するか、PDF ファイルを 1 ページに分割して同期操作を使用できます。この 2 つのオプションの詳細については、Amazon Textract ドキュメントの「[Detecting and analyzing text in multipage documents](https://docs.aws.amazon.com/textract/latest/dg/async.html)」と「[Detecting and analyzing text in single-page documents](https://docs.aws.amazon.com/textract/latest/dg/sync.html)」を参照してください。

## アーキテクチャ
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-architecture"></a>

このパターンのワークフローは、最初にサンプル PDF ファイルで Amazon Textract を実行し (*初回実行*)、次に最初の PDF と同じ形式の PDF ファイルに対して実行します (*繰り返し実行*)。次の図は、同じ形式の PDF ファイルからコンテンツを自動的かつ繰り返し抽出する、*初回実行*と*繰り返し実行*を組み合わせたワークフローを示しています。

![\[Amazon Textract を使用して PDF ファイルからコンテンツを抽出する\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/2d724523-2cab-42c9-a773-65857014d9ec/images/9e20070f-3e0c-46aa-aa98-a8b1eb3395dc.png)


 

この図は、このパターンの次のワークフローを示しています。

1. PDF ファイルを JPEG 形式に変換し、S3 バケットに保存します。 

1. Amazon Textract API を呼び出し、Amazon Textract レスポンス JSON ファイルを解析します。 

1. JSON ファイルを編集して、各必須フィールドに正しい `KeyName:DataType` ペアを追加します。*繰り返し実行*ステージ用の `TemplateJSON` ファイルを作成します。

1. データタイプ (浮動小数点、整数、日付など) ごとに後処理補正関数を定義します。

1. 最初の PDF ファイルと同じ形式の PDF ファイルを準備します。

1. Amazon抽出API を呼び出し、Amazon Textract レスポンス JSON を解析します。

1. 解析した JSON ファイルを `TemplateJSON` ファイルと照合します。

1. 後処理による修正を実装します。

最終的な JSON 出力ファイルには、必須フィールドごとに正しい `KeyName` および `Value` が含まれています。

**ターゲットテクノロジースタック**
+ Amazon SageMaker 
+ Amazon S3 
+ Amazon Textract

**自動化とスケール**

新しい PDF ファイルが Amazon S3 に追加されたときに Amazon Textract を開始する AWS Lambda 関数を使用することにより、*繰り返し実行*ワークフローを自動化できます。次に Amazon Textract が処理スクリプトを実行し、最終出力を保存場所に保存できます。詳細については、Lambda ドキュメントの [Amazon S3 トリガーを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)を参照してください。

## ツール
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-tools"></a>
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) は、ML モデルを迅速かつ簡単に構築およびトレーニングし、本番環境に対応したホスト環境に直接デプロイするのに役立つフルマネージド ML サービスです。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [Amazon Textract](https://docs.aws.amazon.com/textract/latest/dg/what-is.html) を使用すると、ドキュメントテキストの検出と分析をアプリケーションに簡単に追加できます。

## エピック
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-epics"></a>

### 初回の実行
<a name="first-time-run"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| PDF ファイルを変換します。 | PDF ファイルを 1 ページに分割し、Amazon Textract [同期オペレーション](https://docs.aws.amazon.com/textract/latest/dg/sync.html) (`Syn API`) 用に JPEG 形式に変換して、初回実行に備えて準備します。Amazon Textract [非同期オペレーション](https://docs.aws.amazon.com/textract/latest/dg/async.html) (`Asyn API`) は、複数ページの PDF ファイルにも使用できます。 | データサイエンティスト/デベロッパー | 
| Amazon Textract レスポンス JSON を解析します。 | `Textract_PostProcessing.ipynb` Jupyter Notebook (添付ファイル) を開き、次のコードを使用して Amazon Textract API を呼び出します。<pre>response = textract.analyze_document(<br />Document={<br />        'S3Object': {<br />            'Bucket': BUCKET,<br />            'Name': '{}'.format(filename)<br />                    }<br />                },<br />        FeatureTypes=["TABLES", "FORMS"])</pre>次のコードを使用して、応答 JSON を解析してフォームとテーブルにします。<pre>parseformKV=form_kv_from_JSON(response)<br />parseformTables=get_tables_fromJSON(response)</pre> | データサイエンティスト/デベロッパー | 
| TemplateJSON ファイルを編集します。 | 各 `KeyName` および対応する `DataType` (文字列、浮動小数点数、整数、日付など)、およびテーブルヘッダー (`ColumnNames` および `RowNames` など) の解析された JSON を編集します。このテンプレートは個々の PDF ファイルタイプに使用されるため、同じ形式の PDF ファイルでもテンプレートを再利用できます。 | データサイエンティスト/デベロッパー | 
| 後処理補正関数を定義します。 | `TemplateJSON` ファイルに対する Amazon Textract のレスポンス内の値は文字列です。日付、浮動小数点数、整数、通貨には区別がありません。これらの値は、ダウンストリームのユースケースに適したデータ型に変換する必要があります。 次のコードを使用して、`TemplateJSON` ファイルに従って各データ型を修正します。<pre>finalJSON=postprocessingCorrection(parsedJSON,templateJSON)</pre> | データサイエンティスト/デベロッパー | 

### 繰り返し実行
<a name="repeat-run"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| PDF ファイルを準備します。 | PDF ファイルを 1 ページに分割し、Amazon Textract [同期オペレーション](https://docs.aws.amazon.com/textract/latest/dg/sync.html) (`Syn API`) 用に JPEG 形式に変換して準備します。Amazon Textract [非同期オペレーション](https://docs.aws.amazon.com/textract/latest/dg/async.html) (`Asyn API`) は、複数ページの PDF ファイルにも使用できます。 | データサイエンティスト/デベロッパー | 
| Amazon Textract API を呼び出す | 以下のコードを使用して Amazon Textract API を呼び出します。<pre>response = textract.analyze_document(<br />        Document={<br />        'S3Object': {<br />            'Bucket': BUCKET,<br />            'Name': '{}'.format(filename)<br />                    }<br />                },<br />        FeatureTypes=["TABLES", "FORMS"])</pre> | データサイエンティスト/デベロッパー | 
| Amazon Textract レスポンス JSON を解析します。 | 次のコードを使用して、応答 JSON を解析してフォームとテーブルにします。<pre>parseformKV=form_kv_from_JSON(response)<br />parseformTables=get_tables_fromJSON(response)</pre> | データサイエンティスト/デベロッパー | 
| TemplateJSON ファイルをロードし、解析された JSON と照合します。 | `TemplateJSON` ファイルを使用して、以下のコマンドを使用して正しいキーと値のペアとテーブルを抽出します。<pre>form_kv_corrected=form_kv_correction(parseformKV,templateJSON)<br />form_table_corrected=form_Table_correction(parseformTables, templateJSON)<br />form_kv_table_corrected_final={**form_kv_corrected , **form_table_corrected}</pre> | データサイエンティスト/デベロッパー | 
| 後処理修正。 | 次のコードを使用して、`TemplateJSON` ファイルと後処理関数で `DataType` を使用してデータを修正します。 <pre>finalJSON=postprocessingCorrection(form_kv_table_corrected_final,templateJSON)</pre> | データサイエンティスト/デベロッパー | 

## 関連リソース
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-resources"></a>
+ [Automatically extract text and structured data from documents with Amazon Textract](https://aws.amazon.com/blogs/machine-learning/automatically-extract-text-and-structured-data-from-documents-with-amazon-textract/)
+ [Extract text and structured data with Amazon Textract](https://aws.amazon.com/getting-started/hands-on/extract-text-with-amazon-textract/)
+ [Amazon Textract resources](https://aws.amazon.com/textract/resources/?blog-posts-cards.sort-by=item.additionalFields.createdDate&blog-posts-cards.sort-order=desc)

## アタッチメント
<a name="attachments-2d724523-2cab-42c9-a773-65857014d9ec"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/2d724523-2cab-42c9-a773-65857014d9ec/attachments/attachment.zip)」

# Amazon SageMaker AI Studio Lab で時系列に DeepAR を使用してコールドスタート予測モデルを構築する
<a name="build-a-cold-start-forecasting-model-by-using-deepar"></a>

*Ivan Cui、Eyal Shacham (Amazon Web Services)*

## 概要
<a name="build-a-cold-start-forecasting-model-by-using-deepar-summary"></a>

ウェブトラフィックにより効率的にリソースを割り当てる場合でも、スタッフのニーズに対する患者の需要を予測する場合でも、会社の製品の売上を予測する場合でも、予測は不可欠なツールです。コールドスタート予測は、小売市場に入ったばかりの新製品など、履歴データが少ない時系列の予測を構築します。このパターンでは、Amazon SageMaker AI DeepAR 予測アルゴリズムを使用してコールドスタート予測モデルをトレーニングし、コールドスタート項目に対して予測を実行する方法を示します。

 

[DeepAR](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html) は、リカレントニューラルネットワーク (RNN) を使用してスカラー (1 次元) 時系列を予測する教師あり学習アルゴリズムです。DeepAR は、関連製品のすべての時系列にわたって単一のモデルを共同でトレーニングするアプローチを採用します。

自己回帰積分移動平均 (ARIMA) や指数平滑法 (ETS) などの従来の時系列予測方法は、個々の製品の過去の時系列に大きく依存します。したがって、これらの方法はコールドスタート予測には効果的ではありません。データセットに何百もの関連する時系列データが含まれている場合、DeepAR は標準の ARIMA や ETS メソッドよりも優れています。トレーニングしたモデルを使用して、トレーニングした時系列と似た新しい時系列の予測を生成することもできます。

## 前提条件と制限
<a name="build-a-cold-start-forecasting-model-by-using-deepar-prereqs"></a>

**前提条件**
+ アクティブ AWS アカウント。
+ Amazon SageMaker AI [ドメイン。](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html)
+ [Amazon SageMaker AI Studio Lab](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lab.html) または Jupiter ラボアプリケーション。
+ 読み取りおよび書き込みのアクセス許可を持つ Amazon Simple Storage Service (Amazon S3) バケット。
+ Python でのプログラミングに関する知識。
+ Jupyter Notebook の使用に関する知識。

**制限事項**
+ 履歴データポイントなしで予測モデルを呼び出すと、エラーが返されます。最小限の履歴データポイントでモデルを呼び出すと、信頼度の高い不正確な予測が返されます。このパターンは、コールドスタート予測のこれらの既知の制限を解決するためのアプローチを提案します。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては「[AWS サービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択します。

**製品バージョン**
+ Python バージョン 3.10 以降。
+ このパターンのノートブックは、Python 3 (Data Science) カーネルを搭載した ml.t3.medium インスタンスを使用して Amazon SageMaker AI Studio でテストされました。

## アーキテクチャ
<a name="build-a-cold-start-forecasting-model-by-using-deepar-architecture"></a>

次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

![\[SageMaker と Amazon S3 を使用してコールドスタート予測モデルを構築するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/98d021d3-96d2-40a9-b0ce-717934652173/images/d97d66a0-8eef-4d30-ac5f-4c6c79cf6c9f.png)


ワークフローは、次のタスクを実行します。

1. トレーニングデータとテストデータの入力ファイルは合成され、Amazon S3 バケットにアップロードされます。このデータには、カテゴリ特徴量と動的特徴量を含む複数の時系列と、ターゲット値 (予測対象) が含まれます。Jupyter Notebook は、トレーニングデータの要件と予想される予測値をよりよく理解するためにデータを視覚化します。

1. ハイパーパラメータチューナージョブが、モデルをトレーニングし、事前定義されたメトリクスに基づいて最適なモデルを見つけるために作成されます。

1. 入力ファイルは、Amazon S3 バケットからハイパーパラメータ調整ジョブの各インスタンスにダウンロードされます。

1. チューナーの事前定義されたしきい値に基づいてチューナージョブが最適なモデルを選択すると、モデルは SageMaker AI エンドポイントとしてデプロイされます。

1. その後、デプロイされたモデルを呼び出す準備が整い、そこで予測がテストデータに対して検証されます。

このノートブックは、十分な数の履歴データポイントが利用可能な場合に、モデルがターゲット値をどの程度うまく予測できるかを示しています。ただし、履歴データポイント (コールドプロダクトを表す) が少ないモデルを呼び出すと、モデルの予測は、モデルの信頼レベル内であっても元のテストデータと一致しません。このパターンでは、新しいモデルがコールドプロダクト用に構築され、最初のコンテキストの長さ (予測ポイント) が使用可能な履歴ポイントの量として定義され、新しいモデルが新しいデータポイントが取得されると繰り返しトレーニングされます。ノートブックは、履歴データポイントの量がコンテキストの長さに近い限り、モデルが正確な予測を持つことを示しています。

## ツール
<a name="build-a-cold-start-forecasting-model-by-using-deepar-tools"></a>

**AWS のサービス**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。
+ [Amazon SageMaker AI Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) は、ML モデルの構築、トレーニング、デバッグ、デプロイ、モニタリングを可能にする、ウェブベースの ML 用統合開発環境 (IDE) です。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ 「[Python](https://www.python.org/)」は汎用のコンピュータープログラミング言語です。

**コードリポジトリ**

このパターンのコードは、GitHub 内の「[DeepAR-ColdProduct-Pattern](https://github.com/aws-samples/DeepAR-ColdProduct-Pattern)」リポジトリで利用できます。

## ベストプラクティス
<a name="build-a-cold-start-forecasting-model-by-using-deepar-best-practices"></a>
+ 仮想環境でモデルをトレーニングし、再現性を最大限に高めるために常にバージョン管理を行います。
+ 最高の予測モデルを得るため、高品質のカテゴリ特徴量をできるだけ多く含めます。
+ モデルがコールドスタートプロダクトの予測を適切に推測できるように、メタデータに同様のカテゴリ項目が含まれていることを確認してください。
+ ハイパーパラメータ調整ジョブを実行し、最高の予測モデルを取得します。
+ このパターンでは、構築するモデルのコンテキストの長さは 24 時間です。つまり、今後 24 時間が予測されます。履歴データが 24 時間未満の場合に今後の 24 時間を予測すると、モデルの予測精度は履歴データポイントの量に基づいて直線的に低下します。この問題を軽減するには、この数が目的の予測 (コンテキスト) の長さに達するまで、履歴データポイントのセットごとに新しいモデルを作成します。例えば、2 時間のコンテキスト長モデルから始めて、モデルを 4 時間、8 時間、16 時間、24 時間と徐々に増やします。

## エピック
<a name="build-a-cold-start-forecasting-model-by-using-deepar-epics"></a>

### SageMaker AI Studio Classic アプリケーションを開始する
<a name="start-your-sm-studio-classic-application"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ノートブック環境を起動します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html)詳細については、SageMaker AI ドキュメントの「[Launch Amazon SageMaker AI Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)」を参照してください。 | データサイエンティスト | 

### ノートブックを作成してアクティブ化する
<a name="create-and-activate-the-notebook"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| モデルトレーニング用の仮想環境を設定します。 | モデルトレーニング用に仮想環境を設定するには、次を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html)詳細については、SageMaker AI ドキュメントの「[Upload Files to SageMaker AI Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-tasks-files.html)」を参照してください。 | データサイエンティスト | 
| 予測モデルを作成して検証します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html) | データサイエンティスト | 

## 関連リソース
<a name="build-a-cold-start-forecasting-model-by-using-deepar-resources"></a>
+ [DeepAR ハイパーパラメータ](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar_hyperparameters.html)
+ [AWS 機械学習サービスを使用した新製品導入の需要の予測](https://docs.aws.amazon.com/prescriptive-guidance/latest/forecast-demand-new-product/introduction.html)
+ [Amazon SageMaker AI Studio Classic を起動する](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)
+ [SageMaker AI DeepAR 予測アルゴリズムを使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html)

# Amazon SageMaker AI と Azure DevOps を使用して MLOps ワークフローを構築する
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops"></a>

*Deepika Kumar、Sara van de Moosdijk、Philips Kokoh Prasetyo (Amazon Web Services)*

## 概要
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-summary"></a>

機械学習オペレーション (MLOps) は、機械学習 (ML) ワークフローとデプロイを自動化および簡素化する一連のプラクティスです。MLOps は、ML ライフサイクルの自動化に焦点を当てたものです。これにより、モデルを開発するだけでなく、体系的かつ反復的にデプロイ、モニタリング、再トレーニングできるようになります。MLOps は DevOps の原則を ML に適用することで、ML モデルのデプロイを高速化し、時間の経過とともに精度を向上させ、真のビジネス価値の確実な提供を支援します。

多くの場合、組織には MLOps ジャーニーを開始する前に既に、DevOps ツールとデータストレージソリューションがあります。このパターンは、Microsoft Azure と の両方の強みを活用する方法を示しています AWS。こうした環境では、Azure DevOps と Amazon SageMaker AI を容易に統合して、MLOps ワークフローを作成できます。

このソリューションは、Azure と 間の作業を簡素化します AWS。Azure は、開発および機械学習 AWS に使用できます。これにより、データ処理、トレーニング、 AWSへのデプロイなど、機械学習モデルを最初から最後まで作成するための効果的なプロセスを促進できます。効率性を高めるには、このようなプロセスの管理に Azure DevOps パイプラインを使用します。このソリューションは、ファインチューニング、ベクトルデータベース、プロンプト管理を含む、生成 AI の基盤モデルオペレーション (FMOps) と大規模言語モデルオペレーション (LLMOps) に適用されます。

## 前提条件と制限事項
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-prereqs"></a>

**前提条件**
+ **Azure サブスクリプション** – 継続的インテグレーションおよび継続的デプロイ (CI/CD) パイプラインを設定するための Azure サービス (Azure DevOps など) へのアクセス。
+ **アクティブな AWS アカウント** – このパターン AWS のサービス で使用される を使用するためのアクセス許可。
+ **データ** – 機械学習モデルをトレーニングするための履歴データへのアクセス。
+ **ML の概念に関する知識** — Python、Jupyter Notebooks、機械学習モデル開発について理解している必要があります。
+ **セキュリティ設定** – Azure と AWS の両方でロール、ポリシー、アクセス許可を適切に設定し、安全なデータ転送とアクセスを確保しておきます。
+ **(オプション) ベクトルデータベース** – ベクトルデータベースに検索拡張生成 (RAG) アプローチとサードパーティーサービスを使用している場合は、外部ベクトルデータベースへのアクセスが必要です。

**制限事項**
+ このガイダンスでは、安全なクラウド間データ転送については説明していません。クラウド間のデータ転送の詳細については、「[ハイブリッドおよびマルチクラウド向けのAWS ソリューション](https://aws.amazon.com/hybrid-multicloud/)」を参照してください。
+ マルチクラウドソリューションでは、リアルタイムデータ処理とモデル推論のレイテンシーが増大する可能性があります。
+ このガイダンスは、マルチアカウント MLOps アーキテクチャの一例を示すものであり、調整は、機械学習と AWS 戦略に基づいて必要です。
+ このガイダンスでは、Amazon SageMaker AI 以外の AI/ML サービスの使用については説明していません。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS のサービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」ページを参照して、サービスのリンクを選択します。

## アーキテクチャ
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-architecture"></a>

**ターゲットアーキテクチャ**

ターゲットアーキテクチャは、Azure DevOps を Amazon SageMaker AI と統合し、クロスクラウド ML ワークフローを作成します。ここでは、CI/CD プロセスには Azure が使用され、ML モデルのトレーニングとデプロイには SageMaker AI が使用されます。これは、モデルの構築とデプロイを通じて (Amazon S3、Snowflake、Azure Data Lake などのソースから) データを取得するプロセスの概要を表しています。主なコンポーネントには、モデルの構築とデプロイ、データ準備、インフラストラクチャ管理のための CI/CD パイプライン、ML モデルのトレーニングとファインチューニング、評価、デプロイのための Amazon SageMaker AI などがあります。このアーキテクチャは、効率的で自動化されたスケーラブルな ML ワークフローを、クラウドプラットフォーム全体で提供するように設計されています。

![\[Azure DevOps と SageMaker を使用する MLOps ワークフローのアーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/95fdf414-e561-4a93-9628-b41db39a577e/images/84ddcc36-54ef-473e-875f-154fae18cb13.png)


このアーキテクチャは、次のコンポーネントで構成されます。

1. データサイエンティストは、開発アカウントで ML 実験を実行し、さまざまなデータソースを使用して ML ユースケースの数とおりのアプローチを検討します。ユニットテストとトライアルを実行し、[Amazon SageMaker AI with MLflow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html) を使用して実験を追跡できます。生成 AI モデル開発では、データサイエンティストは Amazon SageMaker AI JumpStart モデルハブから基盤モデルをファインチューニングします。データサイエンティストはモデル評価の後、Azure DevOps でホストされているモデル構築リポジトリにコードをプッシュしてマージします。このリポジトリには、複数ステップのモデル構築パイプラインのコードが含まれています。

1. Azure DevOps では、コードがメインブランチにマージされた時点で、継続的インテグレーション (CI) を提供するモデル構築パイプラインを自動または手動でアクティブ化できます。オートメーションアカウントでは、これにより、データ前処理、モデルトレーニングとファインチューニング、モデル評価、精度に基づく条件付きモデル登録のための SageMaker AI パイプラインがアクティブ化されます。

1. オートメーションアカウントは、ML 環境 (Amazon ECR)、モデル (Amazon S3)、モデルメタデータ (SageMaker AI モデルレジストリ)、機能 (SageMaker AI Feature Store)、自動パイプライン (SageMaker AI パイプライン)、ML ログインサイト (CloudWatch) をホストする ML プラットフォーム全体の中央アカウントです。生成 AI ワークロードの場合、ダウンストリームアプリケーションのプロンプトに対して追加の評価が必要になる場合があります。プロンプト管理アプリケーションは、このプロセスの合理化と自動化に役立ちます。このアカウントを使用すると、ML アセットの再利用が可能になり、ベストプラクティスを適用して ML ユースケースの配信を高速化できます。

1. レビューのため、最新のモデルバージョンが SageMaker AI モデルレジストリに追加されました。これにより、各モデルバージョンとそれぞれのアーティファクト (リネージュとメタデータ) が追跡されます。また、モデルのステータス (承認、拒否、または保留中)、およびダウンストリームデプロイのバージョンも管理されます。

1. モデルレジストリのトレーニング済みモデルがスタジオインターフェイスまたは API コールを通じて承認されると、イベントを Amazon EventBridge にディスパッチできます。EventBridge は Azure DevOps でモデルデプロイパイプラインを開始します。

1. 継続的デプロイ (CD) を提供するモデルデプロイパイプラインは、モデルデプロイリポジトリからソースをチェックアウトします。ソースには、コード、モデルデプロイの設定、品質ベンチマークのテストスクリプトが含まれています。モデルデプロイパイプラインは、推論タイプに合わせて調整できます。

1. モデルデプロイパイプラインは品質管理チェック後、モデルをステージングアカウントにデプロイします。ステージングアカウントは本番稼働用アカウントのコピーであり、統合のテストと評価に使用されます。バッチ変換の場合、モデルデプロイパイプラインはバッチ推論プロセスを自動的に更新して、承認された最新のモデルバージョンを使用できます。リアルタイム、サーバーレス、または非同期の推論では、それぞれのモデルエンドポイントが個別に設定または更新されます。

1. ステージングアカウントでのテストに成功した場合は、モデルデプロイパイプラインを通じて手動で承認することで、モデルを本番稼働用アカウントにデプロイできます。このパイプラインは、モデルモニタリングやデータフィードバックメカニズムなど、**本番環境へのデプロイ**ステップで本番環境エンドポイントをプロビジョニングします。

1. モデルが本番環境になった後は、SageMaker AI Model Monitor や SageMaker AI Clarify などのツールを使用してバイアスを特定し、ドリフトを検出し、モデルのパフォーマンスを継続的にモニタリングします。

**自動化とスケール**

Infrastructure as Code (IaC) を使用して、複数のアカウントと環境に自動デプロイします。MLOps ワークフローの設定プロセスを自動化することで、さまざまなプロジェクトに取り組む ML チームが使用する環境を分離できます。 は、インフラストラクチャをコードとして扱うことで、 AWS リソースのモデル化、プロビジョニング、管理[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)を支援します。

## ツール
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-tools"></a>

**AWS のサービス**
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) は、ML モデルを構築およびトレーニングし、これらの ML モデルを、稼働準備の整ったホストされている環境にデプロイするのに役立つマネージド型 ML サービスです。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は、フルマネージド型の ETL (抽出、変換、ロード) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。このパターンでは、Amazon S3 はデータストレージに使用され、モデルトレーニングとモデルオブジェクト用の SageMaker AI と統合されています。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。このパターンでは、Lambda はデータの前処理タスクと後処理タスクに使用されます。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。このパターンでは、SageMaker AI がトレーニングおよびデプロイ環境として使用する Docker コンテナが保存されます。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。このパターンでは、自動モデル再トレーニングまたはデプロイを開始するイベント駆動型または時間ベースのワークフローが、EventBridge によってオーケストレーションされます。
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) は、任意のスケールで REST、HTTP、WebSocket API を作成、公開、維持、監視、保護する上で役立ちます。 このパターンでは、SageMaker AI エンドポイントの外部向け単一エントリポイントを作成するためにこのツールが使用されます。
+ RAG アプリケーションの場合、[Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) や [Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) AWS のサービスなどの を使用して、LLM に内部データを提供するベクトル埋め込みを保存できます。

**その他のツール**
+ [Azure DevOps](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops) は、CI/CD パイプラインの管理を支援し、コードの構築、テスト、デプロイを容易にします。
+ [Azure Data Lake Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction) または [Snowflake](https://docs.snowflake.com/en/) は、ML モデルのトレーニングデータのサードパーティーソースとして使用できる可能性があります。
+ [Pinecone](https://docs.pinecone.io/home)、[Milvus](https://milvus.io/docs/overview.md)、または [ChromaDB](https://docs.trychroma.com/) は、ベクトル埋め込みを保存するためのサードパーティーのベクトルデータベースとして使用できる可能性があります。

## ベストプラクティス
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-best-practices"></a>

このマルチクラウド MLOps ワークフローのコンポーネントを実装する前に、次のアクティビティを完了してください。
+ 機械学習ワークフローとそのサポートに必要な各ツールを定義して理解します。ユースケースごとに異なるワークフローとコンポーネントが必要となります。例えば、特徴量ストアは、パーソナライゼーションのユースケースでは特徴量の再利用と低レイテンシーの推論に必要となる場合がありますが、他のユースケースでは不要となる可能性があります。アーキテクチャを適切にカスタマイズするには、ターゲットワークフローやユースケースの要件、およびデータサイエンスチームにとって望ましいコラボレーション方法を理解する必要があります。
+ アーキテクチャの各コンポーネントの責任を明確に分離します。Azure Data Lake Storage、Snowflake、Amazon S3 にデータストレージを分散すると、複雑さとコストが増大する可能性があります。可能であれば、一貫性のあるストレージメカニズムを選択します。同様に、Azure と AWS DevOps サービスの組み合わせ、または Azure と AWS ML サービスの組み合わせを使用しないでください。
+ MLOps ワークフローをエンドツーエンドでテストするには、既存のモデルとデータセットを 1 つ以上選択します。テストアーティファクトには、プラットフォームが本番環境に入った場合にデータサイエンスチームが開発する実際のユースケースを反映させる必要があります。

## エピック
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-epics"></a>

### MLOps アーキテクチャの設計
<a name="design-your-mlops-architecture"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| データソースの識別 | 現在および将来のユースケース、利用可能なデータソース、データの種類 (機密データなど) に基づき、MLOps プラットフォームと統合する必要があるデータソースを文書化します。データは、Amazon S3、Azure Data Lake Storage、Snowflake、またはその他のソースに保存できます。生成 AI ワークロードの場合、生成されたレスポンスを根拠とするナレッジベースがデータに含まれる場合もあります。このデータは、ベクトルデータベースにベクトル埋め込みとして保存されます。これらのソースをプラットフォームと統合し、正しいリソースへのアクセスを保護するための計画を作成してください。 | データエンジニア、データサイエンティスト、クラウドアーキテクト | 
| 該当するサービスを選択します。 | データサイエンスチームにとって望ましいワークフロー、該当するデータソース、既存のクラウドアーキテクチャに基づいてサービスを追加または削除して、アーキテクチャをカスタマイズします。たとえば、データエンジニアやデータサイエンティストは、SageMaker AI AWS Glue、または Amazon EMR でデータ前処理と特徴量エンジニアリングを実行できます。3 つのサービスすべてが必要になる可能性はほとんどありません。 | AWS 管理者、データエンジニア、データサイエンティスト、ML エンジニア | 
| セキュリティ要件を分析します。 | セキュリティ要件を収集して文書化します。この一環として、以下を決定します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.html)生成 AI ワークロードの保護の詳細については、[「生成 AI の保護: 生成 AI セキュリティスコープマトリックスの概要](https://aws.amazon.com/blogs/security/securing-generative-ai-an-introduction-to-the-generative-ai-security-scoping-matrix/)」(AWS ブログ記事) を参照してください。 | AWS 管理者、クラウドアーキテクト | 

### セットアップ AWS Organizations
<a name="set-up-aolong"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| セットアップします AWS Organizations。 | ルート AWS Organizations で をセットアップします AWS アカウント。こうすると、マルチアカウント MLOps 戦略の一部として作成する後続アカウントを管理しやすくなります。詳細については、[AWS Organizations のドキュメント](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)を参照してください。 | AWS 管理者 | 

### 開発環境とバージョニングの設定
<a name="set-up-the-development-environment-and-versioning"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS 開発アカウントを作成します。 | データエンジニアとデータサイエンティスト AWS アカウント が ML モデルを試して作成するためのアクセス許可を持つ を作成します。手順については、 AWS Organizations ドキュメントの[「組織内のメンバーアカウントの作成](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html)」を参照してください。 | AWS 管理者 | 
| モデル構築リポジトリを作成します。 | データサイエンティストが実験フェーズの完了後にモデル構築とデプロイのコードをプッシュするための、Git リポジトリを Azure に作成します。手順については、Azure DevOps ドキュメントの「[Git リポジトリを設定する](https://learn.microsoft.com/en-us/devops/develop/git/set-up-a-git-repository)」を参照してください。 | DevOps エンジニア、ML エンジニア | 
| モデルデプロイリポジトリを作成します。 | 標準のデプロイコードとテンプレートを保存する Git リポジトリを Azure に作成します。設計フェーズで特定したように、組織が使用するすべてのデプロイオプションのコードを含める必要があります。例えば、リアルタイムエンドポイント、非同期エンドポイント、サーバーレス推論、またはバッチ変換を含める必要があります。手順については、Azure DevOps ドキュメントの「[Git リポジトリを設定する](https://learn.microsoft.com/en-us/devops/develop/git/set-up-a-git-repository)」を参照してください。 | DevOps エンジニア、ML エンジニア | 
| Amazon ECR リポジトリを作成します。 | 承認された ML 環境を Docker イメージとして保存する Amazon ECR リポジトリを設定します。データサイエンティストと ML エンジニアが新しい環境を定義できるようにします。手順については、Amazon ECR ドキュメントの「[プライベートリポジトリの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)」を参照してください。 | ML エンジニア | 
| SageMaker AI Studio を設定します。 | 以前に定義したセキュリティ要件、必要なデータサイエンスツール (MLflow など)、必要な統合開発環境 (IDE) に従って、開発アカウントに SageMaker AI Studio を設定します。ライフサイクル設定を使用して主要機能のインストールを自動化し、データサイエンティストのための統一された開発環境を作成します。詳細については、SageMaker AI ドキュメントの「[Amazon SageMaker AI Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html)」と「[MLflow トラッキングサーバー](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html)」を参照してください。 | データサイエンティスト、ML エンジニア、プロンプトエンジニア | 

### CI/CD パイプラインの統合
<a name="integrate-ci-cd-pipelines"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| オートメーションアカウントを作成します。 | 自動パイプラインとジョブ AWS アカウント が実行される を作成します。データサイエンスチームに、このアカウントへの読み取りアクセス権を付与できます。手順については、 AWS Organizations ドキュメントの[「組織内のメンバーアカウントの作成](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html)」を参照してください。 | AWS 管理者 | 
| モデルレジストリの設定 | オートメーションアカウントで SageMaker AI モデルレジストリを設定します。このレジストリは ML モデルのメタデータを保存します。また、特定のデータサイエンティストやチームリーダーがモデルを承認または拒否するのに役立ちます。詳細については、SageMaker AI ドキュメントの「[モデルレジストリを使用したモデルの登録とデプロイ](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)」を参照してください。 | ML エンジニア | 
| モデル構築パイプラインを作成します。 | コードがモデル構築リポジトリにプッシュされたときに手動または自動で開始される CI/CD パイプラインを Azure に作成します。このパイプラインは、ソースコードをチェックアウトし、オートメーションアカウントで SageMaker AI パイプラインを作成または更新する必要があります。さらに、モデルレジストリに新しいモデルを追加する必要があります。パイプラインの作成に関する詳細については、[Azure パイプラインについての各ドキュメント](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines)を参照してください。 | DevOps エンジニア、ML エンジニア | 

### デプロイスタックの構築
<a name="build-the-deployment-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS ステージングアカウントとデプロイアカウントを作成します。 | ML モデルのステージングとデプロイ AWS アカウント 用に を作成します。本番環境への移行前にステージング中のモデルを正確にテストできるようにするためには、これらのアカウントは同一である必要があります。データサイエンスチームに、ステージングアカウントへの読み取りアクセス権を付与できます。手順については、 AWS Organizations ドキュメントの[「組織内のメンバーアカウントの作成](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html)」を参照してください。 | AWS 管理者 | 
| モデルモニタリング用 S3 バケットを設定します。 | モデルデプロイパイプラインによって作成されたデプロイ済みモデルのモデルモニタリングを有効にする場合は、このステップを完了します。入出力データを保存するための Amazon S3 バケットを作成します。S3 バケットの作成の詳細については、Amazon S3 ドキュメントの「[汎用バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。自動モデルモニタリングジョブがオートメーションアカウントで実行されるように、クロスアカウントアクセス許可を設定します。詳細については、SageMaker AI ドキュメントの「[データとモデルの品質を監視する](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html)」を参照してください。 | ML エンジニア | 
| モデルデプロイパイプラインを作成します。 | モデルがモデルレジストリで承認されたときに開始される CI/CD パイプラインを Azure に作成します。パイプラインは、ソースコードとモデルアーティファクトをチェックアウトし、ステージングアカウントと本番稼働用アカウントにモデルをデプロイするためのインフラストラクチャテンプレートを構築し、ステージングアカウントにモデルをデプロイし、自動テストを実行し、手動承認を待機し、承認されたモデルを本番稼働用アカウントにデプロイする必要があります。パイプラインの作成に関する詳細については、[Azure パイプラインについての各ドキュメント](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines)を参照してください。 | DevOps エンジニア、ML エンジニア | 

### (オプション) ML 環境インフラストラクチャの自動化
<a name="optional-automate-ml-environment-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ビルドテンプレート AWS CDK または CloudFormation テンプレート。 | 自動的にデプロイする必要があるすべての環境の AWS Cloud Development Kit (AWS CDK) または AWS CloudFormation テンプレートを定義します。これには、開発環境、オートメーション環境、ステージングおよびデプロイ環境が含まれる場合があります。詳細については、[AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html) および [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) についての各ドキュメントを参照してください。 | AWS DevOps | 
| インフラストラクチャパイプラインを作成します。 | インフラストラクチャデプロイ用の CI/CD パイプラインを Azure に作成します。管理者は、このパイプラインを開始して新しい を作成し AWS アカウント 、ML チームが必要とする環境を設定できます。 | DevOps エンジニア | 

## トラブルシューティング
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| **モニタリングとドリフトの検出が不十分 **– モニタリングが不十分だと、モデルのパフォーマンスの問題やデータドリフトが検出されない可能性があります。 | Amazon CloudWatch、SageMaker AI Model Monitor、SageMaker AI Clarify などのツールを使用して、モニタリングフレームワークを強化してください。また、特定された問題に対してすぐにアクションを実行するためのアラートを設定します。 | 
| **CI パイプラインのトリガーエラー** –** **設定ミスが原因となり、コードマージ時に Azure DevOps の CI パイプラインがトリガーされない場合があります。 | Azure DevOps プロジェクト設定をチェックして、ウェブフックが正しく設定され、正しい SageMaker AI エンドポイントを指していることを確認します。 | 
| **ガバナンス **–** **中央オートメーションアカウントが、すべての ML プラットフォームにベストプラクティスを適用しないことで、ワークフローの一貫性が損なわれる場合があります。 | オートメーションアカウントの設定を監査し、すべての ML 環境とモデルが定義済みのベストプラクティスとポリシーに準拠していることを確認します。 | 
| **モデルレジストリの承認の遅延** – この事象は、ユーザーがモデルの確認に時間がかかったか、技術的な問題が原因で、モデルのチェックと承認が遅れた場合に発生します。 | 承認保留中のモデルをステークホルダーに警告する通知システムを実装し、レビュープロセスを合理化します。 | 
| **モデルデプロイイベントの失敗** –** **モデルデプロイパイプラインを開始するためにディスパッチされたイベントが失敗し、デプロイの遅延が発生する場合があります。 | Amazon EventBridge に、Azure DevOps パイプラインを正常に呼び出すための適切なアクセス許可とイベントパターンが設定されていることを確認します。 | 
| **本番稼働用デプロイのボトルネック **–** **手動の承認プロセスでボトルネックが発生し、モデルの本番稼働用デプロイが遅れる場合があります。 | モデルデプロイパイプライン内の承認ワークフローを最適化し、タイムリーなレビューと明確なコミュニケーションチャネルを促進します。 | 

## 関連リソース
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-resources"></a>

**AWS ドキュメント**
+ [Amazon SageMaker AI ドキュメント](https://docs.aws.amazon.com/sagemaker/)
+ [Machine Learningレンズ](https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/machine-learning-lens.html) (AWS Well Architected Framework)
+ [MLOps を成功させるための計画](https://docs.aws.amazon.com/prescriptive-guidance/latest/ml-operations-planning/welcome.html) (AWS 規範ガイダンス)

**その他の AWS リソース**
+ [Amazon SageMaker AI を使用する企業の MLOps 基盤ロードマップ Amazon SageMaker ](https://aws.amazon.com/blogs/machine-learning/mlops-foundation-roadmap-for-enterprises-with-amazon-sagemaker/) (AWS ブログ記事)
+ [AWS Summit ANZ 2022 - アーキテクト向けのEnd-to-endの MLOps ](https://www.youtube.com/watch?v=UnAN35gu3Rw) (YouTube 動画)
+ [FMOps/LLMOps: 生成 AI と MLOps との違いを運用する](https://aws.amazon.com/blogs/machine-learning/fmops-llmops-operationalize-generative-ai-and-differences-with-mlops/) (AWS ブログ記事)
+ [Amazon SageMaker AI Clarify と MLOps サービスを使用して LLM 評価を大規模に運用する](https://aws.amazon.com/blogs/machine-learning/operationalize-llm-evaluation-at-scale-using-amazon-sagemaker-clarify-and-mlops-services/) (AWS ブログ記事)
+ [生成 AI アプリケーションにおけるベクトルデータベースの役割](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/) (AWS ブログ記事)

**Azure ドキュメント**
+ [Azure DevOps ドキュメント](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops)
+ [Azure Pipelines ドキュメント](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines)

# を使用して Amazon Bedrock でモデル呼び出しログ記録を設定する AWS CloudFormation
<a name="configure-bedrock-invocation-logging-cloudformation"></a>

*Amazon Web Services、Vikramaditya Bhatnagar*

## 概要
<a name="configure-bedrock-invocation-logging-cloudformation-summary"></a>

Amazon Bedrock を設定することで、 AWS アカウント内のすべてのモデル呼び出しに対する呼び出しログ、モデル入力データ、モデル出力データを収集できます。これは、Amazon Bedrock を使用して堅牢な生成 AI アプリケーションを構築するための[ベストプラクティス](https://aws.amazon.com/blogs/machine-learning/best-practices-for-building-robust-generative-ai-applications-with-amazon-bedrock-agents-part-2/)です。モデル呼び出しログは、Amazon CloudWatch Logs ロググループ、Amazon Simple Storage Service (Amazon S3) バケット、またはその両方に保存できます。CloudWatch Logs にログデータを保存すると、カスタムメトリクスのフィルタ、アラーム、ダッシュボードを作成できます。Amazon S3 は、組織のポリシーによって管理されているように、 間 AWS リージョン または長期ストレージのデータのレプリケートに最適です。

このパターンは、Infrastructure as Code (IaC) アプローチを使用して Amazon Bedrock のモデル呼び出しログ記録を設定するサンプル AWS CloudFormation テンプレートを提供します。このテンプレートは、CloudWatch Logs と Amazon S3 の両方にログストレージを設定します。

## 前提条件と制限
<a name="configure-bedrock-invocation-logging-cloudformation-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ 以下のアクセス許可:
  + CloudFormation スタックを作成するための[アクセス許可](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)
  + Amazon Bedrock への[アクセス許可](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-updates)
  + Amazon S3 バケットを作成してアクセスするための[アクセス許可](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html)
  + CloudWatch Logs ロググループを作成してアクセスするための[アクセス許可](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-identity-based-access-control-cwl.html)
  +  AWS Lambda 関数を作成してアクセスするためのアクセス[許可](https://docs.aws.amazon.com/lambda/latest/dg/security-iam-awsmanpol.html) 
  +  AWS Key Management Service (AWS KMS) キーを作成してアクセスするためのアクセス[許可](https://docs.aws.amazon.com/kms/latest/developerguide/customer-managed-policies.html) 

**制限事項**

このパターンは、CloudWatch Logs と Amazon S3 の両方にモデル呼び出しをログ記録します。この 2 つのサービスのうち、どちらか 1 つのみを選択することはサポートされていません。

## アーキテクチャ
<a name="configure-bedrock-invocation-logging-cloudformation-architecture"></a>

**ターゲットアーキテクチャ**

CloudFormation テンプレートは、ターゲットに次のリソースをプロビジョニングします AWS アカウント。
+ モデル呼び出しログを保存するための CloudWatch Logs ロググループ
+ モデル呼び出しログと、これに対応するバケットポリシーを保存するための Amazon S3 バケット
+ サーバー側のアクセスログと、これに対応するバケットポリシーを保存するための Amazon S3 バケット
+ Amazon Bedrock でログ記録設定を構成する AWS Lambda 関数
+  AWS KMS key および対応するキーエイリアス
+ Amazon Bedrock の AWS Identity and Access Management (IAM) サービスロール

次の図は、このパターンに関連付けられた CloudFormation スタックをデプロイした後の呼び出しログの保存方法を示しています。Amazon Bedrock は、基盤モデルがテキスト、イメージ、動画、または埋め込みデータを配信するときにログデータを発行します。図に示すように、Amazon S3 バケットと CloudWatch Logs ロググループは AWS KMS keyによって暗号化されます。

![\[Amazon Bedrock 基盤モデルの呼び出しをログに記録するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/a55e7495-ec84-4d41-886e-5c37b37aac67/images/a958d52f-9072-40af-80cb-360f6c1c7fd5.png)


この図は、次のワークフローを示しています。

1. ユーザーが Amazon Bedrock の基盤モデルにクエリを送信します。

1. Amazon Bedrock は IAM サービスロールを引き受けます。

1. Amazon Bedrock はログデータを生成し、CloudWatch Logs ロググループと Amazon S3 バケットに保存します。

1. モデル呼び出しログを含む Amazon S3 バケット内で、ユーザーがファイルの読み取り、アップロード、または削除を行うと、これらのアクティビティは、サーバー側のアクセスログ用の別の Amazon S3 バケットに記録されます。

**自動化とスケール**

このソリューションをスケールするには、CloudFormation テンプレートをスタックセットとして複数の AWS リージョン と にデプロイします AWS アカウント。詳細については、CloudFormation ドキュメントの「[StackSets を使用したアカウントとリージョン全体でのスタックの管理](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)」を参照してください。

## ツール
<a name="configure-bedrock-invocation-logging-cloudformation-tools"></a>

**AWS のサービス**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) は、主要な AI 企業や Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにする完全マネージド型サービスです。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) を使用すると、すべてのシステム、アプリケーション、および からのログを一元化 AWS のサービス できるため、ログをモニタリングして安全にアーカイブできます。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰が認証され、誰に使用を許可されているかを制御することで、 AWS リソースへのアクセスを安全に管理できます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。

**その他のツール**
+ [Git](https://git-scm.com/docs) は、オープンソースの分散バージョン管理システムです。

**コードリポジトリ**

このパターンのコードは、GitHub [enable-bedrock-logging-using-cloudformation](https://github.com/aws-samples/enable-bedrock-logging-using-cloudformation) リポジトリで入手できます。

## エピック
<a name="configure-bedrock-invocation-logging-cloudformation-epics"></a>

### CloudFormation スタックを作成する
<a name="create-the-cfnshort-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CloudFormation テンプレートをダウンロードします。 | CloudFormation テンプレートを GitHub「[リポジトリ](https://github.com/aws-samples/enable-bedrock-logging-using-cloudformation/blob/main/enable-bedrock-logging-using-cloudformation.yaml)」からダウンロードします。 | クラウドアーキテクト | 
| テンプレートのデプロイ | ターゲットアカウントとリージョンにスタックを作成します。**[パラメータ]** セクションで、テンプレートで定義されている各パラメータの値を指定します。手順については、「CloudFormation ドキュメント」の「[スタックの作成](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)」を参照してください。 | クラウドアーキテクト | 

### ソリューションをテストする
<a name="test-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| モデルアクセスの有効化 | Amazon Bedrock に、基盤モデルへのアクセスを追加します。この手順については、Amazon Bedrock ドキュメントの「[Add or remove access to Amazon Bedrock foundation models](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html)」を参照してください。 | クラウドアーキテクト | 
| サンプルプロンプトの実行 | Amazon Bedrock プレイグラウンドで、サンプルプロンプトを実行します。この手順については、Amazon Bedrock ドキュメントの「[Generate responses in the console using playgrounds](https://docs.aws.amazon.com/bedrock/latest/userguide/playgrounds.html)」を参照してください。 | クラウドアーキテクト | 
| ログ記録の設定の確認 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-bedrock-invocation-logging-cloudformation.html) | クラウドアーキテクト | 
| Amazon S3 バケットの確認 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-bedrock-invocation-logging-cloudformation.html) | クラウドアーキテクト | 
| ロググループの確認 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-bedrock-invocation-logging-cloudformation.html) | クラウドアーキテクト | 

## 関連リソース
<a name="configure-bedrock-invocation-logging-cloudformation-resources"></a>

**AWS ドキュメント**
+ [Amazon S3 汎用バケットへのアクセス](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html) (Amazon S3 ドキュメント)
+ [CloudFormation スタックを使用した単一ユニットとしての AWS リソースの管理](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html) (CloudFormation ドキュメント)
+ [Monitor model invocation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html) (Amazon Bedrock ドキュメント)
+ [Working with log groups and log streams](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) (CloudWatch Logs ドキュメント)

**AWS ブログ投稿**
+ [Monitoring Generative AI applications using Amazon Bedrock and Amazon CloudWatch integration](https://aws.amazon.com/blogs/mt/monitoring-generative-ai-applications-using-amazon-bedrock-and-amazon-cloudwatch-integration/)
+ [Best practices for building robust generative AI applications with Amazon Bedrock Agents – Part 1](https://aws.amazon.com/blogs/machine-learning/best-practices-for-building-robust-generative-ai-applications-with-amazon-bedrock-agents-part-1/)
+ [Best practices for building robust generative AI applications with Amazon Bedrock Agents – Part 2](https://aws.amazon.com/blogs/machine-learning/best-practices-for-building-robust-generative-ai-applications-with-amazon-bedrock-agents-part-2/)

# SageMaker 用のカスタム Docker コンテナイメージを作成し、AWS Step Functions のモデルトレーニングに使用する
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions"></a>

*Amazon Web Services、Julia Bluszcz、Aubrey Oosthuizen、Mohan Gowda Purushothama、Neha Sharma、および Mateusz Zaremba*

## 概要
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-summary"></a>

このパターンは、[Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 用の Docker コンテナイメージを作成し、それを [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) のトレーニングモデルに使用する方法を示しています。アルゴリズムをコンテナにパッケージ化することにより、プログラミング言語、フレームワーク、依存関係に関係なく、ほぼすべてのコードを SageMaker 環境で実行できます。

提供されている [SageMaker ノートブック](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html)の例では、カスタム Docker コンテナイメージが [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) に保存されています。Step Functions は Amazon ECR に保存されているコンテナを使用して、SageMaker 用の Python 処理スクリプトを実行します。その後、コンテナは [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) にモデルをエクスポートします。

## 前提条件と制限事項
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ Amazon S3 アクセス許可を持つ [SageMaker 用 AWS アイデンティティとアクセス管理 (IAM) ロール](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)
+ [Step Functions 用の IAM ロール](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions)
+ Python に精通
+ Amazon SageMaker Python SDK に精通していること
+ AWS Command Line Interface (AWS CLI) に精通していること
+ AWS SDK for Python (Boto3) に精通していること
+ Amazon ECR に精通している
+ Docker に精通していること

**製品バージョン**
+ AWS Step Functions データサイエンス SDK バージョン 2.3.0
+ Amazon SageMaker Python SDK バージョン 2.78.0

## アーキテクチャ
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-architecture"></a>

次の図は、SageMaker 用の Docker コンテナイメージを作成し、それを Step Functions のトレーニングモデルに使用するためのワークフローの例を示しています。

![\[SageMaker 用の Docker コンテナイメージを作成し、それを Step Functions でトレーニングモデルに使用するためのワークフロー\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


この図表は、次のワークフローを示しています:

1. データサイエンティストまたは DevOps エンジニアは、Amazon SageMaker ノートブックでカスタム Docker コンテナイメージを作成します。

1. データサイエンティストまたは DevOps エンジニアは、Docker コンテナイメージをプライベートレジストリにおける Amazon ECR プライベートリポジトリに保存します。

1. データサイエンティストまたは DevOps エンジニアは、Docker コンテナで、Step Functions ワークフロー内の Python SageMaker 処理ジョブを実行します。

**自動化とスケール**

このパターンの SageMaker ノートブックの例としては、`ml.m5.xlarge` ノートブックインスタンスタイプを使用します。ユースケースに応じて、インスタンスタイプを変更することができます。SageMaker ノートブックインスタンスタイプの詳細については、「[Amazon SageMaker の料金表](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

## ツール
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-tools"></a>
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
+ [「Amazon SageMaker」](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。
+ [Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk) は、SageMaker で機械学習モデルのトレーニングおよびそれを展開するためのオープンソースライブラリです。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)は、AWS Lambda 関数と他のAWS サービスを組み合わせてビジネスクリティカルなアプリケーションを構築できるサーバーレスオーケストレーションサービスです。
+ [AWS Step Functions データサイエンス Python SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/index.html) は、機械学習モデルを処理および公開する Step Functions のワークフローの作成を支援するオープンソースライブラリです。

## エピック
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-epics"></a>

### カスタム Docker コンテナイメージを作成して Amazon ECR に保存します。
<a name="create-a-custom-docker-container-image-and-store-it-in-amazon-ecr"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon ECR をセットアップし、新しいプライベートレジストリを作成します。 | まだ Amazon ECR をセットアップしていない場合は、「*Amazon ECR ユーザーガイド*」の「[Amazon ECR のセットアップ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)」に記載されている指示に従ってください。各 AWS アカウントには、デフォルトのプライベート Amazon ECR レジストリが提供されます。 | DevOps エンジニア | 
| Amazon ECR プライベートリポジトリを作成します。 | 「*Amazon ECR ユーザーガイド*」の「[プライベートリポジトリの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)」に記載されている指示に従ってください。作成したリポジトリは、カスタム Docker コンテナイメージを保存する場所です。 | DevOps エンジニア | 
| SageMaker 処理ジョブの実行に必要な仕様を含む Docker ファイルを作成します。 | Dockerfile を設定して、SageMaker 処理ジョブの実行に必要な仕様を含む Dockerfile を作成します。手順については、Amazon SageMaker 開発者ガイドの「[独自のトレーニングコンテナの調整](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)」を参照してください。Docker ファイルの詳細については、「Docker ドキュメント」の「[Dockerfile ファイルリファレンス](https://docs.docker.com/engine/reference/builder/)」を参照してください。**例：Jupyter Notebookのコードセルで［Dockerfile］を作成**セル 1<pre># Make docker folder<br />!mkdir -p docker</pre>セル 2<pre>%%writefile docker/Dockerfile<br /><br />FROM python:3.7-slim-buster<br /><br />RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3<br />ENV PYTHONUNBUFFERED=TRUE<br /><br />ENTRYPOINT ["python3"]</pre> | DevOps エンジニア | 
| Docker コンテナイメージを構築し、Amazon ECR にプッシュします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.html)詳細については、GitHub での独自のアルゴリズムコンテナの構築の「[コンテナの構築と登録](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.html#Building-and-registering-the-container)」を参照してください。**Docker イメージを構築して登録する Jupyter Notebookのコードセルの例**次のセルを実行する前に、Docker ファイルを作成し、`docker` というディレクトリに保存していることを確認します。また、Amazon ECR リポジトリが作成されたことを確認し、最初のセルの `ecr_repository` 値をリポジトリの名前に置き換えてください。セル 1<pre>import boto3<br />tag = ':latest'<br />account_id = boto3.client('sts').get_caller_identity().get('Account')<br />region = boto3.Session().region_name<br />ecr_repository = 'byoc'<br /><br />image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)</pre>セル 2<pre># Build docker image<br />!docker build -t $image_uri docker</pre>セル 3<pre># Authenticate to ECR<br />!aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com</pre>セル 4<pre># Push docker image<br />!docker push $image_uri</pre>[Docker クライアントをプライベートレジストリに認証](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)して、`docker push` と `docker pull` コマンドを使用できるようにする必要があります。これらのコマンドは、レジストリ内のリポジトリにイメージをプッシュし、またはレジストリのリポジトリからイメージをプルします。 | DevOps エンジニア | 

### カスタム Docker コンテナイメージを使用する Step Functions ワークフローを作成
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| カスタム処理とモデルトレーニングロジックを含む Python スクリプトを作成します。 | カスタム処理ロジックを書き込んでデータ処理スクリプトで実行します。その後、これを Python スクリプトとして、`training.py` という名前で保存します。詳細については、GitHub の「[SageMaker スクリプトモードでモデルを自作](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html)」を参照してください。カスタム処理とモデルトレーニングロジックを含む Python スクリプトの例<pre>%%writefile training.py<br />from numpy import empty<br />import pandas as pd<br />import os<br />from sklearn import datasets, svm<br />from joblib import dump, load<br /><br /><br />if __name__ == '__main__':<br />    digits = datasets.load_digits()<br />    #create classifier object<br />    clf = svm.SVC(gamma=0.001, C=100.)<br />    <br />    #fit the model<br />    clf.fit(digits.data[:-1], digits.target[:-1])<br />    <br />    #model output in binary format<br />    output_path = os.path.join('/opt/ml/processing/model', "model.joblib")<br />    dump(clf, output_path)</pre> | データサイエンティスト | 
| SageMaker 処理ジョブをステップの 1 つとして含むステップファンクションワークフローを作成します。 | [AWS Step Functions データサイエンス SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html)をインストールしてインポートし、**training.py** ファイルを Amazon S3 にアップロードします。その後、「[Amazon SageMaker Python SDK](https://github.com/aws/sagemaker-python-sdk)」 でステップファンクションの処理ステップを定義します。AWS アカウントで [Step Functions 用の IAM 実行ロールを作成](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions)していることを確認してください。Amazon S3 にアップロードする環境設定例とカスタムトレーニングスクリプト<pre>!pip install stepfunctions<br /><br />import boto3<br />import stepfunctions<br />import sagemaker<br />import datetime<br /><br />from stepfunctions import steps<br />from stepfunctions.inputs import ExecutionInput<br />from stepfunctions.steps import (<br />    Chain<br />)<br />from stepfunctions.workflow import Workflow<br />from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput<br /><br />sagemaker_session = sagemaker.Session()<br />bucket = sagemaker_session.default_bucket() <br />role = sagemaker.get_execution_role()<br />prefix = 'byoc-training-model'<br /><br /># See prerequisites section to create this role<br />workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole"<br /><br />execution_input = ExecutionInput(<br />    schema={<br />        "PreprocessingJobName": str})<br /><br /><br />input_code = sagemaker_session.upload_data(<br />    "training.py",<br />    bucket=bucket,<br />    key_prefix="preprocessing.py",<br />)</pre>カスタム Amazon ECR イメージと Python スクリプトを使用する SageMaker 処理ステップ定義の例`execution_input` パラメータを使用してジョブ名を指定していることを確認してください。パラメータの値は、ジョブを実行するたびに一意でなければなりません。また、**training.py** ファイルのコードは `input` パラメータとして`ProcessingStep` に渡されます。つまり、このコードはコンテナ内にコピーされるということです。`ProcessingInput` コードの宛先は、`container_entrypoint` 内の 2 番目の引数と同じです。<pre>script_processor = ScriptProcessor(command=['python3'],<br />                image_uri=image_uri,<br />                role=role,<br />                instance_count=1,<br />                instance_type='ml.m5.xlarge')<br /><br /><br />processing_step = steps.ProcessingStep(<br />    "training-step",<br />    processor=script_processor,<br />    job_name=execution_input["PreprocessingJobName"],<br />    inputs=[<br />        ProcessingInput(<br />            source=input_code,<br />            destination="/opt/ml/processing/input/code",<br />            input_name="code",<br />        ),<br />    ],<br />    outputs=[<br />        ProcessingOutput(<br />            source='/opt/ml/processing/model', <br />            destination="s3://{}/{}".format(bucket, prefix), <br />            output_name='byoc-example')<br />    ],<br />    container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"],<br />)</pre>SageMaker 処理ジョブを実行するStep Functions ワークフローの例このサンプルワークフローに含まれているのは、SageMaker 処理ジョブステップのみであり、Step Functions ワークフローのすべてのステップが含まれているわけではありません。完全なワークフローの例については、「AWS Step Functions データサイエンス SDK ドキュメント」の「[SageMaker のノートブック例](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html#example-notebooks-in-sagemaker)」を参照してください。<pre>workflow_graph = Chain([processing_step])<br /><br />workflow = Workflow(<br />    name="ProcessingWorkflow",<br />    definition=workflow_graph,<br />    role=workflow_execution_role<br />)<br /><br />workflow.create()<br /># Execute workflow<br />execution = workflow.execute(<br />    inputs={<br />        "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")),  # Each pre processing job (SageMaker processing job) requires a unique name,<br />    }<br />)<br />execution_output = execution.get_output(wait=True)</pre> | データサイエンティスト | 

## 関連リソース
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-resources"></a>
+ 「[データのプロセス](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html)」(「*Amazon SageMaker デベロッパーガイド*」)
+ 「[独自のトレーニングコンテナを調整する](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)」(「*Amazon SageMaker 開発者ガイド*」)

# Amazon Bedrock エージェントを使用してテキストベースのプロンプトで Amazon EKS でのアクセスエントリコントロールの作成を自動化する
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks"></a>

*Amazon Web Services、Keshav Ganesh と Sudhanshu Saurav*

## 概要
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-summary"></a>

組織内で複数のチームが共有 Amazon Elastic Kubernetes Service (Amazon EKS) クラスターを操作する必要がある場合、アクセスコントロールとリソースプロビジョニングの管理が課題となります。Amazon EKS などのマネージド Kubernetes サービスにより、クラスターオペレーションは簡素化されました。ただし、チームのアクセスとリソースのアクセス許可を管理するための管理オーバーヘッドは、依然として複雑で時間がかかります。

このパターンでは、Amazon Bedrock エージェントを活用して Amazon EKS クラスターのアクセス管理を自動化する方法を示します。この自動化により、開発チームはアクセスコントロールの設定や管理ではなく、コアアプリケーションの開発に集中できます。Amazon Bedrock エージェントをカスタマイズして、シンプルな自然言語プロンプトを使用してさまざまなタスク用のアクションを実行できます。

 AWS Lambda 関数をアクショングループとして使用することで、Amazon Bedrock エージェントはユーザーアクセスエントリの作成やアクセスポリシーの管理などのタスクを処理できます。さらに、Amazon Bedrock エージェントは、クラスターで実行されているポッドの AWS Identity and Access Management (IAM) リソースへのアクセスを許可するポッド ID の関連付けを設定できます。このソリューションを使用すると、組織はシンプルなテキストベースのプロンプトで Amazon EKS クラスターの管理を合理化し、手作業によるオーバーヘッドを削減し、全体的な開発効率を向上させることができます。

## 前提条件と制限
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-prereqs"></a>

**前提条件**
+ アクティブ AWS アカウント。
+ デプロイプロセス用の確立された IAM [ロールとアクセス許可](https://docs.aws.amazon.com/bedrock/latest/userguide/security_iam_id-based-policy-examples.html)。これには、Amazon Bedrock 基盤モデル (FM) へのアクセス、Lambda 関数の作成、およびターゲット全体のその他の必要なリソースに対するアクセス許可が含まれます AWS アカウント。
+ Amazon Bedrock FMs AWS アカウント に対してアクティブな で[有効になっているアクセス](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html): Amazon Titan Text Embeddings V2 および Anthropic Claude 3 Haiku。
+ AWS Command Line Interface (AWS CLI) バージョン 2.9.11 以降、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済み。
+ [インストール](https://eksctl.io/installation/)済の eksctl 0.194.0 以降。

**制限事項**
+ 上記の手法をスムーズに導入し、効果的に使用するために、トレーニングとドキュメントが必要になる場合があります。Amazon Bedrock、Amazon EKS、Lambda、Amazon OpenSearch Service、[OpenAPI](https://www.openapis.org/what-is-openapi) を使用するには、開発者と DevOps チームは大幅な学習が必要になります。
+ 一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。すべてのリージョンの可用性については、「[リージョン別の AWS サービス](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

## アーキテクチャ
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-architecture"></a>

次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

![\[Amazon Bedrock エージェントを使用して Amazon EKS でアクセスコントロールを作成するためのワークフローとコンポーネント。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/2c52b1ba-bbad-4a46-ab1e-10e69a0a66e7/images/c7981a86-f734-4c07-a2f7-63ad38b66ab6.png)


このソリューションでは、以下のステップを実行します。

1. ユーザーは、エージェントが処理してアクションを実行するための入力となるプロンプトまたはクエリを送信することで、Amazon Bedrock エージェントとやり取りします。

1. プロンプトに基づいて、Amazon Bedrock エージェントは OpenAPI スキーマをチェックし、ターゲットとする正しい API を特定します。Amazon Bedrock エージェントが正しい API コールを見つけた場合、これらのアクションを実装する Lambda 関数に関連付けられているアクショングループにリクエストが送信されます。

1. 関連する API が見つからない場合、Amazon Bedrock エージェントは OpenSearch コレクションにクエリを実行します。OpenSearch コレクションは、*Amazon EKS ユーザーガイド*を含む Amazon S3 バケットから取得されたインデックス付きナレッジベースコンテンツを使用します。

1. OpenSearch コレクションは、関連するコンテキスト情報を Amazon Bedrock エージェントに返します。

1. 実行可能なリクエスト (API オペレーションに一致するリクエスト) の場合、Amazon Bedrock エージェントは仮想プライベートクラウド (VPC) 内で実行され、Lambda 関数をトリガーします。

1. Lambda 関数は、Amazon EKS クラスター内のユーザーの入力に基づいてアクションを実行します。

1. Lambda コードの Amazon S3 バケットには、Lambda 関数用に記述されたコードとロジックを持つアーティファクトが保存されます。

## ツール
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-tools"></a>

**AWS のサービス**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) は、主要な AI スタートアップや Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) は、 AWS クラウドにおける OpenSearch クラスターのデプロイ、オペレーション、スケーリングを支援するマネージドサービスです。Amazon OpenSearch Service のコレクション機能は、データを整理し、Amazon Bedrock エージェントなどの AI アシスタントが使用できる包括的なナレッジベースを構築するのに役立ちます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) – これは Amazon EKS で Kubernetes クラスターを作成および管理するコマンドラインユーティリティです。

**コードリポジトリ**

このパターンのコードは、GitHub 内の「[eks-access-controls-bedrock-agent](https://github.com/aws-samples/eks-access-controls-bedrock-agent.git)」リポジトリで入手できます。

## ベストプラクティス
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-best-practices"></a>
+ このパターンを実装する場合、可能な限り高レベルのセキュリティを維持します。Amazon EKS クラスターがプライベートであり、アクセス許可が制限されており、すべてのリソースが仮想プライベートクラウド (VPC) 内にあることを確認します。詳細については、Amazon EKS ドキュメントの「[セキュリティのベストプラクティス](https://docs.aws.amazon.com/eks/latest/best-practices/security.html)」を参照してください。
+ 可能な限り AWS KMS [カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)を使用し、制限付きアクセス許可を付与します。
+ 最小特権の原則に従い、タスク実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「[最小限の特権を認める。](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)」と「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

## エピック
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-epics"></a>

### 環境をセットアップする
<a name="set-up-the-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リポジトリのクローン作成 | このパターンのリポジトリのクローンを作成するには、ローカルワークステーションで次のコマンドを実行します。<pre>git clone https://github.com/aws-samples/eks-access-controls-bedrock-agent.git</pre> | AWS DevOps | 
|  AWS アカウント ID を取得します。 |  AWS アカウント ID を取得するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)このコマンドは AWS アカウント 、ID を `AWS_ACCOUNT`変数に保存します。 | AWS DevOps | 
| Lambda コード用の S3 バケットを作成します。 | このソリューションを実装するには、[アーキテクチャ](#using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-architecture)図に示されているように、さまざまな目的を果たす 3 つの Amazon S3 バケットを作成する必要があります。3 つの S3 バケットはそれぞれ、Lambda コード、ナレッジベース、OpenAPI スキーマ用です。Lambda コード用バケットを作成するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)パッケージコマンドにより、以下を含む新しい CloudFormation テンプレート (`eks-access-controls-template.yaml`) が作成されます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 
| ナレッジベース用の S3 バケットを作成します。 | ナレッジベース用の Amazon S3 バケットを作成するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 
| OpenAPI スキーマ用の S3 バケットを作成します。 | OpenAPI スキーマ用の Amazon S3 バケットを作成するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

### CloudFormation スタックをデプロイする
<a name="deploy-the-cfnshort-stack"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CloudFormation スタックをデプロイします。 | CloudFormation スタックをデプロイするには、前に作成した CloudFormation テンプレートファイル `eks-access-controls-template.yaml` を使用します。詳しい手順については、CloudFormation ドキュメントの「[CloudFormation コンソールからスタックを作成する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)」を参照してください。CloudFormation テンプレートを使用して OpenSearch インデックスをプロビジョニングするには、約 10 分かかります。スタックを作成したら、`VPC_ID` と `PRIVATE_SUBNET ID` を書き留めておきます。 | AWS DevOps | 
| Amazon EKS クラスターを作成します。 | VPC 内に Amazon EKS クラスターを作成するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)期待される結果は次のとおりです。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

### Lambda 関数と Amazon EKS クラスターを接続する
<a name="connect-the-lam-function-and-the-eks-cluster"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon EKS クラスターと Lambda 関数との間の接続を作成します。 | Lambda 関数が Amazon EKS クラスターと通信できるようにするネットワークおよび IAM アクセス許可を設定するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

### ソリューションをテストする
<a name="test-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon Bedrock エージェントをテストする | Amazon Bedrock エージェントをテストする前に、以下を必ず実行してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)Amazon Bedrock エージェントにアクセスするには、次の手順を使用します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)EKS Pod Identity の関連付けに対してアクションを実行するようにエージェントに依頼することもできます。詳細については、Amazon EKS ドキュメントの「[EKS Pod Identity がポッドに AWS のサービスへのアクセス権を付与する仕組みを学ぶ](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)」を参照してください。 | AWS DevOps | 

### クリーンアップ
<a name="clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リソースをクリーンアップします。 | このパターンで作成されたリソースをクリーンアップするには、次の手順を使用します。各削除ステップが完了してから次のステップに進みます。この手順では、これらのスタックによって作成されたすべてのリソースを完全に削除します。先に進む前に、重要なデータをバックアップしていることを確認してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

## トラブルシューティング
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| 環境のセットアップ中にゼロ以外のエラーコードが返されます。 | コマンドを実行してこのソリューションをデプロイする際、正しいフォルダを使用していることを確認します。詳細については、このパターンのリポジトリにある [FIRST\$1DEPLOY.md](https://github.com/aws-samples/eks-access-controls-bedrock-agent/blob/main/FIRST_DEPLOY.md) ファイルを参照してください。 | 
| Lambda 関数がタスクを実行できません。 | Lambda 関数から Amazon EKS クラスターへの接続が正しく設定されていることを確認します。 | 
| エージェントプロンプトが API を認識しません。 | ソリューションをデプロイする 詳細については、このパターンのリポジトリにある [RE\$1DEPLOY.md](https://github.com/aws-samples/eks-access-controls-bedrock-agent/blob/main/RE_DEPLOY.md) ファイルを参照してください。 | 
| スタックが削除に失敗します。 | スタックの削除を試行すると、1 度目は失敗する可能性があります。この障害は、ナレッジベースのインデックスを作成する OpenSearch コレクション用に作成されたカスタムリソースの依存関係の問題が原因で発生する場合があります。スタックを削除するには、カスタムリソースを保持して削除オペレーションを再試行します。 | 

## 関連リソース
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-resources"></a>

**AWS ブログ **
+ [簡素化された Amazon EKS アクセス管理コントロールの詳細](https://aws.amazon.com/blogs/containers/a-deep-dive-into-simplified-amazon-eks-access-management-controls/) 

**Amazon Bedrock ドキュメント**
+ [AI エージェントを使用してアプリケーションのタスクを自動化する](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) 
+ [Amazon Bedrock エージェントの仕組み](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [エージェントの動作のテストとトラブルシューティング](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html)
+ [アクショングループを使用して、エージェントが実行するアクションを定義する](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html) 

**Amazon EKS ドキュメント**
+ [Amazon EKS でのアクセスコントロールの仕組みについて説明します。](https://docs.aws.amazon.com/eks/latest/userguide/cluster-auth.html)

# Terraform と Amazon Bedrock を使用して AWS に RAG ユースケースをデプロイする
<a name="deploy-rag-use-case-on-aws"></a>

*Martin Maritsch、Nicolas Jacob Baer、Olivier Brique、Julian Ferdinand Grueber、Alice Morano、Nicola D Orazio、Amazon Web Services*

## 概要
<a name="deploy-rag-use-case-on-aws-summary"></a>

AWS には、[検索拡張生成 (RAG)](https://aws.amazon.com/what-is/retrieval-augmented-generation/) 対応の生成 AI ユースケースを構築するためのさまざまなオプションが用意されています。このパターンは、LangChain と Amazon Aurora PostgreSQL 互換をベクトルストアとする RAG ベースのアプリケーション向けのソリューションを提供します。このソリューションを Terraform で に直接デプロイ AWS アカウント し、次のシンプルな RAG ユースケースを実装できます。

1. Microsoft Excel ファイルや PDF ドキュメントなどの Amazon Simple Storage Service (Amazon S3) バケットにファイルを手動でアップロードします。(サポートされているファイルタイプの詳細については、[Unstructured](https://docs.unstructured.io/open-source/core-functionality/partitioning) のドキュメントを参照してください)。

1. ファイルの内容は抽出され、サーバーレス Aurora PostgreSQL 互換に基づくナレッジデータベースに埋め込まれます。ここでは、ベクトルストアへのほぼリアルタイムのドキュメントの取り込みがサポートされています。このアプローチにより、RAG モデルは低レイテンシーが重要となるユースケースの関連情報にアクセスし、取得することができます。

1. テキスト生成モデルでは、以前にアップロードしたファイルから関連コンテンツを取得して拡張することで、インタラクションが強化されます。

このパターンでは、[Amazon Titan Text Embeddings v2](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-embedding-models.html) を埋め込みモデルとして使用し、[Anthropic Claude 3 Sonnet](https://aws.amazon.com/bedrock/claude/) をテキスト生成モデルとして使用します。どちらも Amazon Bedrock で利用可能です。

## 前提条件と制限事項
<a name="deploy-rag-use-case-on-aws-prereqs"></a>

**前提条件**
+ アクティブ AWS アカウント。
+ AWS Command Line Interface (AWS CLI) がインストールされ、 で設定されています AWS アカウント。インストール手順については、 AWS CLI ドキュメントの[「最新バージョンの のインストールまたは更新 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。 AWS 認証情報とアカウントへのアクセスを確認するには、 AWS CLI ドキュメントの[「設定と認証情報ファイルの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」を参照してください。
+  AWS アカウントの Amazon Bedrock コンソールで必要な大規模言語モデル (LLM) に対して有効になっているモデルアクセス。このパターンには、次の LLM が必要です。
  + `amazon.titan-embed-text-v2:0`
  + `anthropic.claude-3-sonnet-20240229-v1:0`

**制限事項**
+ このサンプルアーキテクチャには、ベクトルデータベースを使用したプログラムによる質疑応答のためのインターフェイスは含まれていません。ユースケースで API が必要な場合は、取得タスクと質疑応答タスクを実行する AWS Lambda 関数で [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide) を追加することを検討してください。 
+ このサンプルアーキテクチャには、デプロイされたインフラストラクチャのモニタリング機能は含まれていません。ユースケースでモニタリングが必要な場合は、[AWS モニタリングサービス](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html)の追加を検討してください。
+ 短期間に Amazon S3 バケットに大量のドキュメントをアップロードすると、Lambda 関数でレート制限が発生する可能性があります。解決策として、Lambda 呼び出しのレートを制御できる Amazon Simple Queue Service (Amazon SQS) キューを使用して Lambda 関数を切り離すことができます。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS のサービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」で、サービスのリンクを選択してご確認ください。

**製品バージョン**
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) バージョン 2 以降
+ [Docker](https://docs.docker.com/get-started/) バージョン 26.0.0 以降
+ [Poetry](https://pypi.org/project/poetry/) バージョン 1.7.1 以降
+ [Python](https://www.python.org/downloads/) バージョン 3.10 以降
+ [Terraform](https://developer.hashicorp.com/terraform/install) バージョン 1.8.4 以降

## アーキテクチャ
<a name="deploy-rag-use-case-on-aws-architecture"></a>

次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

![\[Amazon Bedrock で Aurora PostgreSQL と LLM を使用して RAG ベースのアプリケーションを作成するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/8f184945-7f17-4760-8806-6d0eaeef372a/images/3771b7a0-05bd-4eb3-ad5b-199e22f86184.png)


この図は、次の内容を示したものです。

1. Amazon S3 バケット `bedrock-rag-template-<account_id>` にオブジェクトが作成されると、[Amazon S3 の通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html)により Lambda 関数 `data-ingestion-processor` が呼び出されます。

1. Lambda 関数 `data-ingestion-processor` は、Amazon Elastic Container Registry (Amazon ECR) リポジトリ `bedrock-rag-template` に保存されている Docker イメージに基づいています。

   関数は [LangChain S3FileLoader](https://python.langchain.com/v0.1/docs/integrations/document_loaders/aws_s3_file/) を使用して、ファイルを [LangChain ドキュメント](https://api.python.langchain.com/en/v0.0.339/schema/langchain.schema.document.Document.html)として読み取ります。次に、[LangChain RecursiveCharacterTextSplitter](https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/) は、Amazon Titan Text Embedding V2 埋め込みモデルの最大トークンサイズに依存する `CHUNK_SIZE` と `CHUNK_OVERLAP` を指定して、各ドキュメントをチャンク化します。次に、Lambda 関数は Amazon Bedrock の埋め込みモデルを呼び出して、チャンクを数値ベクトル表現に埋め込みます。最後に、これらのベクトルが Aurora PostgreSQL データベースに保存されます。データベースにアクセスするには、Lambda 関数がまずユーザー名とパスワードを取得します AWS Secrets Manager。

1. Amazon SageMaker AI [ノートブックインスタンス](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) `aws-sample-bedrock-rag-template` では、ユーザーは質問プロンプトを記述できます。このコードは Amazon Bedrock で Claude 3 を呼び出し、ナレッジベース情報をプロンプトのコンテキストに追加します。その結果、Claude 3 はドキュメント内の情報を使用してレスポンスを提供します。

ネットワークとセキュリティに対するこのパターンのアプローチは次のとおりです。
+ Lambda 関数 `data-ingestion-processor` は、仮想プライベートクラウド (VPC) 内のプライベートサブネットにあります。Lambda 関数は、セキュリティグループのため、パブリックインターネットにトラフィックを送信することはできません。そのため、Amazon S3 と Amazon Bedrock へのトラフィックは VPC エンドポイントを介してのみルーティングされます。したがって、トラフィックはパブリックインターネットを経由しないため、レイテンシーが短縮され、ネットワークレベルでセキュリティレイヤーが追加されます。
+ すべてのリソースとデータは、該当する場合、エイリアス で AWS Key Management Service (AWS KMS) キーを使用して暗号化されます`aws-sample/bedrock-rag-template`。

**自動化とスケール**

このパターンでは、Terraform を使用してコードリポジトリから AWS アカウントにインフラストラクチャをデプロイします。

## ツール
<a name="deploy-rag-use-case-on-aws-tools"></a>

**AWS のサービス**
+ 「[Amazon Aurora PostgreSQL 互換エディション](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)」は、PostgreSQL デプロイのセットアップ、運用、スケーリングに役立つ、フルマネージド型の ACID 準拠のリレーショナルデータベースエンジンです。このパターンでは、Aurora PostgreSQL 互換は pgvector プラグインをベクトルデータベースとして使用します。
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) は、主要な AI スタートアップや Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。このパターンでは、Amazon ECR は `data-ingestion-processor` Lambda 関数用に Docker イメージをホストします。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、リソースの使用を認証および認可されたユーザーを制御することで、 AWS リソースへのアクセスを安全に管理できます。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) は、データの保護に効果的な暗号キーを作成および管理する上で役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。このパターンでは、Lambda はデータをベクトルストアに取り込みます。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) を使用すると、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API コールで置き換えて、プログラムでシークレットを取得することができます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、ユーザー自身のデータセンターで運用されていた従来のネットワークと似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるという利点があります。VPC には、トラフィックフローを制御するためのサブネットとルーティングテーブルが含まれています。

**その他のツール**
+ [Docker](https://docs.docker.com/manuals/) は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしての Platform as a Service (PaaS) 製品のセットです。
+ [HashiCorp Terraform](https://www.terraform.io/docs) は、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングして管理するのに役立つ infrastructure as code (IaC) ツールです。
+ [Poetry](https://pypi.org/project/poetry/) は、Python での依存関係の管理とパッケージングのためのツールです。
+ 「[Python](https://www.python.org/)」は汎用のコンピュータプログラミング言語です。

**コードリポジトリ**

このパターンのコードは、GitHub の [terraform-rag-template-using-amazon-bedrock](https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock) リポジトリで利用できます。

## ベストプラクティス
<a name="deploy-rag-use-case-on-aws-best-practices"></a>
+ このコードサンプルは任意の にデプロイできますが AWS リージョン、米国東部 (バージニア北部) – `us-east-1`または米国西部 (北カリフォルニア) – を使用することをお勧めします`us-west-1`。この推奨事項は、このパターンの公開時点での Amazon Bedrock での基盤モデルと埋め込みモデルの可用性に基づくものです。での Amazon Bedrock 基盤モデルサポートup-to-dateリストについては AWS リージョン、Amazon Bedrock ドキュメントの「 [によるモデルサポート AWS リージョン](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html)」を参照してください。このコードサンプルを他のリージョンにデプロイする方法については、「[追加情報](#deploy-rag-use-case-on-aws-additional)」を参照してください。
+ このパターンは、概念実証 (PoC) またはパイロットデモのみを提供します。コードを本番環境に移行する場合は、次のベストプラクティスに従ってください。
  + Amazon S3 のサーバーアクセスログを有効にします。
  + Lambda 関数の[モニタリングとアラート](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)を設定します。
  + ユースケースで API が必要な場合は、取得タスクと質疑応答タスクを実行する Lambda 関数を使用して Amazon API Gateway を追加することを検討してください。
+ 最小特権の原則に従い、タスクの実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「[最小限の特権を認める。](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)」と「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html)」を参照してください。

## エピック
<a name="deploy-rag-use-case-on-aws-epics"></a>

### ソリューションを にデプロイする AWS アカウント
<a name="deploy-the-solution-in-an-aws-account"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リポジトリのクローン作成 | このパターンの GitHub リポジトリをクローン作成するには、以下のコマンドを実行します。<pre>git clone https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock</pre> | AWS DevOps | 
| 変数を設定します。 | このパターンのパラメータを設定するには、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS DevOps | 
| ソリューションのデプロイ | ソリューションを展開するには、次を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)インフラストラクチャのデプロイでは、VPC 内に SageMaker AI インスタンスをプロビジョニングし、Aurora PostgreSQL データベースにアクセスするアクセス許可を付与します。 | AWS DevOps | 

### ソリューションをテストする
<a name="test-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| デモを実行する。 | 以前のインフラストラクチャのデプロイが成功したら、次のステップに従って Jupyter Notebook でデモを実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)Jupyter Notebook では、以下のプロセスがガイドされます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS 全般 | 

### インフラストラクチャをクリーンアップする
<a name="clean-up-infrastucture"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| インフラストラクチャをクリーンアップします。 | 不要になったときに、作成したすべてのリソースを削除するには、次のコマンドを実行します。<pre>terraform destroy -var-file=commons.tfvars</pre> | AWS DevOps  | 

## 関連リソース
<a name="deploy-rag-use-case-on-aws-resources"></a>

**AWS リソース**
+ [Python で Lambda 関数を構築する](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [基盤モデルの推論パラメータ](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Amazon Bedrock 基盤モデルへのアクセス](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [生成 AI アプリケーションにおけるベクトルデータベースの役割](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/) (AWS データベースブログ)
+ [Amazon Aurora PostgreSQL の操作](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

**その他のリソース**
+ [pgvector ドキュメント](https://github.com/pgvector/pgvector)

## 追加情報
<a name="deploy-rag-use-case-on-aws-additional"></a>

**ベクトルデータベースの実装**

このパターンでは、Aurora PostgreSQL 互換を使用して RAG のベクトルデータベースを実装します。Aurora PostgreSQL の代わりに、 は Amazon Bedrock ナレッジベースや Amazon OpenSearch Service など、RAG の他の機能やサービス AWS を提供します。特定の要件に最適なソリューションを選択できます。
+ [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) は、大量のデータを格納およびクエリするために使用できる分散型の検索および分析エンジンを備えています。
+ [Amazon Bedrock ナレッジベース](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)は、RAG の取り込みおよび取得プロセスを簡素化するための追加の抽象化としてナレッジベースを構築およびデプロイするように設計されています。Amazon Bedrock ナレッジベースは、Aurora PostgreSQL と Amazon OpenSearch Service の両方と一緒に使用できます。

**他の へのデプロイ AWS リージョン**

[アーキテクチャ](#deploy-rag-use-case-on-aws-architecture)で説明されているように、このコードサンプルをデプロイするには、米国東部 (バージニア北部) リージョン – `us-east-1` または米国西部 (北カリフォルニア) リージョン – `us-west-1` を使用することをお勧めします。ただし、このコードサンプルを `us-east-1`および `us-west-1` 以外のリージョンにデプロイするには、2 つの方法があります。`commons.tfvars` ファイルでデプロイリージョンを設定できます。クロスリージョン基盤モデルにアクセスするには、次のオプションを検討してください。
+ **パブリックインターネットを経由する** – トラフィックがパブリックインターネットを経由できる場合は、VPC にインターネットゲートウェイを追加します。次に、Lambda 関数 `data-ingestion-processor` と SageMaker AI ノートブックインスタンスに割り当てられたセキュリティグループを調整して、パブリックインターネットへのアウトバウンドトラフィックを許可します。
+ **パブリックインターネットを経由しない** – このサンプルを `us-east-1` または `us-west-1` 以外のリージョンにデプロイするには、次の手順を実行します。

1. `us-east-1` または `us-west-1` リージョンのいずれかで、`bedrock-runtime` の VPC エンドポイントを含む追加の VPC を作成します。

1. アプリケーション VPC への [VPC ピアリング](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)または[トランジットゲートウェイ](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html)を使用して、ピアリング接続を作成します。

1. `us-east-1` または `us-west-1` の外部で Lambda 関数で `bedrock-runtime` boto3 クライアントを設定する場合は、`us-east-1` または us-west-1 用の `bedrock-runtime` の VPC エンドポイントのプライベート DNS 名を `endpoint_url` として boto3 クライアントに渡します。

# Amazon SageMaker の推論パイプラインを使用して、前処理ロジックを単一エンドポイントの ML モデルにデプロイする
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker"></a>

*Mohan Gowda Purushothama、Gabriel Rodriguez Garcia、Mateusz Zaremba、Amazon Web Services*

## 概要
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-summary"></a>

このパターンでは、Amazon SageMaker の[推論パイプライン](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html)を使用して 1 つのエンドポイントに複数のパイプラインモデルオブジェクトをデプロイする方法を説明します。パイプラインモデルオブジェクトは、前処理、モデル推論、後処理など、さまざまな機械学習 (ML) ワークフローステージを表します。このパターンでは、シリアル接続されたパイプラインモデルオブジェクトのデプロイを説明するために、SageMaker に組み込まれている[線形学習アルゴリズム](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html)に基づく前処理の [Scikit-learn](https://docs.aws.amazon.com/sagemaker/latest/dg/sklearn.html) コンテナとリグレッションモデルをデプロイする方法を示します。デプロイメントは SageMaker の単一のエンドポイントの背後でホストされます。

**注記**  
このパターンのデプロイメントは ml.m4.2xlarge インスタンスタイプを使用します。データサイズの要件とワークフローの複雑さに合ったインスタンスタイプを使用することをお勧めします。詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。このパターンでは [Scikit-Learn 用にビルド済みの Docker イメージ](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-docker-containers-scikit-learn-spark.html)を使用しますが、独自の Docker コンテナを使用してワークフローに統合することもできます。

## 前提条件と制限事項
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ [Python 3.9](https://www.python.org/downloads/release/python-390/)
+ [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/) と [Boto3 ライブラリ](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
+ 基本的な SageMaker [権限](https://docs.aws.amazon.com/sagemaker/latest/dg/api-permissions-reference.html)と Amazon Simple Storage Service (Amazon S3) [権限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)を持つ AWS Identity and Access Management (AWS IAM) [ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)

**製品バージョン**
+ [Amazon SageMaker Python SDK 2.49.2](https://sagemaker.readthedocs.io/en/v2.49.2/)

## アーキテクチャ
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon SageMaker
+ Amazon SageMaker Studio
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon SageMaker 用の[リアルタイム推論](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html)エンドポイント

**ターゲットアーキテクチャ**

次の図表は、Amazon SageMaker Pipelines モデルオブジェクトをデプロイするためのアーキテクチャを示します。

![\[SageMaker パイプラインモデルオブジェクトをデプロイするためのアーキテクチャ\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/1105d51b-752f-46d7-962c-acef1fb3399f/images/12f06715-b1c2-4de0-b277-99ce87308152.png)


この図表は、次のワークフローを示しています:

1. SageMaker ノートブックはパイプラインモデルをデプロイします。

1. S3 バケットにはモデルアーティファクトが格納されます。

1. Amazon ECR は S3 バケットからソースコンテナイメージを取得します。

## ツール
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-tools"></a>

**AWS ツール**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
+ 「[Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)」 は、ML モデルの構築とトレーニングを行うことができ、それらを稼働準備が整ったホストされている環境にデプロイするのに役立つマネージド型 ML サービスです。
+ [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) は、ML モデルの構築、トレーニング、デバッグ、デプロイ、モニタリングを可能にする、ウェブベースの ML 用統合開発環境 (IDE) です。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**コード**

このパターンのコードは、GitHub 内の「[Inference Pipeline with Scikit-learn and Linear Learner](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.ipynb)」リポジトリで利用できます。

## エピック
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-epics"></a>

### データセットの準備
<a name="prepare-the-dataset"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リグレッションタスク用のデータセットを準備します。 | Amazon SageMaker Studio で[ノートブックを開きます](https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-create-open.html#notebooks-open)。必要なライブラリをすべてインポートして作業環境を初期化するには、ノートブックで以下のサンプルコードを使用してください。<pre>import sagemaker<br />from sagemaker import get_execution_role<br /><br />sagemaker_session = sagemaker.Session()<br /><br /># Get a SageMaker-compatible role used by this Notebook Instance.<br />role = get_execution_role()<br /><br /># S3 prefix<br />bucket = sagemaker_session.default_bucket()<br />prefix = "Scikit-LinearLearner-pipeline-abalone-example"</pre>サンプルデータセットをダウンロードするには、以下のコードをノートブックに追加します。<pre>! mkdir abalone_data<br />! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data</pre>** **このパターンの例では、UCI 機械学習のリポジトリの [Abalone データセット](https://archive.ics.uci.edu/ml/datasets/abalone)を使用しています。 | データサイエンティスト | 
| データセットを S3 バケットにアップロードします。 | 先にデータセットを準備したノートブックに、以下のコードを追加してサンプルデータを S3 バケットにアップロードします。<pre>WORK_DIRECTORY = "abalone_data"<br /><br />train_input = sagemaker_session.upload_data(<br />    path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"),<br />    bucket=bucket,<br />    key_prefix="{}/{}".format(prefix, "train"),<br />)</pre> | データサイエンティスト | 

### SKLearn を使用してデータプリプロセッサを作成します。
<a name="create-the-data-preprocessor-using-sklearn"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| preprocessor.py スクリプトを準備します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.html) | データサイエンティスト | 
| SKLearn プリプロセッサオブジェクトを作成します。 | 最終的な推論パイプラインに組み込むことができる SKLearn プリプロセッサオブジェクト (SKLearn Estimator と呼ばれる) を作成するには、SageMaker ノートブックで次のコードを実行します。<pre>from sagemaker.sklearn.estimator import SKLearn<br /><br />FRAMEWORK_VERSION = "0.23-1"<br />script_path = "sklearn_abalone_featurizer.py"<br /><br />sklearn_preprocessor = SKLearn(<br />    entry_point=script_path,<br />    role=role,<br />    framework_version=FRAMEWORK_VERSION,<br />    instance_type="ml.c4.xlarge",<br />    sagemaker_session=sagemaker_session,<br />)<br />sklearn_preprocessor.fit({"train": train_input})</pre> | データサイエンティスト | 
| プリプロセッサの推論をテストします。 | プリプロセッサが正しく定義されていることを確認するには、SageMaker ノートブックに次のコードを入力して[バッチ変換ジョブ](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html)を起動します。<pre># Define a SKLearn Transformer from the trained SKLearn Estimator<br />transformer = sklearn_preprocessor.transformer(<br />    instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv"<br />)<br /><br /><br /># Preprocess training input<br />transformer.transform(train_input, content_type="text/csv")<br />print("Waiting for transform job: " + transformer.latest_transform_job.job_name)<br />transformer.wait()<br />preprocessed_train = transformer.output_path</pre> |  | 

### 機械学習モデルを作成する
<a name="create-a-machine-learning-model"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| モデルオブジェクトを作成します。 | 線形学習器アルゴリズムに基づいてモデルオブジェクトを作成するには、SageMaker ノートブックに次のコードを入力します。<pre>import boto3<br />from sagemaker.image_uris import retrieve<br /><br />ll_image = retrieve("linear-learner", boto3.Session().region_name)<br />s3_ll_output_key_prefix = "ll_training_output"<br />s3_ll_output_location = "s3://{}/{}/{}/{}".format(<br />    bucket, prefix, s3_ll_output_key_prefix, "ll_model"<br />)<br /><br />ll_estimator = sagemaker.estimator.Estimator(<br />    ll_image,<br />    role,<br />    instance_count=1,<br />    instance_type="ml.m4.2xlarge",<br />    volume_size=20,<br />    max_run=3600,<br />    input_mode="File",<br />    output_path=s3_ll_output_location,<br />    sagemaker_session=sagemaker_session,<br />)<br /><br />ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32)<br /><br />ll_train_data = sagemaker.inputs.TrainingInput(<br />    preprocessed_train,<br />    distribution="FullyReplicated",<br />    content_type="text/csv",<br />    s3_data_type="S3Prefix",<br />)<br /><br />data_channels = {"train": ll_train_data}<br />ll_estimator.fit(inputs=data_channels, logs=True)</pre>上記のコードでは、パブリック Amazon ECR レジストリからモデルの関連する Amazon ECR Docker イメージを取得し、推定オブジェクトを作成し、そのオブジェクトを使用してリグレッションモデルをトレーニングします。 | データサイエンティスト | 

### 最後のパイプラインをデプロイする
<a name="deploy-the-final-pipeline"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| パイプラインモデルをデプロイします。 | パイプラインモデルオブジェクト (つまり、プリプロセッサオブジェクト) を作成してオブジェクトをデプロイするには、SageMaker ノートブックに次のコードを入力します。<pre>from sagemaker.model import Model<br />from sagemaker.pipeline import PipelineModel<br />import boto3<br />from time import gmtime, strftime<br /><br />timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime())<br /><br />scikit_learn_inferencee_model = sklearn_preprocessor.create_model()<br />linear_learner_model = ll_estimator.create_model()<br /><br />model_name = "inference-pipeline-" + timestamp_prefix<br />endpoint_name = "inference-pipeline-ep-" + timestamp_prefix<br />sm_model = PipelineModel(<br />    name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model]<br />)<br /><br />sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)</pre>モデルオブジェクトで使用されるインスタンスタイプは、必要に応じて調整できます。 | データサイエンティスト | 
| 推論をテストします。 | エンドポイントが正しく動作していることを確認するには、SageMaker ノートブックで以下のサンプル推論コードを実行します。<pre>from sagemaker.predictor import Predictor<br />from sagemaker.serializers import CSVSerializer<br /><br />payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155"<br />actual_rings = 10<br />predictor = Predictor(<br />    endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer()<br />)<br /><br />print(predictor.predict(payload))</pre> | データサイエンティスト | 

## 関連リソース
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-resources"></a>
+ [Preprocess input data before making predictions using Amazon SageMaker inference pipelines and Scikit-learn](https://aws.amazon.com/blogs/machine-learning/preprocess-input-data-before-making-predictions-using-amazon-sagemaker-inference-pipelines-and-scikit-learn/) (AWS 機械学習のブログ)
+ [End to end Machine Learning with Amazon SageMaker](https://github.com/aws-samples/amazon-sagemaker-build-train-deploy) (GitHub)

# Kiro やその他のコーディングアシスタントで MCP サーバーを使用してリアルタイムのコーディングセキュリティ検証をデプロイする
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants"></a>

*Ivan Girardi と Iker Reina Fuente、Amazon Web Services*

## 概要
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-summary"></a>

このパターンでは、3 つの業界標準のセキュリティスキャンツールを統合して包括的なコードセキュリティ分析を提供するモデルコンテキストプロトコル (MCP) サーバーを実装する方法について説明します。サーバーは、AI コーディングアシスタント (Kiro、Amazon Q Developer、Cline など) がコードスニペットとInfrastructure as Code (IaC) 設定を自動的にスキャンできるようにします。これらのスキャンにより、コーディングアシスタントはセキュリティの脆弱性、設定ミス、コンプライアンス違反を特定するのに役立ちます。

何百万ものコードスニペットでトレーニングされた AI コードジェネレーターは、セキュリティの死角を生みます。そのトレーニングデータはどの程度安全ですか? このパターンは、コード生成中のリアルタイムのセキュリティ検証を提供し、デベロッパーがコード化する潜在的なセキュリティ問題を特定して理解するのに役立ちます。このアプローチは、開発者が直接的な脆弱性と依存関係から継承されたリスクの両方に対処するのに役立ちます。AI 効率とセキュリティコンプライアンスのギャップを埋めることで、このパターンは AI を活用した開発ツールを安全に導入するのに役立ちます。

このパターンは、組織が AI 支援のコーディングツールを使用して開発セキュリティプラクティスを強化し、複数のプログラミング言語とインフラストラクチャ定義にわたって継続的なセキュリティスキャン機能を提供するのに役立ちます。このソリューションは、次のツールの機能を組み合わせています。
+ Terraform、、Kubernetes マニフェストなどの IaC AWS CloudFormationファイルをスキャンするための Checkov
+ Python、JavaScript、Java などの複数のプログラミング言語を分析するための Semgrep
+ 特殊な Python セキュリティスキャン用の Bandit 

このソリューションの主な機能は次のとおりです。
+ 新しいコードセグメントのデルタスキャンによる計算オーバーヘッドの削減
+ 分離されたセキュリティツール環境、クロスツールの汚染の防止
+ AI コーディングアシスタント (Kiro、Amazon Q Developer、Cline など) とのシームレスな統合
+ コード生成中のリアルタイムのセキュリティフィードバック
+ 組織コンプライアンスのためのカスタマイズ可能なスキャンルール

このパターンは、標準化されたレスポンス形式でセキュリティスキャン用の統合インターフェイスを提供するため、セキュリティチェックを開発ワークフローに簡単に統合できます。このパターンでは、Python と MCP フレームワークを使用して、自動化されたセキュリティフィードバックを提供します。このアプローチは、開発者が開発プロセスの早い段階でセキュリティ問題を特定して対処し、詳細な検出結果を通じてセキュリティのベストプラクティスを学ぶのに役立ちます。

## 前提条件と制限
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-prereqs"></a>

**前提条件**
+ これらのコーディングアシスタントのいずれかを使用する場合、Kiro または Amazon Q Developer を使用するためのアクセス権 AWS アカウント を持つアクティブな 。
+ Python バージョン 3.10 以降[がインストールされている](https://www.python.org/downloads/)
+ `uv` パッケージマネージャー[のインストール](https://docs.astral.sh/uv/getting-started/installation/)
+ セキュリティスキャンのツールと概念に精通している
+ IaC とアプリケーションセキュリティの基本的な理解

**制限事項**
+ バンディットスキャンは Python ファイルのみに制限されます。
+ リアルタイムスキャンは、大規模なコードベースのパフォーマンスに影響を与える可能性があります。
+ ツール固有の制限は、サポートされているファイル形式と言語に基づいています。
+ セキュリティの検出結果を検証するには、手動によるレビューが必要です。
+ セキュリティスキャンの結果には、適切な解釈のためのセキュリティの専門知識が必要です。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS サービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

**製品バージョン**
+ Python バージョン 3.10 以降
+ Checkov バージョン 3.0.0 以降
+ Semgrep バージョン 1.45.0 以降
+ Bandit バージョン 1.7.5 以降
+ MCP[cli] バージョン 1.11.0 以降
+ Pydantic バージョン 1.10.0 以降
+ Loguru バージョン 0.6.0 以降

## アーキテクチャ
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-architecture"></a>

このソリューション用のアーキテクチャを次の図に示します。

![\[AI アシスタントはコードを MCP セキュリティスキャナーサーバーに送信して、特殊なスキャナーにルーティングします。スキャン結果は開発者に送信されます。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/fa623544-4d54-48af-a4e4-9b6a0624e776/images/9c881f95-76d0-40f6-983e-d987fd2097b8.png)


この図表は、次のワークフローを示しています:

1. 開発者は AI アシスタント (Kiro、Cline、Amazon Q Developer、Roo Code など) を使用してコードを生成または分析します。AI アシスタントは、セキュリティスキャンのためにコードを送信します。

1. MCP セキュリティスキャナーサーバーは、IaC ファイルの場合は Checkov、複数のプログラミング言語分析の場合は Semgrep、Python 固有のセキュリティスキャンの場合は Bandit などの適切な専用スキャナーにルーティングしてリクエストを処理します。

1. セキュリティ検出結果、重要度レベル、詳細な説明、推奨される修正を含むスキャナーの結果は、AI アシスタントを通じて開発者に返送されます。

1. 開発者がリアルタイムのセキュリティ検証を受ける継続的なフィードバックループが確立され、AI アシスタントによる自動修正が可能になり、開発中のセキュリティのベストプラクティスが促進されます。

このアーキテクチャは、以下の一般的なセキュリティリスクを軽減します。
+ コマンドインジェクション
+ プロンプトインジェクション
+ パストラバーサル
+ 依存関係攻撃
+ リソースの枯渇 

このアーキテクチャは、以下のベストプラクティスを実装することで、これらの一般的なセキュリティリスクを軽減します。
+ ユーザーと AI モデルの入力はすべて一時ファイルに書き込まれます。
+ コマンドラインインターフェイス (CLI) コマンドへの直接入力は提供されません。
+ ファイルシステムへのアクセスは、一時ディレクトリとファイルのみに制限されます。
+ 一時ファイルは自動的にクリーンアップされます。
+ スキャンレスポンスはサニタイズされます。
+ プロセス機能を制限するプロセス分離が適用されます。
+ すべてのスキャンアクティビティがログに記録されます。

**自動化とスケール**

このパターンでは、次の機能による自動化がサポートされています。
+ 自動コードスキャンのための AI コーディングアシスタントとの統合
+ 自動処理のための標準化された API レスポンス
+ MCP 設定ファイルによる設定
+ 複数のファイルのバッチ処理のサポート
+ 複数のプログラミング言語と IaC 形式でのスケーラブルなスキャン

スキャンプロセスは、提供された API エンドポイントを使用して自動化できます。
+ `scan_with_checkov` IaC スキャン用
+ `scan_with_semgrep` 多言語コードスキャン用
+ `scan_with_bandit` Python 固有のスキャン用
+ `get_supported_formats` 形式検証用

スキャンツールを拡張する場合は、このセクションで前述した設計原則とベストプラクティスに従ってください。[ベストプラクティス](#deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-best-practices)も参照してください。

## ツール
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-tools"></a>

**AWS のサービス**
+ [Kiro](https://aws.amazon.com/documentation-overview/kiro/) は、デベロッパーと協力してプロンプトを詳細な仕様に変換し、作業コード、ドキュメント、テストに変換するエージェントコーディングサービスです。Kiro エージェントは、開発者が困難な問題を解決し、ドキュメントの生成や単体テストなどのタスクを自動化するのに役立ちます。
+ [Amazon Q Developer](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) は、生成 AI を活用した会話アシスタントであり、 AWS アプリケーションの理解、構築、拡張、運用に役立ちます。

**その他のツール**
+ [Bandit](https://bandit.readthedocs.io/en/latest/) は特殊な Python セキュリティスキャナーツールです。安全でない関数、ハードコードされたシークレット、インジェクションの脆弱性などの一般的な Python セキュリティの問題を検出します。Bandit は、詳細な信頼度と重要度の評価を提供します。
+ [Checkov](https://github.com/bridgecrewio/checkov) は、IaC のセキュリティとコンプライアンスの設定ミスをチェックする静的コード分析ツールです。さらに、Checkov はコンプライアンス違反とセキュリティのベストプラクティスを検出します。
+ [Cline](https://cline.bot/) は、VS Code で実行される AI を活用したコーディングアシスタントです。
+ [Loguru](https://loguru.readthedocs.io/en/stable/) は Python 用のデータ検証ライブラリです。
+ [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) は、AI 支援開発ツールを構築するためのオープンソースフレームワークです。
+ [Pydantic](https://docs.pydantic.dev/latest/) は Python 用のデータ検証ライブラリです。
+ [Semgrep](https://semgrep.dev/docs/introduction) は、ソースコードでセキュリティの脆弱性とバグを分析します。複数のプログラミング言語をサポートしています。Semgrep は、セキュリティに焦点を当てたルールセットを使用して包括的な分析を行います。詳細な信頼度と重要度の評価を提供します。

**コードリポジトリ**

このパターンのコードは、GitHub [MCP Security Scanner: Real-Time Protection for AI Code Assistants](https://github.com/aws-samples/sample-mcp-security-scanner) リポジトリで入手できます。リポジトリには、MCP サーバーの実装、Kiro、Amazon Q Developer、Cline などの MCP 設定の詳細、設定例、テストユーティリティが含まれます。

リポジトリ構造には以下が含まれます。
+ `security_scanner_mcp_server/` - メインサーバーの実装
+ `docs/` - ドキュメントとデモ資料
+ `tests/` - テストファイル
+ `mcp-config-example.json` - MCP 設定の例
+ `requirements.txt` - プロジェクトの依存関係

## ベストプラクティス
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-best-practices"></a>

**セキュリティスキャンの実装**
+ セキュリティの検出結果を確認して、問題を検証し、優先順位を付けます。
+ スキャンツール (Checkov、Semgrep、Bandit) を最新バージョンに更新し続けます。
+ このパターンの MCP セキュリティツールは、他のセキュリティ対策やツールと組み合わせて使用します。
+ セキュリティルールセットとポリシーを定期的に更新します。

**設定管理**
+ 公式バージョン管理ソースの MCP 設定ファイルを使用します。
+ カスタムルールと設定を文書化します。

**Integration**
+ 開発サイクルの早い段階でセキュリティスキャンを統合します。
+ コミット前フックまたは継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインで自動スキャンを設定します。
+ 環境に適した重要度のしきい値を設定します。
+ セキュリティ検出結果を処理するための明確な手順を確立します。

**運用上の考慮事項**
+ スキャンパフォーマンスとリソース使用量をモニタリングします。
+ 適切なエラー処理とログ記録を実装します。
+ カスタム設定のドキュメントを維持します。
+ セキュリティルールを確認および更新するプロセスを確立します。

また、次のベストプラクティスにも注意してください。
+ 常に特定のコンテキストでセキュリティ検出結果を検証します。
+ セキュリティツールと依存関係を最新の状態に保つ。
+ 包括的なカバレッジを実現するには、複数のセキュリティツールを使用します。
+ 開発プロセスでセキュリティのベストプラクティスに従ってください。

## エピック
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-epics"></a>

### (Kiro ユーザー) MCP セキュリティスキャナーサーバーをセットアップする
<a name="kiro-users-set-up-the-mcp-security-scanner-server"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| MCP 設定を構成します。 | Kiro の設定ファイルは、 (オプション 1) で設定ファイルを手動で検索するか、（オプション 2) で Kiro IDE を使用して編集できます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html)<pre>{<br />  "mcpServers": {<br />    "security-scanner": {<br />      "command": "uvx",<br />      "args": [<br />        "--from",<br />        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",<br />        "security_scanner_mcp_server"<br />      ],<br />      "env": {<br />        "FASTMCP_LOG_LEVEL": "ERROR"<br />      },<br />      "disabled": false,<br />      "autoApprove": []<br />    }<br />  }<br />}</pre> | アプリ開発者 | 

### (Amazon Q Developer ユーザー) MCP セキュリティスキャナーサーバーをセットアップする
<a name="qdevlong-users-set-up-the-mcp-security-scanner-server"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| MCP 設定を構成します。 | MCP 設定を手動で設定するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html)<pre>{<br />  "mcpServers": {<br />    "security-scanner": {<br />      "command": "uvx",<br />      "args": [<br />        "--from",<br />        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",<br />        "security_scanner_mcp_server"<br />      ],<br />      "env": {<br />        "FASTMCP_LOG_LEVEL": "ERROR"<br />      }<br />    }<br />  }<br />}</pre> | アプリ開発者 | 

### (Cline ユーザー) MCP セキュリティスキャナーサーバーをセットアップする
<a name="cline-users-set-up-the-mcp-security-scanner-server"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| MCP 設定を構成します。 | MCP 設定を手動で設定するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html)<pre>{<br />  "mcpServers": {<br />    "security-scanner": {<br />      "command": "uvx",<br />      "args": [<br />        "--from",<br />        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",<br />        "security_scanner_mcp_server"<br />      ],<br />      "env": {<br />        "FASTMCP_LOG_LEVEL": "ERROR"<br />      },<br />      "disabled": false,<br />      "autoApprove": []<br />    }<br />  }<br />}</pre> | アプリ開発者 | 

### Python と Bandit を使用したコード分析の例
<a name="example-of-code-analysis-using-python-and-bandit"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コード分析を実行します。 | Python と Bandit を使用してコード分析を実行するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | アプリ開発者 | 

### Terraform と Checkov を使用したコード分析の例
<a name="example-of-code-analysis-using-terraform-and-checkov"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コード分析を実行します。 | Terraform と Checkov を使用してコード分析を実行するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | アプリ開発者 | 

### 高度なスキャン機能の例
<a name="example-of-advanced-scanning-capabilities"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ターゲットスキャンを実行します。 | ターゲットスキャンの実行に使用できるリクエストの例を次に示します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | アプリ開発者 | 
| コード生成でセキュリティスキャンを使用します。 | コード生成ループを使用してセキュリティ検出結果を解決するには、次のステップを使用します (この例では、コーディングアシスタントとして Kiro を使用します）。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | アプリデベロッパー | 

## トラブルシューティング
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| 環境設定の問題 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 
| スキャナーの問題 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 
| 統合の問題 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 
| 追加のサポート | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 

## 関連リソース
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-resources"></a>

**AWS ドキュメント**
+ [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html) (AWS ホワイトペーパー*「DevOps の概要 DevOps AWS*」)

**その他の AWS リソース**
+ [セキュリティ、アイデンティティ、コンプライアンスのベストプラクティス](https://aws.amazon.com/architecture/security-identity-compliance/)

**その他のリソース**
+ [Bandit ドキュメント](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [Checkov ドキュメント](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [Model Context Protocol (MCP) ドキュメント](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [OWASP Secure Coding Practices](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/) (OWASP Foundation ウェブサイト)
+ [Semgrep ドキュメント](https://aws.amazon.com/architecture/security-identity-compliance/)

## 追加情報
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-additional"></a>

**自動承認が有効になっている MCP 設定の例**

`autoApprove` 設定されていない場合、ユーザーはスキャンのために MCP セキュリティサーバーにコードを送信する承認を付与する必要があります。`autoApprove` を設定すると、コードアシスタントはユーザーの承認なしにツールを呼び出すことができます。これらのツールはマシン上でローカルに実行され、データは送信されず、コードスキャンのみが実行されます。

次の設定では、すべてのセキュリティスキャン関数の自動実行を有効にします。

```
{
  "mcpServers": {
    "security-scanner": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",
        "security_scanner_mcp_server"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "disabled": false,
      "autoApprove": [
        "scan_with_checkov",
        "scan_with_semgrep", 
        "scan_with_bandit",
        "get_supported_formats"
      ]
    }
  }
}
```

デバッグログ記録を有効にするには、 `"FASTMCP_LOG_LEVEL"`を に設定します`"DEBUG"`。

**セキュリティスキャンツールでサポートされるファイル形式**

このソリューションの各セキュリティスキャンツールは、次のファイル形式をサポートしています。

*Checkov (IaC)*
+ Terraform – .tf、.tfvars、.tfstate
+ CloudFormation – .yaml、.yml、.json、.template
+ Kubernetes – .yaml、.yml
+ Dockerfile – Dockerfile
+ ARM – .json (Azure リソースマネージャー)
+ Bicep – .bicep
+ サーバーレス – .yml、.yaml
+ Helm – .yaml、.yml、.tpl
+ GitHub アクション – .yml、.yaml
+ GitLab\$1ci – .yml、.yaml
+ Ansible – .yml、.yaml

*Semgrep (ソースコード)*
+ Python – .py
+ JavaScript – .js
+ TypeScript – .ts
+ Java – .java
+ Go – .go
+ C – .c
+ C\$1\$1 – .cpp
+ C\$1 – .cs
+ Ruby – .rb
+ PHP – .php
+ Scala – .scala
+ Kotlin – .kt
+ Rust – .rs

*Bandit (Python のみ)*
+ Python – .py

**デモ**

コードスキャンでは、AI アシスタントで次のサンプルプロンプトを試してください。
+ 「現在のスクリプトをスキャンして結果を教えてください。」
+ 「20～60 行をスキャンして結果を教えてください」
+ 「この Amazon DynamoDB テーブルリソースをスキャンして結果を教えてください。」

詳細については、このパターンの GitHub リポジトリにあるこの[コードスキャンデモ](https://github.com/aws-samples/sample-mcp-security-scanner/blob/main/docs/demo_code_scan.gif)を参照してください。

安全なコードを生成するには、次のサンプルプロンプトを試してください。
+ 「Terraform 設定を生成して、暗号化を有効にした DynamoDB テーブルを作成し、セキュリティ上の問題がないかスキャンします。」
+ DynamoDB に書き込み、脆弱性がないかスキャンする Python Lambda 関数を作成します。」
+ 「適切なセキュリティ設定で S3 バケットの CloudFormation テンプレートを生成し、セキュリティチェックに合格することを確認します。」
+ 「ページ分割を使用して DynamoDB をクエリし、セキュリティのベストプラクティスをスキャンする Python スクリプトを作成します。」
+ 「セキュリティを強化したマイクロサービスの Kubernetes デプロイマニフェストを作成し、検証します」

詳細については、このパターンの GitHub リポジトリの[「セキュリティスキャンデモを使用したこのコード生成](https://github.com/aws-samples/sample-mcp-security-scanner/blob/main/docs/demo_code_generation.gif)」を参照してください。

# RAG と ReAct プロンプトを使用して高度な生成 AI チャットベースのアシスタントを開発する
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting"></a>

*Amazon Web Services、Praveen Kumar Jeyarajan、Shuai Cao、Noah Hamilton、Kioua Jackson、Jundong Qiao、Kara Yang*

## 概要
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-summary"></a>

一般的な企業では、データの 70% がサイロ化されたシステムにトラップされています。生成 AI を活用したチャットベースのアシスタントを使用して、自然言語のやり取りを通じて、これらのデータサイロ間のインサイトと関係性を引き出すことができます。生成 AI を最大限に活用するには、出力の信頼性の高さと正確さ、出力に利用可能な企業データが含まれていることが必要となります。チャットベースのアシスタントの成否は、以下によって決まります。
+ 生成 AI モデル (Anthropic Claude 2 など)
+ データソースのベクトル化
+ モデルをプロンプトするための [ReAct フレームワーク](https://www.promptingguide.ai/techniques/react)などの高度な推論手法

このパターンでは、Amazon Simple Storage Service (Amazon S3) バケット、AWS Glue、Amazon Relational Database Service (Amazon RDS) などのデータソースからのデータ取得アプローチを提供します。データからの値の取得は、[検索拡張生成 (RAG)](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) を思考連鎖メソッドでインターリーブすることによって行われます。結果は、企業の保存されたデータ全体を利用する複雑なチャットベースのアシスタントの会話をサポートします。

このパターンでは、Amazon SageMaker のマニュアルと料金データテーブルを例として使用して、生成 AI チャットベースのアシスタントの機能について説明します。料金とサービスの機能に関する質問に回答することにより、顧客が SageMaker サービスを評価できるようにするチャットベースのアシスタントを構築します。このソリューションでは、フロントエンドアプリケーションを構築するための Streamlit ライブラリと、大規模言語モデル (LLM) を搭載したアプリケーションバックエンドを開発するための LangChain フレームワークを使用します。

チャットベースのアシスタントへの質問には、3 つの可能なワークフローのいずれかにルーティングするための初期インテント分類で対応します。最も洗練されたワークフローは、一般的なアドバイザリガイダンスと複雑な料金分析を組み合わせたものです。このパターンは、企業、会社、業界のユースケースに合わせて調整できます。

## 前提条件と制限
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-prereqs"></a>

**前提条件**
+ [AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) がインストールされ、設定されていること
+ [AWS Cloud Development Kit (AWS CDK) ツールキット 2.114.1 以降](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)がインストールされ、設定されていること
+ Python および AWS CDK の基本的な知識
+ インストール済み[Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ [Docker](https://docs.docker.com/get-docker/) がインストールされていること
+ [Python 3.11 以降](https://www.python.org/downloads/)がインストールされ、設定されていること (詳細は、「[ツール](#develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools)」セクションを参照してください)
+ [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) を使用して[有効な AWS アカウント](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html)がブートストラップされていること
+ Amazon Titan および Anthropic Claude [モデルアクセス](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access)が Amazon Bedrock サービスで有効になっていること
+ ターミナル環境における [AWS セキュリティ認証情報](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html) (`AWS_ACCESS_KEY_ID` を含む) の適切な設定

**制限事項**
+ LangChain は、すべての LLM のストリーミングをサポートしているわけではありません。Anthropic Claude モデルはサポートされていますが、AI21 Labs のモデルはサポートされていません。
+ このソリューションは単一 AWS アカウントにデプロイされます。
+ このソリューションは、Amazon Bedrock と Amazon Kendra が利用可能な AWS リージョンでのみデプロイできます。詳細は、[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html#bedrock-regions) と [Amazon Kendra](https://docs.aws.amazon.com/general/latest/gr/kendra.html) のドキュメントを参照してください。

**製品バージョン**
+ Python バージョン 3.11 以降
+ Streamlit バージョン 1.30.0 以降
+ Streamlit-chat バージョン 0.1.1 以降
+ LangChain バージョン 0.1.12 以降
+ AWS CDK バージョン 2.132.1 以降

## アーキテクチャ
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon Athena
+ Amazon Bedrock
+ Amazon Elastic Container Service (Amazon ECS)
+ AWS Glue
+ AWS Lambda
+ Amazon S3
+ Amazon Kendra
+ エラスティックロードバランシング

**ターゲットアーキテクチャ**

AWS CDK コードは、AWS アカウントでチャットベースのアシスタントアプリケーションを設定するのに必要なすべてのリソースをデプロイします。次の図に示すチャットベースのアシスタントアプリケーションは、ユーザーからの SageMaker 関連のクエリに応答するように設計されています。ユーザーは Application Load Balancer を介して、Streamlit アプリケーションをホストする Amazon ECS クラスターを含む VPC に接続します。オーケストレーション Lambda 関数はアプリケーションに接続します。S3 バケットデータソースは、Amazon Kendra と AWS Glue を介して Lambda 関数にデータを提供します。Lambda 関数は Amazon Bedrock に接続して、チャットベースのアシスタントユーザーからのクエリ (質問) に応答します。

![\[アーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/4e5856cf-9489-41f8-a411-e3b8d8a50748.png)


1. オーケストレーション Lambda 関数が、LLM プロンプトリクエストを Amazon Bedrock モデル (Claude 2) に送信します。

1. Amazon Bedrock が、LLM レスポンスをオーケストレーション Lambda 関数に返送します。

**オーケストレーション Lambda 関数内のロジックフロー**

ユーザーが Streamlit アプリケーションを通じて質問すると、アプリケーションによってオーケストレーション Lambda 関数が直接呼び出されます。次の図に、Lambda 関数が呼び出されたときのロジックフローを示します。

![\[アーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/70ae4736-06a6-4d3a-903a-edc5c10d78a0.png)

+ ステップ 1 – 入力 `query` (質問) が 3 つのインテントのいずれかに分類されます。
  + 一般的な SageMaker ガイダンスに関する質問
  + 一般的な SageMaker 料金 (トレーニング/推論) に関する質問
  + SageMaker と料金に関する複雑な質問
+ ステップ 2 – 入力 `query` が 3 つのサービスのいずれかを開始します。
  + `RAG Retrieval service`: [Amazon Kendra ](https://aws.amazon.com/kendra/)ベクトルデータベースから関連するコンテキストを取得し、[Amazon Bedrock](https://aws.amazon.com/bedrock/) を介して LLM を呼び出して、取得したコンテキストをレスポンスとして要約します。
  + `Database Query service`: LLM、データベースメタデータ、および関連するテーブルのサンプル行を使用して、入力 `query` を SQL クエリに変換します。Database Query サービスは、[Amazon Athena](https://aws.amazon.com/athena/) を介して SageMaker 料金データベースに対して SQL クエリを実行し、クエリ結果をレスポンスとして要約します。
  + `In-context ReACT Agent service`: レスポンスを提供する前に、入力 `query` を複数のステップに分割します。エージェントは、推論プロセス中に関連情報を取得するためのツールとして `RAG Retrieval service` と `Database Query service` を使用します。推論プロセスとアクションプロセスが完了すると、エージェントはレスポンスとして最終的な回答を生成します。
+ ステップ 3 – オーケストレーション Lambda 関数からのレスポンスが、出力として Streamlit アプリケーションに送信されます。

## ツール
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools"></a>

**AWS サービス**
+ 「[Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)」は、標準 SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析できるようにするインタラクティブなクエリサービスです。
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) は、主要な AI スタートアップ企業や Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ 「[AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
+ 「[Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)」 は、クラスターでのコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。
+ [AWS Glue](https://docs.aws.amazon.com/glue/) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの確実な分類、整理、強化、移動をサポートできます。このパターンでは、AWS Glue クローラーと AWS Glue データカタログテーブルを使用します。
+ [Amazon Kendra](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html) は、自然言語処理と高度な機械学習アルゴリズムを使用して、データから検索に関する質問に対する特定の回答を返すインテリジェント検索サービスです。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、任意の量のデータを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。
+ 「[Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)」は、受信するアプリケーションまたはネットワークのトラフィックを複数のターゲットに分散します。例えば、1 つ以上のアベイラビリティゾーンにある Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、コンテナ、および IP アドレス間でトラフィックを分散できます。

**コードリポジトリ**

このパターンのコードは GitHub の [genai-bedrock-chatbot](https://github.com/awslabs/genai-bedrock-chatbot) リポジトリで入手できます。

コードリポジトリには以下のファイルとフォルダが含まれています。
+ `assets` フォルダ - アーキテクチャ図とパブリックデータセットの静的アセット
+ `code/lambda-container` フォルダ - Lambda 関数で実行される Python コード
+ `code/streamlit-app` フォルダ - Amazon ECS のコンテナイメージとして実行される Python コード
+ `tests` フォルダ - AWS CDK コンストラクトをユニットテストするために実行される Python ファイル
+ `code/code_stack.py` - AWS リソースの作成に使用される AWS CDK コンストラクト Python ファイル
+ `app.py` - ターゲット AWS アカウントで AWS リソースをデプロイするために使用される AWS CDK スタック Python ファイル
+ `requirements.txt` - AWS CDK のためにインストールする必要があるすべての Python 依存関係のリスト
+ `requirements-dev.txt` - AWS CDK でユニットテストスイートを実行するためにインストールする必要があるすべての Python 依存関係のリスト
+ `cdk.json` — リソースの起動に必要な値を提供する入力ファイル


| 
| 
| 注記: AWS CDK コードは、ソリューションをデプロイするために、[L3 (レイヤー 3) コンストラクト](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)と [AWS によって管理される AWS Identity and Access Management (IAM) ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)を使用します。 | 
| --- |

## ベストプラクティス
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-best-practices"></a>
+ ここに示すコード例は、PoC (概念実証) またはパイロットデモ専用です。コードを本番環境に移行する場合は、次のベストプラクティスに従ってください。
  + [Amazon S3 アクセスログ記録が有効になっていること](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)。
  + [VPC フローログが有効になっていること](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。
  + [Amazon Kendra Enterprise Edition インデックス](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/amazon-kendra.html)が有効になっていること。
+ Lambda 関数のモニタリングとアラートを設定します。詳細については、[Lambda 関数をモニタリングおよびトラブルシューティングする](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)を参照してください。Lambda 関数を使用する際の一般的なベストプラクティスについては、[AWS ドキュメント](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)を参照してください。

## エピック
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-epics"></a>

### ローカルマシンで AWS 認証情報をセットアップする
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| スタックをデプロイするアカウントと AWS リージョンの変数をエクスポートします。 | 環境変数を使用して AWS CDK の AWS 認証情報を提供には、次のコマンドを実行します。<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | DevOps エンジニア、AWS DevOps | 
| AWS CLI プロファイルをセットアップします。 | アカウントの AWS CLI プロファイルを設定するには、[AWS ドキュメント](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html)の指示に従います。 | DevOps エンジニア、AWS DevOps | 

### 環境をセットアップします。
<a name="set-up-your-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ローカルマシンにリポジトリを複製します。 | リポジトリのクローンを作成するには、ターミナルで次のコマンドを実行します。<pre>git clone https://github.com/awslabs/genai-bedrock-chatbot.git</pre> | DevOps エンジニア、AWS DevOps | 
| Python 仮想環境を設定し、必要な依存関係をインストールします。 | Python 仮想環境をセットアップするには、次のコマンドを実行します。<pre>cd genai-bedrock-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>必要な依存関係をセットアップするには、次のコマンドを実行します。<pre>pip3 install -r requirements.txt</pre> | DevOps エンジニア、AWS DevOps | 
| AWS CDK 環境をセットアップし、AWS CDK コードを合成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps エンジニア、AWS DevOps | 

### チャットベースのアシスタントアプリケーションを設定してデプロイする
<a name="configure-and-deploy-the-chat-based-assistant-application"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Claude モデルアクセスをプロビジョニングする。 | AWS アカウントの Anthropic Claude モデルアクセスを有効にするには、[Amazon Bedrock ドキュメント](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access)の手順に従います。 | AWS DevOps | 
| アカウントにリソースをデプロイします。 | AWS CDK を使用して AWS アカウントでリソースをデプロイするには、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)デプロイが正常に完了したら、CloudFormation の**出力**セクションにある URL を使用して、チャットベースのアシスタントアプリケーションにアクセスすることができます。 | AWS DevOps、DevOps エンジニア | 
| AWS Glue クローラーを実行し、データカタログテーブルを作成します。 | [AWS Glue クローラー](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)は、データスキーマを動的に保つために使用されます。このソリューションでは、オンデマンドでクローラーを実行することにより、[AWS Glue データカタログテーブル](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html)のパーティションを作成および更新します。CSV データセットファイルが S3 バケットにコピーされたら、AWS Glue クローラーを実行し、テスト用の Data Catalog テーブルスキーマを作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)AWS CDK コードは、AWS Glue クローラーをオンデマンドで実行するように設定しますが、定期的に実行するように[スケジュール](https://docs.aws.amazon.com/glue/latest/dg/schedule-crawler.html)することもできます。 | DevOps エンジニア、AWS DevOps | 
| ドキュメントのインデックス作成を開始する。 | ファイルが S3 バケットにコピーされたら、Amazon Kendra を使用してクロールとインデックス付けを行います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)AWS CDK コードは、Amazon Kendra インデックス同期をオンデマンドで実行するように設定しますが、[スケジュールパラメータ](https://docs.aws.amazon.com/kendra/latest/dg/data-source.html#cron)を使用して定期的に実行することもできます。 | AWS DevOps、DevOps エンジニア | 

### ソリューション内のすべての AWS リソースをクリーンアップする
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS リソースを削除します。 | ソリューションをテストしたら、リソースをクリーンアップします。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps エンジニア、AWS DevOps | 

## トラブルシューティング
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| AWS CDK はエラーを返します。 | AWS CDK の問題に関するヘルプは、[一般的な AWS CDK 問題をトラブルシューティングする](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)を参照してください。 | 

## 関連リソース
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-resources"></a>
+ Amazon Bedrock:
  + [モデルアクセス](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [基盤モデルの推論パラメータ](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Python で Lambda 関数を構築する](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Get started with the AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Working with the AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [AWS での生成 AI Application Builder](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)
+ [LangChain ドキュメント](https://python.langchain.com/docs/get_started/introduction)
+ [Streamlit ドキュメント](https://docs.streamlit.io/)

## 追加情報
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-additional"></a>

**AWS CDK コマンド**

AWS CDK を使用する際は、以下の便利なコマンドに注意してください。
+ アプリ内のすべてのスタックを一覧表示

  ```
  cdk ls
  ```
+ 合成された AWS CloudFormation テンプレートを発行

  ```
  cdk synth
  ```
+ スタックをデフォルトの AWS アカウントとリージョンにデプロイ

  ```
  cdk deploy
  ```
+ デプロイされたスタックを現在の状態と比較

  ```
  cdk diff
  ```
+ AWS CDK ドキュメントを開く

  ```
  cdk docs
  ```
+ CloudFormation スタックを削除し、AWS にデプロイされたリソースを削除

  ```
  cdk destroy
  ```

# Amazon Bedrock エージェントとナレッジベースを使用して、完全に自動化したチャットベースのアシスタントを開発する
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases"></a>

*Amazon Web Services、Jundong Qiao、Shuai Cao、Noah Hamilton、Kioua Jackson、Praveen Kumar Jeyarajan、Kara Yang*

## 概要
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-summary"></a>

多くの組織が、包括的な回答を提供するために多様なデータソースをオーケストレーションできるチャットベースのアシスタントを作成する際に課題に直面します。このパターンでは、簡単なデプロイによりドキュメントとデータベースの両方からクエリに回答できるチャットベースのアシスタントを開発するためのソリューションを示します。

このフルマネージド生成 AI サービスは、[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) をはじめとして、さまざまな高度な基盤モデル (FM) を提供しています。これにより、プライバシーとセキュリティに重点を置いた生成 AI アプリケーションを簡単に効率よく作成できます。ドキュメントの取得において、[検索拡張生成 (RAG)](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html) は重要な機能です。[ナレッジベース](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)を使用して、外部ソースからのコンテキストに関連する情報で FM プロンプトを補強します。[Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) インデックスは、Amazon Bedrock ナレッジベースの背後にあるベクトルデータベースとして機能します。この統合は、不正確さを最小限に抑え、応答が事実関係のドキュメントに確実に基づくようにするための慎重なプロンプトエンジニアリングによって強化されます。データベースクエリの場合、Amazon Bedrock の FM により、テキストクエリが構造化された SQL クエリに変換され、特定のパラメータが組み込まれます。これにより、データベースによって管理される[AWS Glue データベース](https://docs.aws.amazon.com/glue/latest/dg/define-database.html)からデータを正確に取得できます。これらのクエリには [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) が使用されます。

より複雑なクエリを処理し、包括的な回答を得るには、ドキュメントとデータベースの両方から取得された情報が必要です。[Amazon Bedrock エージェント](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) は、複雑なタスクを理解し、オーケストレーションのためによりシンプルなタスクに分割できる自律型エージェントを構築するのに役立つ生成 AI 機能です。簡素化されたタスクから取得されるインサイトが Amazon Bedrock の自律型エージェントによって結び付けられることにより、情報の合成が強化され、より詳細で包括的な回答が得られます。このパターンでは、Amazon Bedrock および関連する生成 AI サービスと自動ソリューション内の機能を使用してチャットベースのアシスタントを構築する方法を説明します。

## 前提条件と制限
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ Docker が[インストールされていること](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK)、 `us-east-1` または に[インストール](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools)および[ブートストラップ](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap) `us-west-2` AWS リージョン
+ AWS CDK Toolkit バージョン 2.114.1 以降、[インストール](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)済み
+ AWS Command Line Interface (AWS CLI)、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済み
+ Python バージョン 3.11 以降が[インストールされていること](https://www.python.org/downloads/)
+ Amazon Bedrock で、Claude 2、Claude 2.1、Claude Instant、Titan Embeddings G1 – Text への[アクセスを有効にすること](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)

**制限事項**
+ このソリューションは 1 つの にデプロイされます AWS アカウント。
+ このソリューションは、Amazon Bedrock と Amazon OpenSearch Serverless がサポートされている AWS リージョン でのみデプロイできます。詳細は、[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) ドキュメントおよび [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-regions) ドキュメントを参照してください。

**製品バージョン**
+ Llama-index バージョン 0.10.6 以降
+ Sqlalchemy バージョン 2.0.23 以降
+ Opensearch-py バージョン 2.4.2 以降
+ Requests\$1aws4auth バージョン 1.2.3 以降
+ AWS SDK for Python (Boto3) バージョン 1.34.57 以降

## アーキテクチャ
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-architecture"></a>

**ターゲットテクノロジースタック**

[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) は、コードでクラウドインフラストラクチャを定義し、それをプロビジョニングするためのオープンソースのソフトウェア開発フレームワークです AWS CloudFormation。このパターンで使用される AWS CDK スタックは、次の AWS リソースをデプロイします。 
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Glue Data Catalog AWS Glue データベースコンポーネントの 。
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon OpenSearch Serverless
+ Amazon Elastic Container Registry (Amazon ECR) 
+ Amazon Elastic Container Service (Amazon ECS)
+ AWS Fargate
+ Amazon Virtual Private Cloud (Amazon VPC)
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 

**ターゲット アーキテクチャ**

![\[Amazon Bedrock ナレッジベースとエージェントを使用したアーキテクチャ図\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


この図は、複数の を使用した AWS リージョン、単一の 内の包括的な AWS クラウドネイティブセットアップを示しています AWS のサービス。チャットベースのアシスタントの主なインターフェイスは、Amazon ECS クラスターでホストされている [Streamlit](https://docs.streamlit.io/) アプリケーションです。[Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/) はアクセシビリティを管理します。このインターフェイスを介して行われたクエリは `Invocation` Lambda 関数をアクティブ化し、それによって Amazon Bedrock エージェントとのインターフェイスが行われます。このエージェントは、Amazon Bedrock ナレッジベースを参照するか、`Agent executor` Lambda 関数を呼び出して、ユーザーの問い合わせに応答します。この関数は、事前定義された API スキーマに従って、エージェントに関連付けられた一連のアクションをトリガーします。Amazon Bedrock ナレッジベースは、OpenSearch Serverless インデックスをベクトルデータベース基盤として使用します。さらに、`Agent executor`関数は Amazon Athena を介して AWS Glue データベースに対して実行される SQL クエリを生成します。

## ツール
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-tools"></a>

**AWS のサービス**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)は、標準 SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析できるようにするインタラクティブなクエリサービスです。
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) は、主要な AI スタートアップ企業や Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) は、 AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。
+ 「[Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)」 は、クラスターでのコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。
+ 受信したアプリケーションまたはネットワークトラフィックを複数のターゲットに分散するには、[Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) を使用します。例えば、1 つまたは複数のアベイラビリティーゾーンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、コンテナ、および IP アドレスにトラフィックを分散できます。
+ [AWS Glue](https://docs.aws.amazon.com/glue/) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。このパターンでは、 クローラと AWS Glue AWS Glue Data Catalog テーブルを使用します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) は、Amazon OpenSearch Service 用のオンデマンドサーバーレス設定です。このパターンでは、OpenSearch Serverless インデックスは Amazon Bedrock ナレッジベースのベクトルデータベースとして機能します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ [Streamlit](https://docs.streamlit.io/) は、データアプリケーションを作成するためのオープンソースの Python フレームワークです。

**コードリポジトリ**

このパターンのコードは、GitHub の [genai-bedrock-agent-chatbot](https://github.com/awslabs/genai-bedrock-agent-chatbot/) リポジトリで入手できます。コードリポジトリには以下のファイルとフォルダが含まれています。
+ `assets` フォルダ – アーキテクチャ図やパブリックデータセットなどの静的アセット。
+ `code/lambdas/action-lambda` フォルダ – Amazon Bedrock エージェントのアクションとして機能する Lambda 関数の Python コード。
+ `code/lambdas/create-index-lambda` フォルダ – OpenSearch Serverless インデックスを作成する Lambda 関数の Python コード。
+ `code/lambdas/invoke-lambda` フォルダ – Amazon Bedrock エージェントを呼び出す Lambda 関数の Python コード。Streamlit アプリケーションから直接呼び出されます。
+ `code/lambdas/update-lambda` フォルダ – を介してリソースがデプロイされた後に AWS リソースを更新または削除する Lambda 関数の Python コード AWS CDK。
+ `code/layers/boto3_layer` フォルダ – すべての Lambda 関数間で共有される Boto3 レイヤーを作成する AWS CDK スタック。
+ `code/layers/opensearch_layer` フォルダ – インデックスを作成するためのすべての依存関係をインストールする OpenSearch Serverless レイヤーを作成する AWS CDK スタック。
+ `code/streamlit-app` フォルダ – Amazon ECS のコンテナイメージとして実行される Python コード。
+ `code/code_stack.py` – AWS リソースを作成する AWS CDK コンストラクト Python ファイル。
+ `app.py` – ターゲット AWS アカウントに AWS リソースをデプロイする AWS CDK スタック Python ファイル。
+ `requirements.txt` – にインストールする必要があるすべての Python 依存関係のリスト AWS CDK。
+ `cdk.json` — リソースの作成に必要な値を提供する入力ファイル。また、`context/config` フィールドでは、状況に応じてソリューションをカスタマイズできます。カスタマイズの詳細は、「[追加情報](#develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional)」セクションを参照してください。

## ベストプラクティス
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-best-practices"></a>
+ ここに示すコード例は、PoC (概念実証) またはパイロットのみを目的としています。コードを本番環境に移行する場合は、次のベストプラクティスに従ってください。
  + [Amazon S3 アクセスログ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)を有効にする
  + [VPC フローログ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)を有効にする
+ Lambda 関数のモニタリングとアラートを設定します。詳細については、「[Lambda 関数をモニタリングおよびトラブルシューティングする](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)」を参照してください。ベストプラクティスについては、「 [AWS Lambda 関数を使用するためのベストプラクティス](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)」を参照してください。

## エピック
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-epics"></a>

### ローカルワークステーションで AWS 認証情報を設定する
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アカウントとリージョンの変数をエクスポートする。 | 環境変数 AWS CDK を使用して の AWS 認証情報を提供するには、次のコマンドを実行します。<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | AWS DevOps、DevOps エンジニア | 
|  AWS CLI 名前付きプロファイルを設定します。 | アカウント AWS CLI の名前付きプロファイルを設定するには、[「設定と認証情報ファイルの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」の手順に従います。 | AWS DevOps、DevOps エンジニア | 

### 環境をセットアップします。
<a name="set-up-your-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ローカルワークステーションにリポジトリのクローンを作成する。 | リポジトリのクローンを作成するには、ターミナルで次のコマンドを実行します。<pre>git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git</pre> | DevOps エンジニア、AWS DevOps | 
| Python 仮想環境をセットアップする。 | Python 仮想環境をセットアップするには、次のコマンドを実行します。<pre>cd genai-bedrock-agent-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>必要な依存関係をセットアップするには、次のコマンドを実行します。<pre>pip3 install -r requirements.txt</pre> | DevOps エンジニア、AWS DevOps | 
|  AWS CDK 環境をセットアップします。 | コードを AWS CloudFormation テンプレートに変換するには、 コマンドを実行します`cdk synth`。 | AWS DevOps、DevOps エンジニア | 

### アプリケーションを設定してデプロイする
<a name="configure-and-deploy-the-application"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アカウントにリソースをデプロイします。 |  AWS アカウント を使用して にリソースをデプロイするには AWS CDK、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.html)デプロイが正常に完了したら、CloudFormation コンソールの**出力**タブにある URL を使用して、チャットベースのアシスタントアプリケーションにアクセスできます。 | DevOps エンジニア、AWS DevOps | 

### ソリューション内のすべての AWS リソースをクリーンアップする
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS リソースを削除します。 | ソリューションをテストした後、リソースをクリーンアップするには、`cdk destroy` コマンドを実行します。 | AWS DevOps、DevOps エンジニア | 

## 関連リソース
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-resources"></a>

**AWS ドキュメント**
+ Tag Amazon Bedrock リソース:
  + [モデルアクセス](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [基盤モデルの推論パラメータ](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
  + [Amazon Bedrock のエージェント](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
  + [Amazon Bedrock ナレッジベース](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)
+ [Python で Lambda 関数を構築する](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ AWS CDK リソース:
  + [の使用を開始する AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [一般的な AWS CDK 問題のトラブルシューティング](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Python AWS CDK での の使用](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [での生成 AI Application Builder AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**その他の AWS リソース**
+ [Amazon OpenSearch Serverless 用ベクトルエンジン](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)

**その他のリソース**
+ [LlamaIndex ドキュメント](https://docs.llamaindex.ai/en/stable/)
+ [Streamlit ドキュメント](https://docs.streamlit.io/)

## 追加情報
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional"></a>

**チャットベースのアシスタントを独自のデータでカスタマイズする**

カスタムデータを統合してソリューションをデプロイするには、以下の構造化されたガイドラインに従ってください。これらのステップは、シームレスで効率的な統合プロセスを実現するように設計されており、カスタムデータを使用して効果的にソリューションをデプロイできます。

*ナレッジベースのデータ統合の場合*

**データ準備**

1. `assets/knowledgebase_data_source/` ディレクトリの場所を確認します。

1. データセットをこのフォルダに配置します。

**設定の調整**

1. `cdk.json` ファイルを開きます。

1. `context/configure/paths/knowledgebase_file_name` フィールドに移動し、それに応じて更新します。

1. `bedrock_instructions/knowledgebase_instruction` フィールドに移動し、新しいデータセットの意味合いとコンテキストを正確に反映するように更新します。

*構造化データ統合の場合*

**データの整理**

1. `assets/data_query_data_source/` ディレクトリに `tabular_data` などのサブディレクトリを作成します。

1. 構造化データセット (CSV、JSON、ORC、Parquet などの許容される形式) をこの新しく作成されたサブフォルダに配置します。

1. 既存のデータベースに接続する場合は、`code/lambda/action-lambda/build_query_engine.py` の `create_sql_engine()` 関数を更新してデータベースに接続します。

**設定とコードの更新**

1. `cdk.json` ファイルで、新しいデータパスに合わせて `context/configure/paths/athena_table_data_prefix` フィールドを更新します。

1. データセットに対応する新しい text-to-SQL の例を組み込んで `code/lambda/action-lambda/dynamic_examples.csv` を修正します。

1. 構造化データセットの属性をミラーリングするように `code/lambda/action-lambda/prompt_templates.py` を修正します。

1. `cdk.json` ファイルで、`Action group` Lambda 関数の目的と機能の説明を記述するように `context/configure/bedrock_instructions/action_group_description` フィールドを更新します。

1. `assets/agent_api_schema/artifacts_schema.json` ファイルに、`Action group` Lambda 関数の新しい機能の説明を記述します。

*一般的な更新*

`cdk.json` ファイルの `context/configure/bedrock_instructions/agent_instruction` セクションに、新しく統合されたデータを考慮して、Amazon Bedrock エージェントの意図した機能と設計目的の包括的な説明を記述します。

# Amazon Bedrock と Amazon Transcribe を使用して音声入力から組織の知識を文書化する
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe"></a>

*Amazon Web Services、Praveen Kumar Jeyarajan、Jundong Qiao、Rajiv Upadhyay、Megan Wu*

## 概要
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-summary"></a>

組織の成功とレジリエンスを確保するためには、組織の知識を記録することが最優先事項です。組織の知識とは、従業員が長期にわたって蓄積した集合的な知恵、インサイト、経験のことで、多くの場合は本質的に暗黙的で、非公式に受け継がれます。この豊富な情報には、他では文書化されていないような複雑な問題に対する独自のアプローチ、ベストプラクティス、解決策が含まれています。この知識を形式化して文書化することにより、企業は組織の記憶を保持し、イノベーションを促進し、意思決定プロセスを強化し、新入社員の学習曲線を加速させることができます。さらに、連携を促進し、個人に権限を与え、継続的な改善の文化を育みます。組織の知識を活用すると、最終的に、企業は最も重要なアセットである従業員の集合的インテリジェンスに基づいて、課題を乗り越え、成長を促進し、動的なビジネス環境で競争上の優位性を維持することができます。

このパターンでは、上級従業員からの音声記録を通じて組織の知識を記録する方法について説明します。[Amazon Transcribe](https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html) と [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) を使用して、体系的な文書化と検証を行います。この非公式な知識を文書化することにより、知識を保存し、後続の従業員の仲間と共有することができます。この取り組みは、運用上の優秀性をサポートするものであり、直接的な経験を通じて獲得した実践的な知識を組み込むことにより、トレーニングプログラムの有効性を向上させます。

## 前提条件と制限
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ Docker が[インストールされていること](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK) バージョン 2.114.1 以降が `us-east-1` または `us-west-2` AWS リージョンに[インストール](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools)および[ブートストラップされていること](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap)
+ AWS CDK ツールキットバージョン 2.114.1 以降が[インストールされていること](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ [インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済みの AWS コマンドラインインターフェイス (AWS CLI)
+ Python バージョン 3.12 以降が[インストールされていること](https://www.python.org/downloads/)
+ Amazon Transcribe、Amazon Bedrock、Amazon Simple Storage Service (Amazon S3)、および AWS Lambda リソースを作成するためのアクセス権限

**制限**
+ このソリューションは単一 AWS アカウントにデプロイされます。
+ このソリューションは、Amazon Bedrock と Amazon Transcribe が利用可能な AWS リージョンでのみデプロイできます。詳細は、[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) と [Amazon Transcribe](https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html#tsc-regions) のドキュメントを参照してください。
+ オーディオファイルは、Amazon Transcribe がサポートする形式である必要があります。サポートされている形式のリストについては、Transcribe ドキュメントの「[Media formats](https://docs.aws.amazon.com/transcribe/latest/dg/how-input.html#how-input-audio)」を参照してください。

**製品バージョン**
+ AWS SDK for Python (Boto3) バージョン 1.34.57 以降
+ LangChain バージョン 0.1.12 以降

## アーキテクチャ
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-architecture"></a>

アーキテクチャは、AWS でのサーバーレスワークフローを表します。[AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) は、オーディオ処理、テキスト分析、ドキュメント生成のために Lambda 関数を調整します。次の図に、*ステートマシン*とも呼ばれる Step Functions ワークフローを示します。

![\[ドキュメントを生成する Step Functions ステートマシンのアーキテクチャ図\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/f1e0106d-b046-4adc-9718-c299efb7b436/images/e90298ca-1b7f-4c3e-97bd-311a9d5a4997.png)


ステートマシンの各ステップは、個別の Lambda 関数によって処理されます。ドキュメント生成プロセスの手順は次のとおりです。

1. `preprocess` Lambda 関数が、Step Functions に渡された入力を検証し、提供された Amazon S3 URI フォルダパスに存在するすべてのオーディオファイルを一覧表示します。ワークフローのダウンストリーム Lambda 関数は、ファイルリストを使用してドキュメントを検証、要約、生成します。

1. `transcribe` Lambda 関数が Amazon Transcribe を使用してオーディオファイルをテキストトランスクリプトに変換します。この Lambda 関数は、文字起こしプロセスを開始し、スピーチをテキストに正確に変換し、後続の処理のために保存します。

1. `validate` Lambda 関数がテキストトランスクリプトを分析し、最初の質問に対する応答の関連性を判断します。Amazon Bedrock で大規模言語モデル (LLM) を使用することにより、トピック関連の回答を特定してトピック外の回答から分離します。

1. `summarize` Lambda 関数が Amazon Bedrock を使用して、トピック関連の回答の一貫した簡潔な概要を生成します。

1. `generate` Lambda 関数が、概要を構造化されたドキュメントにアセンブルします。事前定義されたテンプレートに従ってドキュメントをフォーマットし、追加の必要なコンテンツやデータを含めることができます。

1. いずれかの Lambda 関数が失敗すると、Amazon Simple Notiﬁcation Service (Amazon SNS) から E メール通知が送信されます。

このプロセス全体をとおして、AWS Step Functions は各 Lambda 関数が正しい順序で開始されることを確認します。このステートマシンでは、効率を向上させるための並列処理が可能です。Amazon S3 バケットは中央ストレージリポジトリとして機能し、関連するさまざまなメディアおよびドキュメント形式を管理することでワークフローをサポートします。

## ツール
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-tools"></a>

**AWS サービス**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) は、主要な AI スタートアップ企業や Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、量にかかわらず、データを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)は、AWS Lambda関数と他のAWS サービスを組み合わせてビジネスクリティカルなアプリケーションを構築できるサーバーレスオーケストレーションサービスです。 
+ [Amazon Transcribe](https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html) は、機械学習モデルを使用して音声をテキストに変換する自動音声認識サービスです。

**その他のツール**
+ [LangChain](https://python.langchain.com/docs/get_started/introduction/) は、言語モデル (LLM) を利用するアプリケーションを開発するためのフレームワークです。

**コードリポジトリ**

このパターンのコードは、GitHub の [genai-knowledge-capture](https://github.com/aws-samples/genai-knowledge-capture) リポジトリで入手できます。

コードリポジトリには以下のファイルとフォルダが含まれています。
+ `assets` フォルダ - アーキテクチャ図やパブリックデータセットなど、ソリューションの静的アセット
+ `code/lambdas` フォルダ - すべての Lambda 関数のための Python コード
  + `code/lambdas/generate` フォルダ - S3 バケット内の要約データからドキュメントを生成する Python コード
  + `code/lambdas/preprocess` フォルダ - Step Functions ステートマシンの入力を処理する Python コード
  + `code/lambdas/summarize` フォルダ - Amazon Bedrock サービスを使用して文字起こしデータを要約する Python コード
  + `code/lambdas/transcribe` フォルダ - Amazon Transcribe を使用してスピーチデータ (オーディオファイル) をテキストに変換する Python コード
  + `code/lambdas/validate` フォルダ - すべての回答が同じトピックに関連しているかどうかを検証する Python コード
+ `code/code_stack.py` - AWS リソースの作成に使用される AWS CDK コンストラクト Python ファイル
+ `app.py` - ターゲット AWS アカウントで AWS リソースをデプロイするために使用される AWS CDK アプリケーション Python ファイル
+ `requirements.txt` - AWS CDK のためにインストールする必要があるすべての Python 依存関係のリスト
+ `cdk.json` - リソースの作成に必要な値を提供する入力ファイル

## ベストプラクティス
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-best-practices"></a>

ここに示すコード例は、PoC (概念実証) またはパイロットのみを目的としています。ソリューションを本番環境に移行する場合は、次のベストプラクティスに従ってください。
+ [Amazon S3 アクセスログ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)を有効にする
+ [VPC フローログ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)を有効にする

## エピック
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-epics"></a>

### ローカルワークステーションで AWS 認証情報をセットアップする
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アカウントと AWS リージョンの変数をエクスポートする。 | 環境変数を使用して AWS CDK の AWS 認証情報を提供するには、次のコマンドを実行します。<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | AWS DevOps、DevOps エンジニア | 
| AWS CLI 名前付きプロファイルをセットアップする。 | アカウントに AWS CLI 名前付きプロファイルをセットアップするには、「[Configuration and credential file settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」の手順に従います。 | AWS DevOps、DevOps エンジニア | 

### 環境をセットアップします。
<a name="set-up-your-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ローカルワークステーションにリポジトリのクローンを作成する。 | [genai-knowledge-capture](https://github.com/aws-samples/genai-knowledge-capture) リポジトリのクローンを作成するには、ターミナルで次のコマンドを実行します。<pre>git clone https://github.com/aws-samples/genai-knowledge-capture</pre> | AWS DevOps、DevOps エンジニア | 
| (オプション) オーディオファイルを置き換える。 | サンプルアプリケーションをカスタマイズして独自のデータを組み込むには、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | AWS DevOps、DevOps エンジニア | 
| Python 仮想環境をセットアップする。 | Python 仮想環境をセットアップするには、次のコマンドを実行します。<pre>cd genai-knowledge-capture<br />python3 -m venv .venv<br />source .venv/bin/activate<br />pip install -r requirements.txt</pre> | AWS DevOps、DevOps エンジニア | 
| AWS CDK コードを合成する。 | コードを AWS CloudFormation スタック設定に変換するには、次のコマンドを実行します。<pre>cdk synth</pre> | AWS DevOps、DevOps エンジニア | 

### ソリューションを設定してデプロイする
<a name="configure-and-deploy-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 基盤モデルアクセスをプロビジョニングする。 | AWS アカウントの Anthropic Claude 3 Sonnet モデルへのアクセスを有効にします。手順については、Bedrock ドキュメントの「[Add model access](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#model-access-add)」を参照してください。 | AWS DevOps | 
| アカウントにリソースをデプロイします。 | AWS CDK を使用して AWS アカウントでリソースをデプロイするには、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | AWS DevOps、DevOps エンジニア | 
| Amazon SNS トピックを購読します。 | 通知用に Amazon SNS トピックを登録するには、次の手順を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | AWS 全般 | 

### ソリューションをテストする
<a name="test-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ステートマシンを実行します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | アプリ開発者、AWS 全般 | 

### ソリューション内のすべての AWS リソースをクリーンアップする
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS リソースを削除します。 | ソリューションをテストしたら、リソースをクリーンアップします。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | AWS DevOps、DevOps エンジニア | 

## 関連リソース
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-resources"></a>

**AWS ドキュメント**
+ Tag Amazon Bedrock リソース:
  + [モデルアクセス](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [基盤モデルの推論パラメータ](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ AWS CDK リソース:
  + [Get started with the AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [Working with the AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
  + [Troubleshooting common AWS CDK issues](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Toolkit commands](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-commands)
+ AWS Step Functions リソース:
  + [Getting started with AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
  + [トラブルシューティング](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html)
+ [Python で Lambda 関数を構築する](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [AWS での生成 AI Application Builder](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**その他のリソース**
+ [LangChain ドキュメント](https://python.langchain.com/docs/get_started/introduction)

# Amazon Personalize を使用して、パーソナライズされ再ランク付けされたレコメンデーションを生成します
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize"></a>

*Mason Cahill、Matthew Chasse、Tayo Olajide、Amazon Web Services*

## 概要
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-summary"></a>

このパターンは、Amazon Personalize を使用して、ユーザーからのリアルタイムのユーザーインタラクションデータの取り込みに基づいて、ユーザー向けにパーソナライズされたレコメンデーション (再ランク付けされたレコメンデーションを含む) を生成する方法を示しています。このパターンで使用されるシナリオの例は、ペット養子縁組ウェブサイトに基づいています。このウェブサイトでは、ユーザーとのやり取り (たとえば、ユーザーが訪問したペットなど) に基づいてユーザー向けのレコメンデーションが生成されます。シナリオ例に従うことで、Amazon Kinesis Data Streams を使用してインタラクションデータを取り込み、AWS Lambda を使用してレコメンデーションを生成してレコメンデーションを再ランク付けする方法と、Amazon Data Firehose を使用してデータを Amazon Simple Storage Service (Amazon S3) バケットに保存する方法を学習します。また、AWS Step Functions を使用して、レコメンデーションを生成するソリューションバージョン (つまり、トレーニング済みモデル) を管理するステートマシンを構築する方法も学びます。

## 前提条件と制限
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-prereqs"></a>

**前提条件**
+ 「[ブートストラップ](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)」された AWS Cloud Development Kit (AWS CDK) を使用したアクティブな「[AWS アカウント](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/)」
+ 認証情報が設定された「[AWS コマンドラインインターフェイス(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」
+ 「[Python 3.9](https://www.python.org/downloads/release/python-390/)」

**製品バージョン**
+ Python 3.9
+ AWS CDK 2.23.0 以降
+ AWS CLI 2.7.27 以降

## アーキテクチャ
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-architecture"></a>

**テクノロジースタック**
+ Amazon Data Firehose
+ Amazon Kinesis Data Streams
+ Amazon Personalize
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Cloud Development Kit (AWS CDK)
+ AWS コマンドラインインターフェイス (AWS CLI)
+ AWS Lambda
+ AWS Step Functions

**ターゲットアーキテクチャ**

次の図は、Amazon Personalize にリアルタイムデータを取り込むためのパイプラインを示しています。次に、パイプラインはそのデータを使用して、ユーザー向けにパーソナライズされ、ランクが変更されたレコメンデーションを生成します。

![\[Amazon Personalize データインジェストアーキテクチャ\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/42eb193b-2347-408a-8b25-46beeb3b29ca/images/786dbd56-7d7f-41bb-90f6-d4485d73fe15.png)


この図表は、次のワークフローを示しています:

1. Kinesis Data Streams は、リアルタイムのユーザーデータ (例: 訪問したペットなどのイベント) を取り込み、Lambda と Firehose で処理します。

1. Lambda 関数は Kinesis データストリームからのレコードを処理し、レコード内のユーザーインタラクションを Amazon Personalize のイベントトラッカーに追加するための API コールを行います。

1. 時間ベースのルールは Step Functions ステートマシンを呼び出し、Amazon Personalize のイベントトラッカーからのイベントを使用して、レコメンデーションモデルと再ランク付けモデルの新しいソリューションバージョンを生成します。

1. Amazon Personalize「[キャンペーン](https://docs.aws.amazon.com/personalize/latest/dg/campaigns.html)」は、ステートマシンによって新しいソ「[リューションバージョン](https://docs.aws.amazon.com/personalize/latest/dg/creating-a-solution-version.html)」を使用するように更新されます。

1. Lambda は Amazon Personalize 再ランキングキャンペーンを呼び出して、おすすめ商品のリストを再ランク付けします。

1. Lambda は Amazon Personalize レコメンデーションキャンペーンを呼び出して、おすすめ商品のリストを取得します。

1. Firehose はイベントを S3 バケットに保存し、そこで履歴データとしてアクセスできます。

## ツール
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-tools"></a>

AWS ツール
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ 「[AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
+ 「[Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)」を使用すると、リアルタイムの「[ストリーミングデータ](https://aws.amazon.com/streaming-data/)」を他の AWS サービス、カスタム HTTP エンドポイント、サードパーティーのサービスプロバイダーが所有する HTTP エンドポイントに提供できます。
+ 「[Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html)」は、データレコードの大量のストリームをリアルタイムで収集し、処理するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[Amazon Personalize](https://docs.aws.amazon.com/personalize/latest/dg/what-is-personalize.html)」はフルマネージド型の機械学習 (ML) サービスで、データに基づいてユーザー向けの商品レコメンデーションを作成できます。
+ 「[AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)」は、Lambda 関数と他の AWS サービスを組み合わせてビジネスクリティカルなアプリケーションを構築できるサーバーレスオーケストレーションサービスです。

その他のツール
+ 「[pytest](https://docs.pytest.org/en/7.2.x/index.html)」は、小さくて読みやすいテストを書くための Python フレームワークです。
+ 「[Python](https://www.python.org/)」は汎用のコンピュータープログラミング言語です。

**Code**

このパターンのコードは、GitHub 内の「[Animal Recommender](https://github.com/aws-samples/personalize-pet-recommendations)」リポジトリで利用できます。このリポジトリの AWS CloudFormation テンプレートを使用して、サンプルソリューションのリソースをデプロイできます。

**注記**  
Amazon Personalize ソリューションのバージョン、イベントトラッカー、キャンペーンは、ネイティブの CloudFormation リソースを拡張する (インフラストラクチャ内の)「[カスタムリソース](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)」によって支えられています。

## エピック
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-epics"></a>

### インフラストラクチャを作成する
<a name="create-the-infrastructure"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 隔離された Python 環境を作成します。 | Mac/Linux セットアップ[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)Windows セットアップ仮想環境を手動で作成するには、ターミナルから `% .venv\Scripts\activate.bat` コマンドを実行します。 | DevOps エンジニア | 
| CloudFormation のテンプレートを合成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)ステップ 2 では、`CDK_ENVIRONMENT` は `config/{env}.yml` ファイルを参照します。 | DevOps エンジニア | 
| リソースをデプロイし、インフラストラクチャーを構築します。 | ソリューションリソースをデプロイするには、ターミナルから `./deploy.sh` コマンドを実行します。このコマンドは、必要な Python 依存関係をインストールします。Python スクリプトは、S3 バケットと AWS Key Management Service (AWS KMS) キーを作成し、最初にモデルを作成するためのシードデータを追加します。最後に、スクリプトは `cdk deploy` を実行し、残りのインフラストラクチャを作成します。最初のモデルトレーニングはスタックの作成中に行われます。スタックの作成が完了するまでに、最大 2 時間かかることがあります。 | DevOps エンジニア | 

## 関連リソース
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-resources"></a>
+ 「[アニマルレコメンダー](https://github.com/aws-samples/personalize-pet-recommendations)」(GitHub)
+ 「[AWS CDK リファレンスドキュメント](https://docs.aws.amazon.com/cdk/api/v2/)」
+ 「[Boto3 ドキュメント](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)」
+ 「[Amazon Personalize で選択したビジネス指標に最適化されたパーソナライズされたレコメンデーションを最適化](https://aws.amazon.com/blogs/machine-learning/optimize-personalized-recommendations-for-a-business-metric-of-your-choice-with-amazon-personalize/)」(AWS 機械学習 ブログ)。

## 追加情報
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-additional"></a>

ペイロードとレスポンスの例

Lambda 関数の推奨事項

レコメンデーションを取得するには、以下の形式のペイロードを含むレコメンデーション Lambda 関数にリクエストを送信します。

```
{
  "userId": "3578196281679609099",
  "limit": 6
}
```

次のレスポンス例には、アニマルグループのリストが含まれています。

```
[{"id": "1-domestic short hair-1-1"},
{"id": "1-domestic short hair-3-3"},
{"id": "1-domestic short hair-3-2"},
{"id": "1-domestic short hair-1-2"},
{"id": "1-domestic short hair-3-1"},
{"id": "2-beagle-3-3"},
```

`userId` フィールドを省略すると、関数は一般的な推奨事項を返します。

Lambda 関数の再ランク付け

再ランク付けを使用するには、再ランク付けの Lambda 関数にリクエストを送信します。ペイロードには、再ランク付けの対象となるすべてのアイテム ID の `userId` とそのメタデータが含まれます。以下のデータ例では、`animal_species_id` (1=猫、2=犬) には Oxford Pets クラスを使用し、`animal_age_id` および `animal_size_id` には 1 ～ 5 の整数を使用しています。

```
{
   "userId":"12345",
   "itemMetadataList":[
      {
         "itemId":"1",
         "animalMetadata":{
            "animal_species_id":"2",
            "animal_primary_breed_id":"Saint_Bernard",
            "animal_size_id":"3",
            "animal_age_id":"2"
         }
      },
      {
         "itemId":"2",
         "animalMetadata":{
            "animal_species_id":"1",
            "animal_primary_breed_id":"Egyptian_Mau",
            "animal_size_id":"1",
            "animal_age_id":"1"
         }
      },
      {
         "itemId":"3",
         "animalMetadata":{
            "animal_species_id":"2",
            "animal_primary_breed_id":"Saint_Bernard",
            "animal_size_id":"3",
            "animal_age_id":"2"
         }
      }
   ]
}
```

Lambda 関数はこれらの項目を再ランク付けし、項目 ID と Amazon Personalize からのダイレクトレスポンスを含む順序付きリストを返します。これは、商品が属するアニマルグループとそのスコアをランク付けしたリストです。Amazon Personalize は、「[ユーザーパーソナライズ](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html)」と「[パーソナライズランキング](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-search.html)」のレシピを使用して、各項目のスコアをレコメンデーションに含めます。これらのスコアは、ユーザーが次にどのアイテムを選ぶかについて、Amazon Personalize の相対的な確実性を表します。スコアが高いほど、確実性が高くなります。

```
{
   "ranking":[
      "1",
      "3",
      "2"
   ],
   "personalizeResponse":{
      "ResponseMetadata":{
         "RequestId":"a2ec0417-9dcd-4986-8341-a3b3d26cd694",
         "HTTPStatusCode":200,
         "HTTPHeaders":{
            "date":"Thu, 16 Jun 2022 22:23:33 GMT",
            "content-type":"application/json",
            "content-length":"243",
            "connection":"keep-alive",
            "x-amzn-requestid":"a2ec0417-9dcd-4986-8341-a3b3d26cd694"
         },
         "RetryAttempts":0
      },
      "personalizedRanking":[
         {
            "itemId":"2-Saint_Bernard-3-2",
            "score":0.8947961
         },
         {
            "itemId":"1-Siamese-1-1",
            "score":0.105204
         }
      ],
      "recommendationId":"RID-d97c7a87-bd4e-47b5-a89b-ac1d19386aec"
   }
}
```

Amazon Kinesis スペイロード

Amazon Kinesis に送信するペイロードの形式は次のとおりです。

```
{
    "Partitionkey": "randomstring",
    "Data": {
        "userId": "12345",
        "sessionId": "sessionId4545454",
        "eventType": "DetailView",
        "animalMetadata": {
            "animal_species_id": "1",
            "animal_primary_breed_id": "Russian_Blue",
            "animal_size_id": "1",
            "animal_age_id": "2"
        },
        "animal_id": "98765"
        
    }
}
```

**注記**  
認証されていないユーザーの場合、`userId` フィールドは削除されます。

# SageMaker AI と Hybrid を使用して、ローカルでの開発からスケーラブルな実験に至るまでの機械学習ワークフローを合理化する
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker"></a>

*Amazon Web Services、David Sauerwein、Marco Geiger、Julian Ferdinand Grueber*

## 概要
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-summary"></a>

このパターンでは、Amazon SageMaker AI でのローカルテストから本番稼働に至るまで、機械学習 (ML) アルゴリズムを設定および実行する統一されたアプローチを提供します。ML アルゴリズムがこのパターンの焦点となりますが、そのアプローチは特徴量エンジニアリング、推論、ML パイプライン全体に及びます。このパターンでは、サンプルユースケースを通じて、ローカルスクリプト開発から SageMaker AI トレーニングジョブへの移行について説明します。

一般的な ML ワークフローでは、ローカルマシンでソリューションを開発およびテストし、クラウドで大規模な実験 (異なるパラメータを使用した実験など) を実行して、承認されたソリューションをクラウドにデプロイします。その後、デプロイされたソリューションをモニタリングして保守する必要があります。通常、このワークフローに対する統一されたワークフローがない場合、開発者は各段階でコードのリファクタリングを実行する必要が生じます。ソリューションが多数のパラメータに依存しており、そのパラメータがこのワークフローのいずれかの段階で変更される可能性があると、整合性と一貫性の維持がさらに困難になりかねません。

このパターンでは、このような課題に対処します。まず、実行環境 (ローカルマシン、コンテナ、SageMaker AI) にかかわらず一貫性を保つ統一ワークフローを提供することで、環境間でのコードのリファクタリングを不要にします。次に、Hydra の設定システムを通じてパラメータ管理を簡素化します。このシステムでは、パラメータが個別の設定ファイルに定義されているため、変更や組み合わせが容易です。また、各実行の設定が自動的にログに記録されます。このパターンがこれらの課題にどのように対処するかについては、「[追加情報](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional)」を参照してください。

## 前提条件と制限
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ SageMaker AI トレーニングジョブをデプロイおよび開始するための AWS Identity and Access Management (IAM) [ユーザーロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) 
+ AWS Command Line Interface (AWS CLI) バージョン 2.0 以降[がインストールされ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)、[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)されている
+ [Poetry](https://python-poetry.org/) バージョン 1.8 以降かつ 2.0 以前をインストール済み
+ [Docker](https://www.docker.com/) をインストール済み
+ Python [バージョン 3.10.x](https://www.python.org/downloads/release/python-31011/)

**制限事項**
+ 現在、コードは SageMaker AI トレーニングジョブのみを対象としています。処理ジョブや SageMaker AI パイプライン全体に容易に拡張できます。
+ 完全に本番稼働化された SageMaker AI のセットアップでは、追加の詳細設定を行う必要があります。例としては、コンピューティングとストレージの custom AWS Key Management Service (AWS KMS) キーや、ネットワーク設定などがあります。これらの追加オプションは、`config` フォルダの専用サブフォルダにある Hydra を使用して設定することもできます。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS サービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

## アーキテクチャ
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-architecture"></a>

ソリューションアーキテクチャを次の図に示します。

![\[SageMaker AI トレーニングまたは HPO ジョブを作成して実行するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/1db57484-f85c-49a6-b870-471dade02b26/images/d80e7474-a975-4d92-8f66-2d34e33053fd.png)


この図表は、次のワークフローを示しています:

1. データサイエンティストは、Docker や SageMaker AI を必要とせずに、ローカル環境でのアルゴリズムの小規模な反復処理、パラメータの調整、トレーニングスクリプトの迅速なテストを実行できます (詳細については、[エピック](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics)の「クイックテストのためにローカルで実行します」タスクを参照してください)。

1. アルゴリズムが適切であることを確認したら、データサイエンティストは Docker イメージを構築し、`hydra-sm-artifact` という名前の Amazon Elastic Container Registry (Amazon ECR) リポジトリにプッシュします (詳細については、エピックの「[SageMaker AI でワークフローを実行する](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics)」を参照してください)。

1. データサイエンティストは、Python スクリプトを使用して SageMaker AI トレーニングジョブまたはハイパーパラメータの最適化 (HPO) ジョブを開始します。通常のトレーニングジョブの場合、調整された設定は `hydra-sample-config` という名前の Amazon Simple Storage Service (Amazon S3) バケットに書き込まれます。HPO ジョブの場合、`config` フォルダにあるデフォルト設定セットが適用されます。

1. SageMaker AI トレーニングジョブが、Docker イメージをプルし、Amazon S3 バケット `hydra-sample-data` から入力データを読み取り、Amazon S3 バケット `hydra-sample-config` から設定を取得するか、デフォルト設定を使用します。トレーニング後、ジョブが出力データを Amazon S3 バケット `hydra-sample-data` に保存します。

**自動化とスケール**
+ 自動トレーニング、再トレーニング、推論では、 AWS CLI コードを [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)、、[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)[Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) などのサービスと統合できます。
+ スケーリングは、インスタンスサイズの設定を変更するか、分散トレーニングの設定を追加することで実現できます。

## ツール
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-tools"></a>

**AWS のサービス**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。このパターンでは、 AWS CLI は初期リソース設定とテストの両方に役立ちます。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) はマネージド型の機械学習 (ML) サービスで、ML モデルの構築とトレーニングを行い、それらを本番稼働環境に対応したホスティング環境にデプロイします。SageMaker AI Training は、大規模な ML モデルのトレーニングを可能にする SageMaker AI 内の完全マネージド型 ML サービスです。このツールは、組み込みのスケーラビリティと他の との統合を利用して、トレーニングモデルの計算上の需要を効率的に処理できます AWS のサービス。SageMaker AI Training はカスタムアルゴリズムとコンテナもサポートしているため、幅広い ML ワークフローに柔軟に対応できます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ [Docker](https://www.docker.com/) は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしての Platform as a Service (PaaS) 製品のセットです。このパターンでは、開発からデプロイまでのさまざまな段階で一貫した環境を確保し、依存関係とコードを確実にパッケージ化するために使用されています。Docker のコンテナ化により、ワークフロー全体でのスケーリングとバージョン管理が容易になりました。
+ [Hydra](https://hydra.cc/) は、複数の設定と動的リソース管理を柔軟に処理できる設定管理ツールです。環境設定の管理に役立ち、さまざまな環境でのシームレスなデプロイを可能にします。Hydra の詳細については、「[追加情報](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional)」を参照してください。
+ 「[Python](https://www.python.org/)」は汎用のコンピュータプログラミング言語です。Python は、ML コードとデプロイワークフローの記述に使用されています。
+ [Poetry](https://python-poetry.org/) は、Python での依存関係管理とパッケージングのためのツールです。

**コードリポジトリ**

このパターンのコードは、GitHub の [configuring-sagemaker-training-jobs-with-hydra](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra) リポジトリで入手できます。

## ベストプラクティス
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-best-practices"></a>
+ SageMaker AI トレーニングジョブをデプロイおよび開始するための IAM ロールを選択します。最小特権の原則に従い、タスクの実行に必要な最小限の権限を付与してください。詳細については、IAM ドキュメントの「[最小限の特権を認める。](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)」と「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。
+ 一時的な認証情報を使用して、ターミナルの IAM ロールにアクセスします。

## エピック
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics"></a>

### 環境をセットアップする
<a name="set-up-the-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 仮想環境を作成してアクティブ化します。 | 仮想環境を作成してアクティブ化するには、リポジトリのルートで次のコマンドを実行します。<pre>poetry install <br />poetry shell</pre> | AWS 全般 | 
| インフラストラクチャを準備します。 | CloudFormation を使用してインフラストラクチャをデプロイするには、次のコマンドを実行します。<pre>aws cloudformation deploy --template-file infra/hydra-sagemaker-setup.yaml --stack-name hydra-sagemaker-setup  --capabilities CAPABILITY_NAMED_IAM</pre> | AWS 全般、DevOps エンジニア | 
| サンプルデータをダウンロードします。 | [openml](https://www.openml.org/) からローカルマシンに入力データをダウンロードするには、次のコマンドを実行します。<pre>python scripts/download_data.py</pre> | AWS 全般 | 
| クイックテストのためにローカルで実行します。 | テストのためにトレーニングコードをローカルで実行するには、次のコマンドを実行します。<pre>python mypackage/train.py data.train_data_path=data/train.csv evaluation.base_dir_path=data</pre>すべての実行のログは、実行時間ごとに `outputs` というフォルダに保存されます。詳細については、[GitHub リポジトリ](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra)の「出力」セクションを参照してください。`--multirun` 機能を使用することで、異なるパラメータで複数のトレーニングを並行して実行することもできます。詳細については、[Hydra のドキュメント](https://hydra.cc/docs/tutorials/basic/running_your_app/multi-run/)を参照してください。 | データサイエンティスト | 

### SageMaker AI でワークフローを実行する
<a name="run-workflows-on-sm"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 環境変数を設定します。 | SageMaker AI でジョブを実行するには、 AWS リージョン と AWS アカウント ID を指定して、次の環境変数を設定します。<pre>export ECR_REPO_NAME=hydra-sm-artifact<br />export image_tag=latest<br />export AWS_REGION="<your_aws_region>" # for instance, us-east-1<br />export ACCOUNT_ID="<your_account_id>"<br />export BUCKET_NAME_DATA=hydra-sample-data-$ACCOUNT_ID<br />export BUCKET_NAME_CONFIG=hydra-sample-config-$ACCOUNT_ID<br />export AWS_DEFAULT_REGION=$AWS_REGION<br />export ROLE_ARN=arn:aws:iam::${ACCOUNT_ID}:role/hydra-sample-sagemaker<br />export INPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/input/<br />export OUTPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/output/</pre> | AWS 全般 | 
| Docker イメージを作成してプッシュします。 | Docker イメージを作成して Amazon ECR リポジトリにプッシュするには、次のコマンドを実行します。<pre>chmod +x scripts/create_and_push_image.sh<br />scripts/create_and_push_image.sh $ECR_REPO_NAME $image_tag $AWS_REGION $ACCOUNT_ID</pre>このタスクは、環境に有効な認証情報があることを前提としています。Docker イメージは、前のタスクの環境変数で指定された Amazon ECR リポジトリにプッシュされ、トレーニングジョブが実行される SageMaker AI コンテナをアクティブ化するために使用されます。 | ML エンジニア、AWS 全般 | 
| 入力データを Amazon S3 にコピーします。 | SageMaker AI トレーニングジョブでは、入力データを取得する必要があります。入力データをデータ用の Amazon S3 バケットにコピーするには、次のコマンドを実行します。<pre>aws s3 cp data/train.csv "${INPUT_DATA_S3_PATH}train.csv" </pre> | データエンジニア、AWS 全般 | 
| SageMaker AI トレーニングジョブを送信します。 | スクリプトの実行を簡素化するには、`default.yaml` ファイルでデフォルトの設定パラメータを指定します。このアプローチでは、実行間の一貫性の維持に加えて、必要に応じてデフォルト設定を柔軟に上書きできます。次の例を参照してください。<pre>python scripts/start_sagemaker_training_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH</pre> | AWS 全般、ML エンジニア、データサイエンティスト | 
| SageMaker AI ハイパーパラメータチューニングを実行します。 | SageMaker AI ハイパーパラメータチューニングの実行は、SageMaker AII トレーニングジョブの送信に似ています。ただし、[start\$1sagemaker\$1hpo\$1job.py](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra/blob/main/scripts/start_sagemaker_hpo_job.py) ファイルで確認できるように、実行スクリプトにはいくつかの重要な点で相違があります。チューニングするハイパーパラメータは、トレーニングジョブへのチャネルではなく、boto3 ペイロードを通過する必要があります。ハイパーパラメータの最適化 (HPO) ジョブを開始するには、次のコマンドを実行します。<pre>python scripts/start_sagemaker_hpo_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH</pre> | データサイエンティスト | 

## トラブルシューティング
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| 期限切れのトークン | 新しい AWS 認証情報をエクスポートします。 | 
| IAM アクセス許可の欠如 | CloudFormation テンプレートをデプロイし、SageMaker AI トレーニングジョブを開始するために必要なすべての IAM アクセス許可を持つ IAM ロールの認証情報をエクスポートしてください。 | 

## 関連リソース
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-resources"></a>
+ [Amazon SageMaker AI を使用してモデルをトレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)する (AWS ドキュメント)
+ [ハイパーパラメータチューニングとは何ですか?](https://aws.amazon.com/what-is/hyperparameter-tuning/#:~:text=Hyperparameter%20tuning%20allows%20data%20scientists,the%20model%20as%20a%20hyperparameter.)

## 追加情報
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional"></a>

このパターンでは、以下の課題に対処します。

**ローカル開発から大規模なデプロイまでの一貫性** – このパターンでは、ローカル Python スクリプトを使用しているか、ローカル Docker コンテナを実行しているか、SageMaker AI で大規模実験を実行しているか、SageMaker AI で本番環境にデプロイしているかに関係なく、開発者が同じワークフローを使用できます。この一貫性は、次の理由により重要です。
+ **イテレーションの高速化** – スケールアップする際に大幅な調整を必要とせずに、ローカルで迅速に実験できます。
+ **リファクタリング不要** – SageMaker AI での大規模実験への移行はシームレスで、既存のセットアップの見直しは必要ありません。
+ **継続的な改善** – 環境間で同じコードを使用するため、新機能の開発やアルゴリズムの継続的な改善が容易です。

**設定管理** – このパターンでは、設定管理ツールである [Hydra](https://hydra.cc/) を活用することで次のような利点があります。
+ パラメータは、コードとは別に設定ファイルで定義されます。
+ さまざまなパラメータセットの入れ替えや組み合わせを簡単に実行できます。
+ 各実行の設定は自動的にログに記録されるため、実験の追跡が簡素化されます。
+ クラウド実験では、ローカル実行と同じ設定構造を使用して一貫性を確保できます。

Hydra を使用すると、設定を効果的に管理し、次の機能を有効にできます。
+ **設定の分割** – プロジェクト設定を管理しやすい小単位に分割できます (それぞれ個別に変更可能)。このアプローチにより、複雑なプロジェクトを簡単に処理できます。
+ **デフォルト調整が容易** – ベースライン設定をすばやく変更できるため、新しいアイデアをより簡単にテストできます。
+ **CLI 入力と設定ファイルの連携** – コマンドライン入力を設定ファイルとスムーズに組み合わせることができます。このアプローチにより、煩雑さや混乱が軽減され、時間経過に合わせたプロジェクトの管理がより簡単になります。

 

# 自然言語を OpenSearch と Elasticsearch のクエリ向けにクエリ DSL に変換する
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch"></a>

*Amazon Web Services、Tabby Ward、Nicholas Switzer、Breanne Warner*

## 概要
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-summary"></a>

このパターンでは、大規模言語モデル (LLM) を使用して自然言語クエリをクエリドメイン固有言語 (クエリ DSL) に変換する方法を説明します。この方法を使用することで、ユーザーはクエリ言語に関する広範な知識がなくても OpenSearch や Elasticsearch などの検索サービスと容易にやり取りできるようになります。このリソースは、自然言語クエリ機能で検索ベースのアプリケーションを強化し、最終的にユーザーエクスペリエンスと検索機能を向上させたい開発者やデータサイエンティストにとって特に有益です。

このパターンでは、プロンプトエンジニアリング、反復的な改良、専門知識の組み込みといった手法を示します。これらはすべて合成データ生成に不可欠です。このアプローチは主にクエリ変換に焦点を当てていますが、データ拡張とスケーラブルな合成データ生成の可能性を暗黙的に示しています。この基盤は、より包括的な合成データ生成タスクに拡張可能であり、構造化されていない自然言語入力と構造化されたアプリケーション固有の出力をブリッジする LLM の能力を明確に示すことができます。

このソリューションには、従来の意味での移行ツールやデプロイツールは含まれていません。代わりに、LLM を使用して自然言語クエリをクエリ DSL に変換する概念実証 (PoC) の説明に焦点を当てています。
+ このパターンでは、環境を設定し、テキストからクエリへの変換を実装するためのステップバイステップガイドとして Jupyter Notebook を使用します。
+ Amazon Bedrock を使用して LLM にアクセスします。これは自然言語を解釈し、適切なクエリを生成するために不可欠です。
+ このソリューションは、Amazon OpenSearch Service と連携するように設計されています。Elasticsearch でも同様のプロセスに従うことが可能で、生成されたクエリを同様の検索エンジンに適用できる可能性があります。

[クエリ DSL](https://opensearch.org/docs/latest/query-dsl/) は、Elasticsearch と OpenSearch の両方で複雑なクエリを構築するために使用される柔軟な JSON ベースの検索言語です。これは、検索オペレーションのクエリパラメータでクエリを指定できるようにするもので、さまざまなクエリタイプをサポートしています。DSL クエリには、リーフクエリや複合クエリがあります。リーフクエリは、特定のフィールドの特定の値を検索します。全文クエリ、用語レベルクエリ、地理的クエリ、結合クエリ、スパンクエリ、および特殊なクエリを含みます。複合クエリは、複数のリーフ句または複合句のラッパーとして機能し、結果を結合したり、動作を変更したりします。クエリ DSL は、単純な完全一致クエリから非常に具体的な結果を生成する複雑な複数句のクエリまで、高度な検索の作成をサポートします。クエリ DSL は、高度な検索機能、柔軟なクエリ構築、JSON ベースのクエリ構造を必要とするプロジェクトに特に役立ちます。

このパターンでは、テキストからクエリへの DSL 変換に、フューショットプロンプト、システムプロンプト、構造化出力、プロンプトチェイニング、コンテキストのプロビジョニング、タスク固有のプロンプトなどの手法を使用します。これらの手法の定義と例については、「[追加情報](#translate-natural-language-query-dsl-opensearch-elasticsearch-additional)」セクションを参照してください。

## 前提条件と制限
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-prereqs"></a>

**前提条件**

Jupyter Notebook を効果的に使用して自然言語クエリをクエリ DSL のクエリに変換するには、以下が必要です。
+ **Jupyter Notebook への精通**。Jupyter Notebook 環境でコードを移動および実行する方法の基本的な理解。
+ **Python 環境**。必要なライブラリがインストールされた、動作中の Python 環境 (Python 3.x を推奨)。
+ **Elasticsearch または OpenSearch の知識**。アーキテクチャやクエリの実行方法など、Elasticsearch または OpenSearch の基本的な知識。
+ **AWS アカウント**。 Amazon Bedrock およびその他の関連サービスにアクセス AWS アカウント するためのアクティブな 。
+ **ライブラリと依存関係**。 AWS インタラクション`boto3`や LLM 統合に必要なその他の依存関係など、ノートブックに記載されている特定のライブラリのインストール。
+ **Amazon Bedrock のモデルアクセス**。このパターンでは、Anthropic の Claude LLM を 3 つ使用します。[Amazon Bedrock コンソール](https://console.aws.amazon.com/bedrock/)を開き、**[モデルアクセス]**を選択します。次の画面で、**[特定のモデルを有効にする]**を選択し、次の 3 つのモデルを選択します。
  + Claude 3 Sonnet
  + Claude 3.5 Sonnet
  + Claude 3 Haiku
+ **適切な IAM ポリシーと IAM ロール**。でノートブックを実行するには AWS アカウント、 AWS Identity and Access Management (IAM) ロールに `SagemakerFullAccess`ポリシーと、[「追加情報](#translate-natural-language-query-dsl-opensearch-elasticsearch-additional)」セクションで提供されているポリシーが必要です。このポリシーには、 という名前を付けることができます`APGtext2querydslpolicy`。このポリシーには、リストされている 3 つの Claude モデルへのサブスクライブが含まれています。

これらの前提条件を設定することで、ノートブックの操作やテキストからクエリへの変換機能の実装をスムーズに行うことができます。

**制限事項**
+ **概念実証のステータス**。このプロジェクトは主に概念実証 (PoC) を目的としています。これは、LLM を使用して自然言語クエリをクエリ DSL に変換する潜在能力を示すものですが、完全に最適化されておらず、本番環境には対応していない可能性があります。
+ **モデルの制限**:

  **コンテキストウィンドウの制約***。*Amazon Bedrock で利用可能な LLM を使用する場合は、コンテキストウィンドウの制限に注意してください。

  Claude モデル (2024 年 9 月現在):
  + Claude 3 Opus: 200,000 トークン
  + Claude 3 Sonnet: 200,000 トークン
  + Claude 3 Haiku: 200,000 トークン

  Amazon Bedrock のその他のモデルでは、コンテキストウィンドウのサイズが異なる場合があります。最新情報については、最新のドキュメントを参照してください。

  **モデルの可用性***。*Amazon Bedrock における特定のモデルの可用性は異なる場合があります。このソリューションを実装する前に、必要なモデルにアクセスできることを確認してください。
+ **その他の制限事項**
  + **クエリの複雑さ**。自然言語からクエリ DSL への変換の有効性は、入力クエリの複雑さによって異なる場合があります。
  + **バージョン互換性**。生成されたクエリ DSL は、使用する Elasticsearch または OpenSearch の特定のバージョンに応じて調整が必要になる場合があります。
  + **パフォーマンス**。このパターンで提供するのは PoC 実装であるため、大規模な本番環境で使用する場合はクエリ生成の速度と精度が最適でない可能性があります。
  + **料金**。Amazon Bedrock で LLM を使用すると、コストが発生します。選択したモデルの料金体系に注意してください。詳細については、「[Amazon Bedrock の料金](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-pricing.html)」を参照してください。
  + **メンテナンス**。LLM テクノロジーの進歩やクエリ DSL 構文の変更に対応するために、プロンプトとモデルの選択を定期的に更新する必要が生じる場合があります。

**製品バージョン**

このソリューションは Amazon OpenSearch Service でテストされています。Elasticsearch を使用する場合、このパターンの機能を正確にレプリケートするためにいくつかの変更が必要になる場合があります。
+ **OpenSearch バージョンの互換性**。****OpenSearch は、メジャーバージョン内で下位互換性を維持します。例えば、次のようになります。
  + OpenSearch 1.x クライアントは、通常、OpenSearch 1.x クラスターと互換性があります。
  + OpenSearch 2.x クライアントは、通常、OpenSearch 2.x クラスターと互換性があります。

  ただし、可能な限り、クライアントとクラスターの両方で同じマイナーバージョンを使用することをお勧めします。
+ **OpenSearch API の互換性**。****OpenSearch は、ほとんどのオペレーションで Elasticsearch OSS 7.10.2 との API 互換性を維持しています。ただし、特に新しいバージョンでは、いくつかの相違点が存在します。
+ **OpenSearch のアップグレードに関する考慮事項**:
  + 直接ダウングレードはサポートされていません。必要に応じて、スナップショットを使用してロールバックします。
  + アップグレードする際は、重大な変更がないか[互換性マトリックスとリリースノート](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-operations.html)を確認してください。

**Elasticsearch に関する考慮事項**
+ **Elasticsearch のバージョン**。クエリ構文や機能はメジャーバージョン間で変更される可能性があるため、使用している Elasticsearch のメジャーバージョンが重要です。現在、最新の安定バージョンは Elasticsearch 8.x です。クエリが特定の Elasticsearch バージョンと互換性があることを確認してください。
+ **Elasticsearch クエリ DSL ライブラリのバージョン**。Elasticsearch の Python 用クエリ DSL ライブラリを使用している場合は、そのバージョンが Elasticsearch のバージョンと一致していることを確認してください。例えば、次のようになります。
  + Elasticsearch 8.x の場合は、8.0.0 以降 9.0.0 より前の `elasticsearch-dsl` バージョンを使用します。
  + Elasticsearch 7.x の場合は、7.0.0 以降 8.0.0 より前の `elasticsearch-dsl` バージョンを使用します。
+ **クライアントライブラリのバージョン**。公式の Elasticsearch クライアントを使用する場合も言語固有のクライアントを使用する場合も、Elasticsearch バージョンと互換性があることを確認してください。
+ **クエリ DSL のバージョン**。クエリ DSL は Elasticsearch バージョンとともに進化します。一部のクエリタイプまたはパラメータは、バージョンによって廃止されたり、導入されたりする可能性があります。
+ **マッピングのバージョン**。インデックスのマッピングを定義する方法やバージョン間で変更する方法です。特定の Elasticsearch バージョンのマッピングに関するドキュメントを必ず確認してください。
+ **分析ツールのバージョン**。アナライザー、トークナイザ、またはその他のテキスト分析ツールを使用している場合、バージョンによって動作や可用性が変わる可能性があります。

## アーキテクチャ
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-architecture"></a>

**ターゲットアーキテクチャ**

このパターンのアーキテクチャを以下に図で示します。

![\[Amazon Bedrock で自然言語からクエリ DSL に変換する場合のアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/75296405-2893-4328-9551-9bcc6ec7fd3e/images/ffb1b893-d23c-4e1c-b679-8063b4f85a8a.png)


各パラメータの意味は次のとおりです。

1. フューショットプロンプトの例を含むユーザー入力とシステムプロンプト。このプロセスは、自然言語クエリまたはスキーマ生成のリクエストを提供するユーザーから始まります。

1. Amazon Bedrock 入力は Amazon Bedrock に送信されます。Amazon Bedrock は Claude LLM にアクセスするためのインターフェイスとして機能します。

1. Claude 3 Sonnet LLM。Amazon Bedrock は、Claude 3 ファミリーの Claude 3 Sonnet LLM を使用して入力を処理します。入力を解釈して、適切な Elasticsearch または OpenSearch クエリ DSL を生成します。スキーマリクエストの場合、Elasticsearch または OpenSearch の合成マッピングを生成します。

1. クエリ DSL の生成。自然言語クエリの場合、アプリケーションは LLM の出力を受け取り、有効な Elasticsearch または OpenSearch Service のクエリ DSL にフォーマットします。

1. 合成データ生成。また、アプリケーションはスキーマを受け取り、Elasticsearch または OpenSearch の合成データを作成して、テスト用に OpenSearch Serverless コレクションにロードします。

1. OpenSearch または Elasticsearch。生成されたクエリ DSL は、すべてのインデックスの OpenSearch Serverless コレクションに対してクエリされます。JSON 出力には、OpenSearch Serverless コレクションに存在するデータからの関連データと*ヒット*数が含まれます。

**自動化とスケール**

このパターンで提供されるコードは、PoC のみを目的として構築されています。次のリストに、ソリューションの自動化とスケーリングをさらに進め、コードを本番環境に移行するための提案を示します。これらの機能拡張は、このパターンの範囲には含まれません。
+ コンテナ化:
  + アプリケーションを Docker 化して、さまざまな環境での一貫性を確保します。
  + Amazon Elastic Container Service (Amazon ECS) や Kubernetes などのコンテナオーケストレーションプラットフォームを使用して、スケーラブルなデプロイを実現します。
+ サーバーレスアーキテクチャ:
  + コア機能を AWS Lambda 関数に変換します。
  + Amazon API Gateway を使用して、自然言語クエリ入力用の RESTful エンドポイントを作成します。
+ 非同期処理:
  + Amazon Simple Queue Service (Amazon SQS) を実装して、受信クエリをキューに入れます。
  + を使用して AWS Step Functions 、クエリを処理し、クエリ DSL を生成するワークフローを調整します。
+ キャッシュ:
  + プロンプトをキャッシュするメカニズムを実装します。
+ モニタリングとログ記録:
  + モニタリングとアラートに Amazon CloudWatch を使用します。
  + ログ分析に Amazon CloudWatch Logs または Amazon OpenSearch Service を使用して一元的なログ記録を実装します。
+ セキュリティ強化:
  + IAM ロールを実装してきめ細かなアクセスコントロールを実現します。
  + を使用して AWS Secrets Manager 、API キーと認証情報を安全に保存および管理します。
+ マルチリージョンデプロイ:
  + レイテンシーとディザスタリカバリを改善する AWS リージョン ために、ソリューションを複数の にデプロイすることを検討してください。
  + インテリジェントなリクエストルーティングに Amazon Route 53 を使用します。

これらの提案を実装することで、この PoC を堅牢かつスケーラブルで本番環境に対応したソリューションに変換できます。完全なデプロイの前に、各コンポーネントとシステム全体を徹底的にテストすることをお勧めします。

## ツール
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-tools"></a>

**ツール**
+ [Amazon SageMaker AI ノートブック](https://aws.amazon.com/sagemaker/notebooks/)は、機械学習開発用のフルマネージド型 Jupyter Notebook です。このパターンでは、Amazon SageMaker AI のデータ探索、モデル開発、実験のためのインタラクティブな環境としてノートブックを使用します。ノートブックは、他の SageMaker AI 機能や とシームレスに統合できます AWS のサービス。
+ 「[Python](https://www.python.org/)」は汎用のコンピュータプログラミング言語です。このパターンでは、Python をコア言語として使用してソリューションを実装します。
+ [Amazon Bedrock](https://aws.amazon.com/bedrock/) は、主要な AI スタートアップや Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。Amazon Bedrock は、自然言語処理用の LLM へのアクセスを提供します。このパターンでは、Anthropic Claude 3 モデルを使用します。
+ [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) は、Amazon Bedrock AWS のサービスを含む Python アプリケーション、ライブラリ、またはスクリプトを と統合するのに役立つソフトウェア開発キットです。
+ 「[Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html)」は、AWS クラウドにおける OpenSearch クラスターのデプロイ、オペレーション、スケーリングを支援するマネージドサービスです。このパターンでは、クエリ DSL を生成するためのターゲットシステムとして OpenSearch Service を使用します。

**コードリポジトリ**

このパターンのコードは、GitHub の「[Prompt Engineering Text-to-QueryDSL Using Claude 3 Models](https://github.com/aws-samples/text-to-queryDSL/blob/main/text2ES_prompting_guide.ipynb)」リポジトリで入手できます。この例では、ヘルスソーシャルメディアアプリを使用して、ユーザーに対する投稿とヘルスアプリケーションに関連付けられたユーザープロファイルを作成します。

## ベストプラクティス
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-best-practices"></a>

このソリューションを使用する場合は、次の点を考慮してください。
+ Amazon Bedrock にアクセスするための適切な AWS 認証情報とアクセス許可の必要性
+  AWS のサービス および LLMs の使用に関連する潜在的なコスト
+ クエリ DSL を理解して、生成されたクエリを検証し、必要に応じて変更することが重要です。

## エピック
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-epics"></a>

### 環境を設定し、データを準備する
<a name="set-up-the-environment-and-prepare-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 開発環境を設定します。 | この詳細な手順とコード、およびこのパターンのその他の手順については、[GitHub リポジトリ](https://github.com/aws-samples/text-to-queryDSL/blob/main/text2ES_prompting_guide.ipynb)の包括的なチュートリアルを参照してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/translate-natural-language-query-dsl-opensearch-elasticsearch.html) | Python、pip、AWS SDK | 
|  AWS アクセスを設定します。 | Amazon Bedrock クライアントと SageMaker AI セッションを設定します。後で OpenSearch Serverless コレクションの作成時に使用するために、SageMaker AI 実行ロールの Amazon リソースネーム (ARN) を取得します。 | IAM、AWS CLI、Amazon Bedrock、Amazon SageMaker | 
| ヘルスアプリのスキーマをロードします。 | 事前定義されたファイルからヘルス投稿とユーザープロファイル用の JSON スキーマを読み取り、解析します。後でプロンプトで使用するためにスキーマを文字列に変換します。 | DevOps エンジニア、AWS 全般、Python、JSON | 

### 合成データを生成する
<a name="generate-synthetic-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| LLM ベースのデータジェネレーターを作成します。 | **generate\$1data()** 関数を実装して、Claude 3 モデルで Amazon Bedrock Converse API を呼び出します。Sonnet、Sonnet 3.5、および Haiku のモデル ID を設定します。<pre>model_id_sonnet3_5 = "anthropic.claude-3-5-sonnet-20240620-v1:0" <br />model_id_sonnet = "anthropic.claude-3-sonnet-20240229-v1:0" <br />model_id_haiku = "anthropic.claude-3-haiku-20240307-v1:0"</pre> | Python、Amazon Bedrock API、LLM プロンプト | 
| 合成ヘルス投稿を作成します。 | 特定のメッセージプロンプトとともに **generate\$1data()** 関数を使用し、指定されたスキーマに基づいて合成ヘルス投稿エントリを作成します。関数呼び出しは次のようになります。<pre>health_post_data = generate_data(bedrock_rt, model_id_sonnet, system_prompt, message_healthpost, inference_config)</pre> | Python、JSON | 
| 合成ユーザープロファイルを作成します。 | 特定のメッセージプロンプトとともに **generate\$1data()** 関数を使用し、指定されたスキーマに基づいて合成ユーザープロファイルエントリを作成します。これはヘルス投稿の生成に似ていますが、別のプロンプトを使用します。 | Python、JSON | 

### OpenSearch を設定してデータを取り込む
<a name="set-up-opensearch-and-ingest-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| OpenSearch Serverless コレクションを設定します。 | Boto3 を使用し、適切な暗号化、ネットワーク、アクセスポリシーを指定して OpenSearch Serverless コレクションを作成します。コレクションの作成は次のようになります。<pre>collection = aoss_client.create_collection(name=es_name, type='SEARCH')</pre> OpenSearch Serverless の詳細については、[AWS ドキュメント](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless.html)を参照してください。 | OpenSearch Serverless、IAM | 
| OpenSearch インデックスを定義します。 | 事前定義されたスキーママッピングに基づいて OpenSearch クライアントを使用して、ヘルス投稿とユーザープロファイルのインデックスを作成します。インデックスの作成は次のようになります。<pre>response_health = oss_client.indices.create(healthpost_index, body=healthpost_body)</pre> | OpenSearch、JSON | 
| OpenSearch にデータをロードします。 | **ingest\$1data()** 関数を実行して、合成ヘルス投稿とユーザープロファイルをそれぞれの OpenSearch インデックスに一括挿入します。関数は、`opensearch-py` の bulk ヘルパーを使用します。<pre>success, failed = bulk(oss_client, actions)</pre> | Python、OpenSearch API、データ一括操作 | 

### クエリを作成して実行する
<a name="generate-and-run-queries"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| フューショットプロンプトの例を設計します。 | Claude 3 モデルを使用してクエリ生成のフューショットの例を提供し、クエリの例と対応する自然言語の質問を生成します。システムプロンプトには、次の例が含まれます。<pre>system_prompt_query_generation = [{"text": f"""You are an expert query dsl generator. ... Examples: {example_prompt} ..."""}]</pre> | LLM プロンプト、クエリ DSL | 
| テキストからクエリ DSL へのコンバーターを作成します。 | クエリ生成用のスキーマ、データ、フューショットの例を含むシステムプロンプトを実装します。システムプロンプトを使用して、自然言語クエリをクエリ DSL に変換します。関数呼び出しは次のようになります。<pre>query_response = generate_data(bedrock_rt, model_id, system_prompt_query_generation, query, inference_config)</pre> | Python、Amazon Bedrock API、LLM プロンプト | 
| OpenSearch でクエリ DSL をテストします。 | **query\$1oss()** 関数を実行し、生成されたクエリ DSL を OpenSearch Serverless コレクションに対して実行し、結果を返します。関数は OpenSearch クライアントの検索方法を使用します。<pre>response = oss_client.search(index="_all", body=temp)</pre> | Python、OpenSearch API、クエリ DSL | 

### テストと評価
<a name="test-and-evaluate"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| テストクエリセットを作成します。 | Claude 3 を使用し、合成データとスキーマに基づいてさまざまなテスト用の質問を生成します。<pre>test_queries = generate_data(bedrock_rt, model_id_sonnet, query_system_prompt, query_prompt, inference_config)</pre> | LLM プロンプト | 
| クエリ DSL 変換の精度を評価します。 | OpenSearch に対してクエリを実行し、返された結果の関連性と精度を分析して、生成されたクエリ DSL をテストします。これには、クエリの実行とヒットの検査が含まれます。<pre>output = query_oss(response1) print("Response after running query against Opensearch") print(output)</pre> | Python、データ分析、クエリ DSL | 
| Claude 3 モデルをベンチマークします。 | 精度とレイテンシーの観点から、クエリ生成についてさまざまな Claude 3 モデル (Haiku、Sonnet、Sonnet 3.5) のパフォーマンスを比較します。比較するには、**generate\$1data()** を呼び出す際に `model_id` を変更し、実行時間を測定します。 | Python、パフォーマンスベンチマーク | 

### クリーンアップとドキュメント化
<a name="clean-up-and-document"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| クリーンアッププロセスを開発します。 | 使用後に OpenSearch Serverless コレクションからすべてのインデックスを削除します。 | Python、AWS SDK、OpenSearch API | 

## 関連リソース
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-resources"></a>
+ [Query DSL](https://opensearch.org/docs/latest/query-dsl/) (OpenSearch ドキュメント)
+ 「[Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html)」
+ [OpenSearch Serverless コレクション](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html)
+ [Amazon Bedrock ドキュメント](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Amazon SageMaker AI ドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)
+ [AWS SDK for Python (Boto3) ドキュメント](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)

## 追加情報
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-additional"></a>

**IAM ポリシー**

このパターンで使用される IAM ロールの `APGtext2querydslpolicy` ポリシーは次のとおりです。

```
{
  "Version": "2012-10-17",		 	 	  
  "Statement": [
    { "Effect": "Allow", 
      "Action": [ 
        "bedrock:InvokeModel", 
        "bedrock:InvokeModelWithResponseStream"
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "s3:GetObject", 
        "s3:PutObject", 
        "s3:ListBucket"
      ], 
      "Resource": [
        "arn:aws:s3:::sagemaker-*", 
        "arn:aws:s3:::sagemaker-*/*" 
      ] 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "logs:CreateLogGroup", 
        "logs:CreateLogStream", 
        "logs:PutLogEvents" 
      ], 
      "Resource": "arn:aws:logs:*:*:log-group:/aws/sagemaker/*" 
    }, 
    { "Effect": "Allow", 
      "Action": [
        "ec2:CreateNetworkInterface", 
        "ec2:DescribeNetworkInterfaces", 
        "ec2:DeleteNetworkInterface" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [
        "aoss:*" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "iam:PassRole", 
        "sagemaker:*" 
      ], 
      "Resource": [ 
        "arn:aws:iam::*:role/*", "*" 
      ], 
      "Condition": { 
        "StringEquals": { 
          "iam:PassedToService": "sagemaker.amazonaws.com" 
          } 
      } 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "codecommit:GetBranch", 
        "codecommit:GetCommit", 
        "codecommit:GetRepository", 
        "codecommit:ListBranches", 
        "codecommit:ListRepositories" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "aws-marketplace:Subscribe" 
      ], 
      "Resource": "*", 
      "Condition": {
        "ForAnyValue:StringEquals": { 
          "aws-marketplace:ProductId": [ 
            "prod-6dw3qvchef7zy", 
            "prod-m5ilt4siql27k", 
            "prod-ozonys2hmmpeu" 
          ]
        } 
      } 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "aws-marketplace:Unsubscribe", 
        "aws-marketplace:ViewSubscriptions" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": "iam:*", 
      "Resource": "*" 
    } 
  ] 
}
```

**Anthropic Claude 3 モデルを使用したプロンプト手法**

このパターンでは、Claude 3 モデルを使用したテキストからクエリ DSL への変換に関する次のプロンプト手法を説明します。
+ **フューショットプロンプト**: フューショットプロンプトは、Amazon Bedrock での Claude 3 モデルのパフォーマンスを向上させる強力な手法です。このアプローチでは、モデルに同様のタスクの実行を求める前に、小数の例を提供して望ましい入出力動作を示します。Amazon Bedrock で Claude 3 モデルを使用すると、特定のフォーマット、推論パターン、またはドメイン知識を必要とするタスクにおいて、フューショットプロンプトが特に効果的になります。この手法を実装するには、通常、サンプルセクションと実際のクエリの 2 つの主要コンポーネントでプロンプトを構成します。セクションの例にはタスクを説明する 1 つ以上の入出力ペアが含まれており、クエリセクションにはレスポンスが必要な新しい入力が表示されます。この方法は、Claude 3 がコンテキストと期待される出力形式を理解するのに役立ちます。多くの場合、より正確で一貫性のあるレスポンスが得られるようになります。

  例:

  ```
  "query": {
    "bool": {
      "must": [
        {"match": {"post_type": "recipe"}},
        {"range": {"likes_count": {"gte": 100}}},
        {"exists": {"field": "media_urls"}}
      ]
    }
  }
  Question: Find all recipe posts that have at least 100 likes and include media URLs.
  ```
+ **システムプロンプト**: Amazon Bedrock の Claude 3 モデルは、フューショットプロンプトに加えてシステムプロンプトの使用もサポートしています。システムプロンプトでは、特定のユーザー入力を提示する前に、モデルに対して全体的なコンテキスト、指示、またはガイドラインを示すことができます。トーンの設定、モデルのロールの定義、会話全体における制約事項を確立する場合に特に役立ちます。Amazon Bedrock で Claude 3 とともにシステムプロンプトを使用するには、API リクエストの `system` パラメータに含めます。これはユーザーメッセージとは別のものであり、インタラクション全体に適用されます。詳細なシステムプロンプトは、コンテキストの設定やモデルのガイドラインの提供に使用されます。

  例:

  ```
  You are an expert query dsl generator. Your task is to take an input question and generate a query dsl to answer the question. Use the schemas and data below to generate the query.
  
  Schemas: [schema details]
  Data: [sample data]
  Guidelines: 
  - Ensure the generated query adheres to DSL query syntax
  - Do not create new mappings or other items that aren't included in the provided schemas.
  ```
+ **構造化された出力**: JSON や XML タグ内など、特定の形式で出力を提供するようモデルに指示できます。

  例:

  ```
  Put the query in json tags
  ```
+ **プロンプトチェイニング**: ノートブックは、生成された合成データを使用して質問の例を作成するなど、ある LLM 呼び出しの出力を別の LLM 呼び出しの入力として使用します。
+ **コンテキストプロビジョニング**: スキーマやサンプルデータなどの関連コンテキストがプロンプトに表示されます。

  例:

  ```
  Schemas: [schema details]
  Data: [sample data]
  ```
+ **タスク固有のプロンプト**: 合成データの生成、質問の例の作成、自然言語クエリからクエリ DSL への変換など、特定のタスクに対して異なるプロンプトが作成されます。

  テスト問題生成の例:

  ```
  Your task is to generate 5 example questions users can ask the health app based on provided schemas and data. Only include the questions generated in the response.
  ```

# Amazon Q Developer をコーディングアシスタントとして使用して生産性を高める
<a name="use-q-developer-as-coding-assistant-to-increase-productivity"></a>

*Amazon Web Services、Ram Kandaswamy*

## 概要
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-summary"></a>

このパターンでは、マルバツゲームを例として使用し、さまざまな開発タスクに Amazon Q Developer を使用する方法を示します。Amazon Q Developer は、マルバツゲームのコードを単一ページアプリケーション (SPA) として生成し、UI を改善して、アプリケーションを AWSにデプロイするためのスクリプトを作成します。

Amazon Q Developer はコーディングアシスタントとして機能して、ソフトウェア開発ワークフローを高速化し、開発者と非開発者の両方の生産性を向上させます。お客様の技術的な専門知識に関係なく、アーキテクチャの作成とビジネス課題に対するソリューションの設計に役立ち、作業環境をブートストラップし、新機能の実装を支援し、検証用のテストケースを生成します。自然言語での指示と AI 機能により、コードの一貫性と高い品質を確保し、プログラミングスキルに関係なくコーディングの課題を軽減します。

Amazon Q Developer の主な利点は、反復的なコーディングタスクから解放されることです。`@workspace` 注釈を使用すると、Amazon Q Developer は統合開発環境 (IDE) 内のすべてのコードファイル、設定、プロジェクト構造を取り込んでインデックス化し、お客様がクリエイティブな問題解決に集中できるようにカスタマイズされた応答を返します。これにより、革新的なソリューションを設計し、ユーザーエクスペリエンスを向上させるためにより多くの時間を費やすことができます。技術的な専門知識をお持ちでない場合は、Amazon Q Developer を使用してワークフローを合理化し、開発チームとより効果的にコラボレーションできます。Amazon Q Developer の**コードの説明**機能では詳細な手順と概要を利用できるため、複雑なコードベースに対処できます。

さらに、Amazon Q Developer は、特定の言語に依存しないアプローチを提供し、初心者レベルや中級者レベルの開発者がスキルセットを拡張するのに役立ちます。特定の言語だけで使用される構文ではなく、主要な概念とビジネスロジックに集中できます。これにより、使用言語を切り替える際の学習曲線が短縮されます。

## 前提条件と制限
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-prereqs"></a>

**前提条件**
+ Amazon Q Developer プラグインがインストールされた IDE (WebStorm や Visual Studio Code など)。手順については、Amazon Q Developer ドキュメントの「[IDE に Amazon Q Developer 拡張機能またはプラグインをインストールする](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html)」を参照してください。
+ Amazon Q Developer でのアクティブな AWS アカウント セットアップ。手順については、Amazon Q Developer ドキュメントの「[開始方法](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/getting-started-q-dev.html)」を参照してください。
+ インストール済みの **npm**。手順については、[npm ドキュメント](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)を参照してください。このパターンは npm バージョン 10.8 でテストされています。
+ AWS Command Line Interface (AWS CLI) がインストールされています。手順については、[AWS CLI ドキュメント](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)を参照してください。

**制限事項**
+ Amazon Q Developer は、一度に 1 つの開発タスクのみ実行できます。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS のサービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

## ツール
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-tools"></a>
+ このパターンには、Visual Studio Code や WebStorm などの IDE が必要です。サポートされている IDE のリストについては、[Amazon Q Developer ドキュメント](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE.html#supported-ides-features)を参照してください。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。

## ベストプラクティス
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-best-practices"></a>

 AWS 規範ガイダンスの[「Amazon Q Developer でのコーディングのベストプラクティス](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-code-generation/best-practices-coding.html)」を参照してください。加えて:
+ Amazon Q Developer にプロンプトを入力するときは、指示が明確であいまいでないことを確認してください。プロンプトについてより多くのコンテキストを提供するために、プロンプトに `@workspace` などのコードスニペットと注釈を追加してください。
+ システムによる競合や誤った推測を回避するため、関連するライブラリを含めてインポートしてください。
+ 生成されたコードが正確でない、または期待どおりのものでない場合は、**[フィードバックを提供して再生成する]** オプションを使用してください。プロンプトを複数の小さな手順に分割してみてください。

## エピック
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-epics"></a>

### 作業環境をセットアップする
<a name="set-up-the-working-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 新しいプロジェクトを作成します。 | 作業環境で新しいプロジェクトを作成するには、次のコマンドを実行して、すべての質問のデフォルト設定を受け入れます。<pre>npx create-next-app@latest</pre> | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| ベースアプリケーションをテストします。 | 次のコマンドを実行し、ベースアプリケーションがブラウザで正常にロードされることを確認します。<pre>npm run dev </pre> | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| ベースコードをクリーンアップします。 | `src/app` フォルダ内の `page.tsx` ファイルに移動して、デフォルトのコンテンツを削除して空白のページを取得します。削除した後、ファイルは次のようになります。<pre>export default function Home() {<br />  return (<div></div><br />      );<br />}</pre> | アプリ開発者、プログラマー、ソフトウェア開発者 | 

### Amazon Q Developer を使用してマルバツゲームプロジェクトを設計する
<a name="use-qdevlong-to-design-a-tic-tac-toe-game-project"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ステップの概要を取得します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| マルバツゲームのコードを生成します。 | チャットパネルで、`/dev` コマンドを使用してタスクの説明を入力し、開発タスクを開始します。例えば、次のようになります。<pre>/dev Create a React-based single-page application  written in TypeScript for a tic-tac-toe game with the following specifications:<br />1. Design an aesthetically pleasing interface with the game grid centered vertically and <br />horizontally on the page. <br />2. Include a heading and clear instructions on how to play the game.<br />3. Implement color-coding for X and O marks to distinguish them easily. </pre>Amazon Q Developer は指示に基づいてコードを生成します。 | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| 生成されたコードを確認して承認します。 | コードを目視で確認し、**[コードを承認する]** を選択して `page.tsx` ファイルを自動的に置き換えます。問題が発生した場合は、**[フィードバックを提供して再生成する]** を選択し、発生した問題についての説明を入力します。 | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| lint エラーを修正します。 | サンプルのマルバツゲームにはグリッドが含まれています。Amazon Q Developer が生成するコードは、デフォルトのタイプ `any` を使用する場合があります。Amazon Q Developer に次のようにプロンプトを入力することで、型安全性を高められます。<pre>/dev Ensure proper TypeScript typing for the onSquare Click event handler <br />to resolve any 'any' type issues.</pre> | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| 見た目の魅力を向上させます。 | 元の要件は、複数の小さなフラグメントに分割できます。例えば、開発タスクで次のプロンプトを使用して、ゲーム UI を改善できます。このプロンプトは、カスケードスタイルシート (CSS) のスタイルを改善し、デプロイ用にアプリケーションをエクスポートします。<pre>/dev Debug and fix any CSS issues to correctly display the game grid and overall layout. <br /><br />Simplify the code by removing game history functionality and related components. <br /><br />Implement static file export to an 'out' directory for easy deployment. The solution <br />should be fully functional, visually appealing, and free of typing errors or layout issues. </pre> | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| テストをもう一度実行します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | アプリ開発者、プログラマー、ソフトウェア開発者 | 

### アプリケーションを にデプロイする AWS クラウド
<a name="deploy-the-application-to-the-aws-cloud"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| デプロイ用のフォルダとファイルを作成します。 | 作業環境のプロジェクトで、デプロイフォルダを作成し、その中に `pushtos3.sh` と `cloudformation.yml` の 2 つのファイルを作成します。<pre>mkdir deployment && cd deployment<br />touch pushtos3.sh && chmod +x pushtos3.sh<br />touch cloudformation.yml</pre> | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| 自動化コードを生成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | AWS 管理者、AWS DevOps、アプリ開発者 | 
| スクリプトコンテンツを生成します。 | デプロイスクリプトを作成するには、次のプロンプトを使用します。<pre>/dev Modify the pushtos3 shell script so that it can use AWS CLI commands to create a <br />CloudFormation stack named tictactoe-stack if it does not exist already, and use <br />cloudformation.yml as the source template. Wait for the stack to complete and sync the <br />contents from the out folder to the S3 bucket. Perform invalidation of the CloudFront <br />origin.</pre> | アプリ開発者、プログラマー、ソフトウェア開発者 | 
| アプリケーションを AWS クラウドにデプロイします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | AWS 管理者、AWS DevOps、クラウドアーキテクト、アプリ開発者 | 

## トラブルシューティング
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| ビルドは、単一ページのアプリケーションを作成したり、出力フォルダにエクスポートしたりしません。 | `next.config.mjs` ファイルのコンテンツを確認します。コードに次のデフォルト設定が使用されている場合:<pre>const nextConfig = {};</pre>次のように変更します。<pre>const nextConfig = {<br />  output: 'export',<br />  distDir: 'out',<br />};</pre> | 

## 関連リソース
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-resources"></a>
+ [新しい React プロジェクトの作成](https://react.dev/learn/start-a-new-react-project) (React ドキュメント)
+ [Amazon Q Developer の概要](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) (AWS ドキュメント)
+ [Amazon Q Developer のベストプラクティス ](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-code-generation/introduction.html)(AWS 規範ガイダンス)
+ [Installing, Configuring, and Using Amazon Q Developer with JetBrains IDEs](https://www.youtube.com/watch?v=-iQfIhTA4J0&pp=ygUSYW1hem9uIHEgZGV2ZWxvcGVy) (YouTube 動画)
+ [コマンドライン用の Amazon Q のインストール](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-getting-started-installing.html) (AWS ドキュメント)

# SageMaker Processing を使用して、テラバイト規模の ML データセットの分散型特徴量エンジニアリングを実現
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets"></a>

*Amazon Web Services、Chris Boomhower*

## 概要
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-summary"></a>

テラバイト規模またはそれ以上のデータセットの多くは階層的なフォルダ構造で構成されており、データセット内のファイルは相互に依存している場合があります。このため、機械学習 (ML) エンジニアとデータサイエンティストは、モデルトレーニングや推論のためにデータを準備するために、慎重に設計上の決定を下さなければなりません。このパターンは、手動のマクロシャーディングとマイクロシャーディングの手法を Amazon SageMaker Processing と仮想 CPU (vCPU) 並列化と組み合わせて使用して、複雑なビッグデータ ML データセットの特徴量エンジニアリングプロセスを効率的にスケーリングする方法を示しています。 

このパターンでは、データディレクトリを複数のマシンに分割して処理することを「*マクロシャーディング*」と定義し、「*マイクロシャーディング*」は各マシンのデータを複数の処理スレッドに分割することと定義されています。このパターンでは、Amazon SageMaker と「[PhysioNet MIMIC-III](https://physionet.org/content/mimic3wdb/1.0/)」データセットのサンプル時系列波形レコードを使用して、これらの手法を実証しています。このパターンの手法を実装することで、リソース利用率とスループット効率を最大化しながら、特徴量エンジニアリングの処理時間とコストを最小限に抑えることができます。これらの最適化では、データタイプに関係なく、類似の大規模データセットで、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスと vCPUs で、分散された SageMaker 処理を使用します。

## 前提条件と制限
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-prereqs"></a>

**前提条件**
+ 独自のデータセットにこのパターンを実装する場合は、SageMaker ノートブックインスタンスまたは SageMaker Studio にアクセスできます。Amazon SageMaker を初めて使用する場合は、AWS ドキュメントの「[Amazon SageMaker の入門](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html)」を参照してください。
+ SageMaker Studio、「[PhysioNet MIMIC-III](https://physionet.org/content/mimic3wdb/1.0/)」のサンプルデータを使用してこのパターンを実装したい場合。 
+ このパターンは SageMaker 処理を使用しますが、SageMaker 処理ジョブを実行した経験は必要ありません。

**制限事項**
+ このパターンは、相互に依存するファイルを含む ML データセットに非常に適しています。このような相互依存関係は、手動によるマクロシャーディングと、複数の単一インスタンスの SageMaker Processing ジョブをparallel 実行することから最もメリットがあります。そのような相互依存関係が存在しないデータセットの場合、SageMaker Processing の`ShardedByS3Key`機能は、同じ処理ジョブによって管理される複数のインスタンスにシャーディングされたデータを送信するため、マクロシャーディングのより良い代替となる可能性があります。ただし、このパターンのマイクロシャーディング戦略をどちらのシナリオでも実装して、インスタンス vCPUs を最大限に活用できます。

**製品バージョン**
+ Amazon SageMaker Python SDK バージョン 2

## アーキテクチャ
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon SageMaker

**ターゲットアーキテクチャ**

*マクロシャーディングと分散型 EC2 インスタンス*

このアーキテクチャで表される 10 個のparallel プロセスは、MIMIC-III データセットの構造を反映しています。(図を簡略化するため、プロセスは楕円で示されています)。手動マクロシャーディングを使用する場合も、同様のアーキテクチャがどのデータセットにも適用されます。MIMIC-III の場合、各患者グループフォルダを最小の労力で個別に処理することで、データセットの未加工の構造を活用できます。以下の図では、レコードグループブロックが左側に表示されています (1)。データが分散されていることを考えると、患者グループごとにシャードするのは理にかなっています。

![\[マイクロシャーディングと分散 EC2 インスタンスのアーキテクチャ\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e7a90b31-de8f-41fd-bb3f-c7c6100fc306/images/c19a8f87-ac59-458e-89cb-50be17ca4a0c.png)


ただし、患者グループごとに手動でシャーディングを行うと、図 (2) の中央のセクションでわかるように、複数の EC2 インスタンスによる単一の処理ジョブではなく、患者グループフォルダごとに個別の処理ジョブが必要になります。MIMIC-III のデータには、バイナリ波形ファイルと対応するテキストベースのヘッダーファイルの両方が含まれており、バイナリデータ抽出には「[wfdb ライブラリ](https://wfdb.readthedocs.io/en/latest/)」に依存する必要があるため、特定の患者のすべてのレコードを同じインスタンスで利用できるようにする必要があります。各バイナリ波形ファイルの関連ヘッダーファイルも確実に存在させる唯一の方法は、各シャードを独自の処理ジョブ内で実行する手動シャーディングを実装し、処理ジョブの入力を定義するときに`s3_data_distribution_type='FullyReplicated'`を指定することです。あるいは、すべてのデータが単一のディレクトリにあり、ファイル間に依存関係がない場合、より適切なオプションは、複数の EC2 インスタンスと`s3_data_distribution_type='ShardedByS3Key'`を指定して単一の処理ジョブを起動することかもしれません。Amazon S3 データ分散タイプとして`ShardedByS3Key `を指定すると、SageMaker はインスタンス間のデータシャーディングを自動的に管理するようになります。 

複数のインスタンスを同時に実行すると時間を節約できるため、データを前処理するにはフォルダごとに処理ジョブを起動するのがコスト効率の高い方法です。コストと時間をさらに節約するために、各処理ジョブ内でマイクロシャーディングを使用することもできます。 

*マイクロシャーディングとparallel vCPUs*

各処理ジョブ内で、グループ化されたデータはさらに分割され、SageMaker のフルマネージド EC2 インスタンスで使用可能なすべての vCPUs を最大限に活用します。図の中央のセクション (2) のブロックは、各主要処理ジョブ内で何が起こるかを表しています。患者記録フォルダの内容は、インスタンスで使用可能なvCPUs の数に基づいてフラット化され、均等に分割されます。フォルダの内容が分割されると、同じサイズのファイルセットがすべての vCPUs に分散されて処理されます。処理が完了すると、各 vCPU の結果は、処理ジョブごとに 1 つのデータファイルにまとめられます。 

添付のコードでは、これらの概念が`src/feature-engineering-pass1/preprocessing.py`ファイルの次のセクションに示されています。

```
def chunks(lst, n):
    """
    Yield successive n-sized chunks from lst.
    
    :param lst: list of elements to be divided
    :param n: number of elements per chunk
    :type lst: list
    :type n: int
    :return: generator comprising evenly sized chunks
    :rtype: class 'generator'
    """
    for i in range(0, len(lst), n):
        yield lst[i:i + n]
 
 
# Generate list of data files on machine
data_dir = input_dir
d_subs = next(os.walk(os.path.join(data_dir, '.')))[1]
file_list = []
for ds in d_subs:
    file_list.extend(os.listdir(os.path.join(data_dir, ds, '.')))
dat_list = [os.path.join(re.split('_|\.', f)[0].replace('n', ''), f[:-4]) for f in file_list if f[-4:] == '.dat']
 
# Split list of files into sub-lists
cpu_count = multiprocessing.cpu_count()
splits = int(len(dat_list) / cpu_count)
if splits == 0: splits = 1
dat_chunks = list(chunks(dat_list, splits))
 
# Parallelize processing of sub-lists across CPUs
ws_df_list = Parallel(n_jobs=-1, verbose=0)(delayed(run_process)(dc) for dc in dat_chunks)
 
# Compile and pickle patient group dataframe
ws_df_group = pd.concat(ws_df_list)
ws_df_group = ws_df_group.reset_index().rename(columns={'index': 'signal'})
ws_df_group.to_json(os.path.join(output_dir, group_data_out))
```

最初に関数`chunks`を定義し、与えられたリストを`n `の長さの均一な大きさのブロックに分割し、その結果をジェネレータとして返すことにより、与えられたリストを使用します。次に、存在するすべてのバイナリ波形ファイルのリストをコンパイルして、データを患者フォルダ全体でフラット化します。これが完了すると、EC2 インスタンスで使用可能な vCPUs の数が取得されます。バイナリ波形ファイルのリストは、`chunks`を呼び出すことによってこれらのvCPUに均等に分割され、その後、「[joblibのParallelクラス](https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html)」を使用することによって、各波形サブリストがそれぞれのvCPUで処理されます。処理ジョブによって結果は自動的に 1 つのデータフレームリストにまとめられ、SageMaker はさらに処理してからジョブ完了時に Amazon S3 に書き込まれます。この例では、処理ジョブによって Amazon S3 に書き込まれるファイルが 10 個あります (ジョブごとに 1 つ)。

最初の処理ジョブがすべて完了すると、図 (3) の右側のブロックに示されているセカンダリ処理ジョブが、各プライマリ処理ジョブによって生成された出力ファイルを結合し、結合された出力を Amazon S3 (4) に書き込みます。

## ツール
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-tools"></a>

**ツール**
+ [Python](https://www.python.org/) — このパターンに使用されるサンプルコードは Python (バージョン 3) です。
+ [SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) – Amazon SageMaker Studio は、ウェブベースの機械学習用の統合開発環境 (IDE) です。この IDE を使うと、機械学習モデルを構築、トレーニング、デバッグ、デプロイ、モニタリングできます。SageMaker Processing ジョブは、SageMaker Studio 内の Jupyter Notebookを使用して実行します。
+ [SageMaker Processing](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) — Amazon SageMaker Processingを使用すると、データ処理ワークロードを簡単に実行できます。このパターンでは、特徴量エンジニアリングコードは SageMaker Processing ジョブを使用して大規模に実装されます。

**Code**

添付の.zip ファイルには、このパターンの完全なコードが記載されています。次のセクションでは、このパターンのアーキテクチャを構築する手順について説明します。各ステップは、添付ファイルのサンプルコードで説明されています。

## エピック
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-epics"></a>

### SageMaker Studio 環境をセットアップする
<a name="set-up-your-sagemaker-studio-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon SageMaker Studio へアクセスします。 | 「[Amazon SageMaker ドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html)」に記載されている指示に従って、AWS アカウントの SageMaker Studio にオンボーディングします。 | データサイエンティスト、ML エンジニア | 
| wget ユーティリティをインストールします。 | 新しい SageMaker Studio 構成をオンボーディングした場合や、SageMaker Studio でこれらのユーティリティをこれまで使用したことがない場合は、「*wget*」をインストールしてください。 インストールするには、SageMaker Studio コンソールでターミナルウィンドウを開き、以下のコマンドを実行します。<pre>sudo yum install wget</pre> | データサイエンティスト、ML エンジニア | 
| サンプルコードをダウンロードして解凍します。 | 「*添付ファイル*」セクションから`attachments.zip`ファイルをダウンロードします。ターミナルウィンドウで、ファイルをダウンロードしたフォルダに移動し、その内容を抽出します。<pre>unzip attachment.zip</pre>`Scaled-Processing.zip`ファイルを抽出したフォルダに移動し、ファイルの内容を抽出します。<pre>unzip Scaled-Processing.zip</pre> | データサイエンティスト、ML エンジニア | 
| physionet.org からサンプルデータセットをダウンロードし、Amazon S3 にアップロードします。 | `Scaled-Processing`ファイルが含まれているフォルダ内で `get_data.ipynb` Jupyter Notebookを実行します。このノートブックは「[physionet.org](https://physionet.org)」からサンプル MIMIC-III データセットをダウンロードし、Amazon S3 の SageMaker Studio セッションバケットにアップロードします。 | データサイエンティスト、ML エンジニア | 

### 1 つ目の前処理スクリプトを設定します。
<a name="configure-the-first-preprocessing-script"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| すべてのサブディレクトリにわたってファイル階層をフラット化する。 | MIMIC-III のような大規模なデータセットでは、論理的な親グループ内であってもファイルが複数のサブディレクトリに分散されることがよくあります。次のコードが示すように、スクリプトはすべてのサブディレクトリにあるすべてのグループファイルをフラット化するように設定する必要があります。<pre># Generate list of .dat files on machine<br />data_dir = input_dir<br />d_subs = next(os.walk(os.path.join(data_dir, '.')))[1]<br />file_list = []<br />for ds in d_subs:<br />    file_list.extend(os.listdir(os.path.join(data_dir, ds, '.')))<br />dat_list = [os.path.join(re.split('_|\.', f)[0].replace('n', ''), f[:-4]) for f in file_list if f[-4:] == '.dat']</pre>    このエピックのサンプルコードスニペットは、添付ファイルにある `src/feature-engineering-pass1/preprocessing.py` ファイルからのものです。 | データサイエンティスト、ML エンジニア | 
| vCPU 数に基づいてファイルをサブグループに分割します。 | ファイルは、スクリプトを実行するインスタンスに存在するvCPUs の数に応じて、同じサイズのサブグループまたはチャンクに分割する必要があります。このステップでは、次のようなコードを実装できます。<pre># Split list of files into sub-lists<br />cpu_count = multiprocessing.cpu_count()<br />splits = int(len(dat_list) / cpu_count)<br />if splits == 0: splits = 1<br />dat_chunks = list(chunks(dat_list, splits))</pre> | データサイエンティスト、ML エンジニア | 
| vCPUs 間のサブグループの処理を並列化します。 | スクリプトロジックは、すべてのサブグループを並行して処理するように設定する必要があります。そのためには、Joblib ライブラリの`Parallel `クラスと`delayed `メソッドを次のように使用します。 <pre># Parallelize processing of sub-lists across CPUs<br />ws_df_list = Parallel(n_jobs=-1, verbose=0)(delayed(run_process)(dc) for dc in dat_chunks)</pre> | データサイエンティスト、ML エンジニア | 
| Amazon S3 に単一ファイルグループの出力を保存します。 | 並列 vCPU 処理が完了したら、各 vCPU の結果を組み合わせて、ファイルグループの S3 バケットパスにアップロードする必要があります。このステップでは、次のようなコードを実行できます。<pre># Compile and pickle patient group dataframe<br />ws_df_group = pd.concat(ws_df_list)<br />ws_df_group = ws_df_group.reset_index().rename(columns={'index': 'signal'})<br />ws_df_group.to_json(os.path.join(output_dir, group_data_out))</pre> | データサイエンティスト、ML エンジニア | 

### 2 つ目の前処理スクリプトを設定します。
<a name="configure-the-second-preprocessing-script"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 最初のスクリプトを実行したすべての処理ジョブで生成されたデータファイルを結合します。 | 前述のスクリプトは、データセットのファイルグループを処理する SageMaker Processing ジョブごとに 1 つのファイルを出力します。 次に、これらの出力ファイルを 1 つのオブジェクトに結合し、1 つの出力データセットを Amazon S3 に書き込む必要があります。これは、添付ファイルにある`src/feature-engineering-pass1p5/preprocessing.py`ファイルに次のように示されています。<pre>def write_parquet(wavs_df, path):<br />    """<br />    Write waveform summary dataframe to S3 in parquet format.<br />    <br />    :param wavs_df: waveform summary dataframe<br />    :param path: S3 directory prefix<br />    :type wavs_df: pandas dataframe<br />    :type path: str<br />    :return: None<br />    """<br />    extra_args = {"ServerSideEncryption": "aws:kms"}<br />    wr.s3.to_parquet(<br />        df=wavs_df,<br />        path=path,<br />        compression='snappy',<br />        s3_additional_kwargs=extra_args)<br /> <br /> <br />def combine_data():<br />    """<br />    Get combined data and write to parquet.<br />    <br />    :return: waveform summary dataframe<br />    :rtype: pandas dataframe<br />    """<br />    wavs_df = get_data()<br />    wavs_df = normalize_signal_names(wavs_df)<br />    write_parquet(wavs_df, "s3://{}/{}/{}".format(bucket_xform, dataset_prefix, pass1p5out_data))<br /> <br />    return wavs_df<br /> <br /> <br />wavs_df = combine_data()</pre> | データサイエンティスト、ML エンジニア | 

### 処理ジョブの実行
<a name="run-processing-jobs"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 最初の処理ジョブを実行します。 | マクロシャーディングを実行するには、ファイルグループごとに個別の処理ジョブを実行します。マイクロシャーディングは各処理ジョブ内で実行されます。これは、各ジョブで最初のスクリプトが実行されるためです。次のコードは、次のスニペット (`notebooks/FeatExtract_Pass1.ipynb`に含まれている) 内の各ファイルグループディレクトリの処理ジョブを起動する方法を示しています。<pre>pat_groups = list(range(30,40))<br />ts = str(int(time.time()))<br /> <br />for group in pat_groups:<br />    sklearn_processor = SKLearnProcessor(framework_version='0.20.0',<br />                                     role=role,<br />                                     instance_type='ml.m5.4xlarge',<br />                                     instance_count=1,<br />                                     volume_size_in_gb=5)<br />    sklearn_processor.run(<br />        code='../src/feature-engineering-pass1/preprocessing.py',<br />        job_name='-'.join(['scaled-processing-p1', str(group), ts]),<br />        arguments=[<br />            "input_path", "/opt/ml/processing/input",<br />            "output_path", "/opt/ml/processing/output",<br />            "group_data_out", "ws_df_group.json"<br />        ],<br />        inputs=<br />        [<br />            ProcessingInput(<br />                source=f's3://{sess.default_bucket()}/data_inputs/{group}',<br />                destination='/opt/ml/processing/input',<br />                s3_data_distribution_type='FullyReplicated'<br />            )<br />        ],<br />        outputs=<br />        [<br />            ProcessingOutput(<br />                source='/opt/ml/processing/output',<br />                destination=f's3://{sess.default_bucket()}/data_outputs/{group}'<br />            )<br />        ],<br />        wait=False<br />    )</pre> | データサイエンティスト、ML エンジニア | 
| 2 つ目の処理ジョブを実行します。 | 最初の処理ジョブセットで生成された出力を結合し、前処理のために追加の計算を実行するには、1 つの SageMaker 処理ジョブを使用して 2 番目のスクリプトを実行します。次のコードはこれを示しています (`notebooks/FeatExtract_Pass1p5.ipynb`に含まれている)。<pre>ts = str(int(time.time()))<br />bucket = sess.default_bucket()<br />     <br />sklearn_processor = SKLearnProcessor(framework_version='0.20.0',<br />                                 role=role,<br />                                 instance_type='ml.t3.2xlarge',<br />                                 instance_count=1,<br />                                 volume_size_in_gb=5)<br />sklearn_processor.run(<br />    code='../src/feature-engineering-pass1p5/preprocessing.py',<br />    job_name='-'.join(['scaled-processing', 'p1p5', ts]),<br />    arguments=['bucket', bucket,<br />               'pass1out_prefix', 'data_outputs',<br />               'pass1out_data', 'ws_df_group.json',<br />               'pass1p5out_data', 'waveform_summary.parquet',<br />               'statsdata_name', 'signal_stats.csv'],<br />    wait=True<br />)</pre> | データサイエンティスト、ML エンジニア | 

## 関連リソース
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-resources"></a>
+ [クイックスタートを使用して Amazon SageMaker Studio にオンボーディングする](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html) (SageMaker ドキュメント)
+ [プロセスデータ](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) (SageMaker ドキュメンテーション) 
+ [scikit-learn を使ってデータを処理する](https://docs.aws.amazon.com/sagemaker/latest/dg/use-scikit-learn-processing-container.html) (SageMaker ドキュメンテーション) 
+ [JobLib. パラレルドキュメンテーション](https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html)
+ ムーディ、B.、ムーディ、G.、ビジャロエル、M.、クリフォード、G.D.、シルバ、I. (2020)。[MIMIC-III](https://doi.org/10.13026/c2607m) 波形データベース (バージョン 1.0)。*フィジオネット*。
+ ジョンソン、A. E. W.、ポラード、T.J.、シェン、L.、リーマン、L.H.、フェン、M.、ガセミ、M.、ムーディ、B.、ゾロビッツ、P.、セリ、L.A.、マーク、R.G.（2016）。「[MIMIC-III](https://dx.doi.org/10.1038/sdata.2016.35)」は、無料でアクセスできる救命救急データベースです。科学データ、3、160035。
+ [MIMIC-III 波形データベースライセンス](https://physionet.org/content/mimic3wdb/1.0/LICENSE.txt)

## アタッチメント
<a name="attachments-e7a90b31-de8f-41fd-bb3f-c7c6100fc306"></a>

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「[attachment.zip](samples/p-attach/e7a90b31-de8f-41fd-bb3f-c7c6100fc306/attachments/attachment.zip)」

# フラスコと AWS Elastic Beanstalk を使用して AI/ML モデルの結果を視覚化
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk"></a>

*Amazon Web Services、Chris Caudill、Durga Sury*

## 概要
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-summary"></a>

人工知能と機械学習 (AI/ML) サービスからの出力を視覚化するには、開発者やエンジニアがカスタマイズする必要な複雑な API 呼び出しが必要になることがよくあります。アナリストが新しいデータセットを迅速に探索する場合、これは欠点になる可能性があります。

ウェブベースのユーザーインターフェイス (UI) を使用することで、サービスのアクセシビリティを高め、よりインタラクティブなデータ分析を実現できます。これにより、ユーザーが独自のデータをアップロードし、ダッシュボードでモデルの結果を視覚化できます。

このパターンでは、[Flask](https://flask.palletsprojects.com/en/2.0.x/) と [Plotly](https://plotly.com/) を使用して、 Amazon Comprehend をカスタムウェブアプリケーションと統合し、ユーザーが提供したデータからセンチメントとエンティティを視覚化します。このパターンでは、AWS Elastic Beanstalk を使用してアプリケーションをデプロイするステップも記載されています。[Amazon Web Services (AWS) の AI サービス](https://aws.amazon.com/machine-learning/ai-services/)を使用するか、エンドポイント ([Amazon SageMaker エンドポイントなど](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)) でホストされるカスタムトレーニング済みモデルを使用してアプリケーションを適応させることができます。

## 前提条件と制限事項
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。 
+ ローカルマシンにインストールされ、設定されたAWS コマンドラインインターフェイス (AWS CLI) 詳細については、JupyterHub ドキュメントの[Configuration Basics](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) を参照してください。AWS Cloud9 統合開発環境 (IDE) を使用することもできます。詳細については、AWS Cloud9 ドキュメントの[AWS Cloud9 の Python チュートリアル](https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-python.html)」と[AWS Cloud9 IDE で実行中のアプリケーションのプレビュー](https://docs.aws.amazon.com/cloud9/latest/user-guide/app-preview.html) を参照してください。

  **注意**: AWS Cloud9 は新規顧客には利用できなくなりました。の既存のお客様は、通常どおりサービスを AWS Cloud9 引き続き使用できます。[詳細はこちら](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
+ Flask のウェブアプリケーションフレームワークについての理解。 へのサインアップの詳細については、 ドキュメント内の[クイックスタート](https://flask.palletsprojects.com/en/1.1.x/quickstart) を参照してください。
+ インストールされ、設定されたPython バージョン 3.6 以降。Python をインストールするには、AWS Elastic Beanstalk ドキュメントの[Python 開発環境のセットアップ](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-development-environment.html) の指示に従います。
+ Elastic Beanstalk コマンドラインインターフェイス (EB CLI) これに関する詳細については、AWS Elastic Beanstalk ドキュメントから[EB CLI をインストール](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) と[EB CLI を設定](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-configuration.html) を参照してください。

**制限事項**
+ このパターンの Flask アプリケーションは、単一のテキスト列を使用し、200 行に制限されている.csv ファイルで動作するように設計されています。アプリケーションコードは他のファイルタイプやデータ量を処理するように調整できます。
+ アプリケーションはデータの保持を考慮せず、アップロードされたユーザーファイルは手動で削除されるまで集計を続けます。アプリケーションを Amazon Simple Storage Service (Amazon S3) と統合して永続的なオブジェクトストレージを作成したり、Amazon DynamoDB などのデータベースを使用してサーバーレスのキーバリューストレージを作成したりできます。
+ このアプリケーションは英語のドキュメントのみを考慮します。ただし、Amazon Comprehend を使用してドキュメントの主要言語を検出することはできます。各アクションに適用される言語の詳細については、Amazon Comprehend ドキュメントの[API リファレンス](https://docs.aws.amazon.com/comprehend/latest/dg/API_Reference.html) を参照してください。
+ 一般的なエラーとその解決策を含むトラブルシューティングリストは、*追加情報*セクションにあります。

## アーキテクチャ
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-architecture"></a>

**アプリケーションのアーキテクチャ**

Flaskは、Pythonでウェブアプリケーションを開発するための軽量フレームワークです。Python の強力なデータ処理と豊富な ウェブ UI を組み合わせるように設計されています。パターンの Flask アプリケーションでは、ユーザーがデータをアップロードし、そのデータを Amazon Comprehend に送信して推論し、結果を視覚化するウェブアプリケーションの構築方法を示しています。  マッピングドキュメントの構造は次のとおりです。
+ `static` — ウェブ UI が適用されるすべての静的ファイル (JavaScript、CSS、画像など) が含まれています。
+ `templates` — アプリケーションのすべての HTML ページが含まれます。
+ `userData` — アップロードされたユーザーデータを格納します。
+ `application.py` — Flask アプリケーションファイル
+ `comprehend_helper.py` — Amazon Comprehend に API 呼び出しを行う関数
+ アプリケーション設定ファイル。
+ `requirements.txt` — アプリケーションに必要な Python の依存関係

`application.py` このスクリプトには、4 つの Flask ルートで構成されるウェブアプリケーションのコア機能が含まれています。以下の図に、これらの Flask ルートを示します。

![\[ウェブアプリケーションのコア機能を構成する 4 つの Flask ルート。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/9ca6bad1-26e2-4262-98d0-d54c172336bf.png)


 
+ `/` はアプリケーションのルートで、ユーザーを `upload.html` ページ ( `templates` ディレクトリに格納) にガイドします。
+ `/saveFile` は、ユーザーがファイルをアップロードした後に呼び出されるルートです。このルートは、ユーザーがアップロードしたファイルを含む HTML フォームを介して `POST` リクエストを受け取ります。`userData` ファイルがディレクトリに保存され、ルートはユーザーを `/dashboard` ルートにガイドします。
+ `/dashboard` がユーザーを `dashboard.html` ページにがガイドします。このページの HTML、`/data` ルートからデータを読み取る `static/js/core.js` に JavaScript コードを実行して、ページの視覚化を構築します。
+ `/data` は、ダッシュボードに視覚化されるデータを表示する JSON API です。このルートでは、ユーザーが提供したデータを読み取り、`comprehend_helper.py` の関数を使用してユーザーデータを Amazon Comprehend にガイドして、センチメント分析と名前付けのエンティティ認識 (NER) を行います。Amazon Comprehend のレスポンスがフォーマットされ、JSON オブジェクトとして返されます。

デプロイアーキテクチャ

![\[フラスコと Elastic Beanstalk を使用して AI/ML モデルの結果を視覚化するためのアーキテクチャ図。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/d691bfd2-e2ec-4830-8bff-ffa1e3a95c4a.png)


[設計上の考慮事項](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.concepts.design.html)

 AWS クラウドで Elastic Beanstalk を使用してデプロイされるアプリケーションの設計の考慮事項の詳細については、AWS Elastic Beanstalk ドキュメントを参照してください。

**テクノロジースタック**
+ Amazon Comprehend 
+ (Elastic Beanstalk) 
+ Flask 

**自動化とスケール**

Elastic Beanstalk のデプロイは、ロードバランサーとauto スケーリンググループを使用して自動的にセットアップされます。その他の設定オプションについては、AWS Elastic Beanstalk ドキュメントの[Elastic Beanstalk 環境設定](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html) を参照してください。

## ツール
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-tools"></a>
+ [AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、AWS のすべての部分を操作するための一貫したインターフェイスを提供する統合ツールです。
+ [Amazon Comprehend](https://docs.aws.amazon.com/comprehend/latest/dg/comprehend-general.html) では、ドキュメントの内容に関するインサイトの抽出用に自然言語処理 (NLP) を使用しています。
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) を使用すると、アプリケーションを実行しているインフラストラクチャについて知識を得なくても、AWS クラウドでアプリケーションのデプロイと管理を簡単に行うことができます。
+ [Elastic Beanstalk CLI (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3.html) は AWS Elastic Beanstalk のコマンドラインインターフェイスで、ローカルリポジトリの環境の作成、更新、モニタリングを簡素化するインタラクティブコマンドを提供します。
+ [Flask](https://flask.palletsprojects.com/en/2.0.x/) フレームワークは Python を使用してデータ処理と API コールを実行し、Plotly を使用してインタラクティブなウェブビジュアライゼーションを提供します。

**コード**

このパターンのコードは、GitHub 内の「[Flask と AWS Elastic Beanstalk を使用して AI/ML モデルの結果を視覚化](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask)」リポジトリで利用できます。

## エピック
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-epics"></a>

### Flask アプリケーションをセットアップします。
<a name="set-up-the-flask-application"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| GitHub リポジトリのクローンを作成します。 | 次のコマンドを実行して、GitHub の [Flask と AWS Elastic Beanstalk を使用して、AI/ML モデル結果を可視化](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask) を取得します。`git clone git@github.com:aws-samples/aws-comprehend-elasticbeanstalk-for-flask.git`必ず GitHub に SSH キーを設定します。 | 開発者 | 
| Python モジュールをインストールします。 | リポジトリをクローンすると、新しいローカル `aws-comprehend-elasticbeanstalk-for-flask` ディレクトリが作成されます。そのディレクトリでは、`requirements.txt` ファイルには、アプリケーションを実行する Python モジュールとバージョンが含まれています。 と をインストールするには、次のコマンドを使用します。`cd aws-comprehend-elasticbeanstalk-for-flask``pip install -r requirements.txt` | Python 開発 | 
| アプリケーションのローカルテスト | 次のコマンドを実行して、Weka サーバーを作成します。`python application.py`これにより、実行中のサーバーに関する情報が返されます。ブラウザを開いて http://localhost:5000 にアクセスすると、アプリケーションにアクセスできます。アプリケーションを AWS Cloud9 IDE で実行している場合、`application.py` ファイル内の `application.run()` コマンドを次の行に置き換える必要があります。`application.run(host=os.getenv('IP', '0.0.0.0'),port=int(os.getenv('PORT', 8080)))`デプロイする前にこの変更を元に戻す必要があります。 | Python 開発 | 

### アプリケーションを Elastic Beanstalk にデプロイします。
<a name="deploy-the-application-to-elastic-beanstalk"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS Elastic Beanstalk アプリケーション | Elastic Beanstalk アプリケーションとしてプロジェクトを起動するには、アプリケーションのルートディレクトリから以下のコマンドを実行します。`eb init -p python-3.6 comprehend_flask --region us-east-1`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html)`eb init -i` コマンドを実行する場合、より多くのデプロイ設定オプションが表示されます。 | アーキテクト、開発者 | 
| Elastic Beanstalk 環境をデプロイします。 | プロジェクトルートディレクトリから以下のコマンドを実行すると、アプリケーションが構築されます。`eb create comprehend-flask-env``comprehend-flask-env` は Elastic Beanstalk 環境の名前で、必要に応じて変更できます。含むことができるのは、英文字、数字、およびダッシュのみです。 | アーキテクト、開発者 | 
| Amazon Comprehend を使用するようにデプロイを承認します。 | アプリケーションが正常にデプロイされるかもしれませんが、デプロイに Amazon Comprehend へのアクセス権も提供する必要があります。`ComprehendFullAccess` は、デプロイされたアプリケーションに Amazon Comprehend への API 呼び出しを行うためのアクセス権限を提供する AWS 管理ポリシーです。次のコマンドを実行して、`aws-elasticbeanstalk-ec2-role` に `ComprehendFullAccess` ポリシーを添付します(このロールがデプロイの Amazon Elastic Compute Cloud (Amazon EC2 インスタンスに自動的に作成)。`aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ComprehendFullAccess --role-name aws-elasticbeanstalk-ec2-role``aws-elasticbeanstalk-ec2-role` は、アプリケーションのデプロイ時に作成されます。AWS Identity and Access Management (IAM) ポリシーをアタッチする前に、デプロイプロセスを完了する必要があります。 | 開発者、セキュリティアーキテクト | 
| デプロイしたアプリケーションにアクセスします。 | アプリケーションが正常にデプロイされた後、 `eb open` コマンドを実行して、そのアプリケーションにアクセスできます。`eb status` コマンドを実行して、デプロイに関する詳細を取得することもできます。デプロイ URL は `CNAME` に記載されています。 | アーキテクト、開発者 | 

### (オプション) ML モデルに合わせてアプリケーションをカスタマイズ
<a name="optional-customize-the-application-to-your-ml-model"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Elastic Beanstalk が新しいモデルにアクセスすることを許可します。 | Elastic Beanstalk に新しいモデルエンドポイントに必要なアクセス権限があることを保証します。たとえば、Amazon SageMaker エンドポイントを使用する場合、デプロイにはエンドポイントを呼び出すアクセス権限が必要です。 これに関する詳細については、Amazon SageMaker ドキュメントの[InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) を参照してください。 | 開発者、セキュリティアーキテクト | 
| ユーザーデータを新しいモデルに送信します。 | このアプリケーションの基になる ML モデルを変更するには、以下のファイルを変更する必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html) | データサイエンティスト | 
| ダッシュボードのビジュアライゼーションを更新します。 | 通常、新しい ML モデルを組み込むと、新しい結果を反映するようにビジュアライゼーションを更新する必要があります。これらのフラグは、次のファイルで定義されています。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html) | ウェブ開発者 | 

### 更新したアプリケーションをデプロイします。
<a name="optional-deploy-the-updated-application"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アプリケーションの要件ファイルを更新します。 | Elastic Beanstalk に変更を送信する前に、アプリケーションのルートディレクトリで以下のコマンドを実行して、新しい Pythonモジュールを反映するように `requirements.txt` ファイルを更新します。`pip freeze > requirements.txt` | Python 開発 | 
| Elastic Beanstalk 環境をセットアップします。 | アプリケーションの変更が Elastic Beanstalk デプロイに確実に反映されるようにするには、アプリケーションのルートディレクトリに移動し、以下のコマンドを実行します。`eb deploy`これにより、アプリケーションのコードの最新バージョンが既存の Elastic Beanstalk デプロイに送信されます。 | システム管理者、アーキテクト | 

## 関連リソース
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-resources"></a>
+ [Amazon API Gatewayと AWS Lambda を使用して Amazon SageMaker モデルエンドポイントを呼び出す](https://aws.amazon.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/)
+ [Elastic Beanstalk への Flask アプリケーションのデプロイ](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html)
+ [EB CLI コマンドリファレンス](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-cmd-commands.html)
+ [Python 開発環境をセットアップします](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-development-environment.html)

## 追加情報
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-additional"></a>

**トラブルシューティングのリスト**

一般的な原因とその解決策を以下に示します。

***エラー 1* **

```
Unable to assume role "arn:aws:iam::xxxxxxxxxx:role/aws-elasticbeanstalk-ec2-role". Verify that the role exists and is configured correctly.
```

**解決策**： `eb create` を実行する時、このエラーが発生した場合、Elastic Beanstalk コンソールでサンプルアプリケーションを作成して、デフォルトのインスタンスプロファイルを作成します。詳細については、AWS Elastic Beanstalk ドキュメントの[Elastic Beanstalk 環境を作成](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.environments.html) を参照してください。

***エラー 2***

```
Your WSGIPath refers to a file that does not exist.
```

**解決策：**このエラーがデプロイログで発生されます。Elastic Beanstalk が `application.py` という名前のFlask コードを想定しているためです。別の名前を選択した場合は、次のコードサンプルに示すように WSGIPath `eb config` を実行して編集します。

```
aws:elasticbeanstalk:container:python:
     NumProcesses: '1'
     NumThreads: '15'
     StaticFiles: /static/=static/
     WSGIPath: application.py
```

自分のファイル名で `application.py` を置き換えます。

 Gunicorn と Procfile を利用することもできます。このアプローチの詳細については、AWS Elastic Beanstalk ドキュメントの[プロファイルファイルによる WSGI サーバーの設定](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-configuration-procfile.html) を参照してください。

***エラー 3***

```
Target WSGI script '/opt/python/current/app/application.py' does not contain WSGI application 'application'.
```

**解決策：**Elastic Beanstalk では、Flask アプリケーションを表す変数に `application` という名前が付けられていることを想定しています。`application.py` ファイルが変数名として `application` を使用していることを確認します。

```
application = Flask(__name__)
```

***エラー 4***

```
The EB CLI cannot find your SSH key file for keyname
```

**解決策：**EB CLI を使用して、使用するキーペアを指定するか、デプロイの EC2 インスタンス用のキーペアを作成します。エラーを解決するには、`eb init -i` を実行します。一つのオプションでは、下記のように提示されます。

```
Do you want to set up SSH for your instances?
```

`Y` と回答して、キーペアを作成するか、既存のキーペアを指定します。

***エラー 5***

*コードを更新して再デプロイしましたが、デプロイに変更が反映されていません。*

**解決策：**デプロイに Git リポジトリを使用している場合、再デプロイする前に変更を追加してコミットする必要があります。

***エラー 6***

*AWS Cloud9 IDE から Flask アプリケーションをプレビューしていて、エラーが発生しました。*

**解決策：**詳細については、AWS Cloud9 ドキュメントの「[AWS Cloud9 IDE での実行中のアプリケーションのプレビュー](https://docs.aws.amazon.com/cloud9/latest/user-guide/app-preview.html)」 を参照してください。

 

 

**自然言語処理に Amazon Comprehend を使用**

Amazon Comprehend を使用することを選択すると、リアルタイム分析または非同期バッチジョブを実行して、個々のテキストドキュメント内のカスタムエンティティを検出できます。Amazon Comprehend では、エンドポイントを作成することでリアルタイムで使用できるカスタムエンティティ認識モデルとテキスト分類モデルをトレーニングすることもできます。

このパターンでは、非同期バッチジョブを使用して、複数のドキュメントを含む入力ファイルからセンチメントとエンティティを検出します。このパターンで提供されるサンプルアプリケーションは、ユーザーが 1 つの列と 1 行に 1 つのテキストドキュメントを含む.csv ファイルをアップロードできるように設計されています。GitHub の[Flask と AWS Elastic Beanstalk を使用して、Visualize AI/ML モデルの結果を視覚化](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask) リポジトリの `comprehend_helper.py` ファイルが、入力ファイルを読み取り、その入力を Amazon Comprehend に送信して処理します。

*BatchDetectEntities*

Amazon Comprehend は、一連のドキュメントのテキストに指定されたエンティティがないか検査し、検出されたエンティティ、場所、[エンティティのタイプ](https://docs.aws.amazon.com/comprehend/latest/dg/how-entities.html)、および Amazon Comprehend の信頼度を示すスコアを返します。1 つの API 呼び出しで送信できるドキュメントは最大 25 個で、各ドキュメントのサイズは 5,000 バイト未満です。結果をフィルタリングして、ユースケースに基づいて特定のエンティティのみを表示できます。たとえば、`‘quantity’` エンティティタイプをスキップして、検出されたエンティティのしきい値スコア (0.75 など) を設定できます。しきい値を選択する前に、特定のユースケースの結果を調べることを推薦します。これに関する詳細については、Amazon Comprehend ドキュメントの[BatchDetectEntities](https://docs.aws.amazon.com/comprehend/latest/dg/API_BatchDetectEntities.html) を参照してください。

*BatchDetectSentiment*

Amazon Comprehend は、受信した複数のドキュメントを検査し、各ドキュメントの一般的なセンチメント(`POSITIVE`、`NEUTRAL`、`MIXED`、または `NEGATIVE`)を返します。1 つの API 呼び出しで送信できるドキュメントは最大 25 個で、各ドキュメントのサイズは 5,000 バイト未満です。センチメントの分析は簡単で、スコアが最も高いセンチメントを選択して最終結果に表示します。これに関する詳細については、Amazon Comprehend ドキュメントの[BatchDetectSentiment](https://docs.aws.amazon.com/comprehend/latest/dg/API_BatchDetectSentiment.html) を参照してください。

 

 

**フラスコの設定処理**

Flask サーバーは一連の[設定変数](https://flask.palletsprojects.com/en/1.1.x/config/) を使用して、サーバーの実行方法を制御します。これらの変数には、デバッグ出力、セッショントークン、その他のアプリケーション設定を含めることができます。アプリケーションの実行中にアクセスできるカスタム変数を定義することもできます。設定変数を設定する方法は複数あります。

このパターンでは、設定が `config.py` で定義され、`application.py` の内部で継承されます。
+ 
**注記**  
 `config.py` には、アプリケーションの起動時に設定される設定変数が含まれます。このアプリケーションでは、サーバーを[デバッグモード](https://flask.palletsprojects.com/en/1.1.x/config/#DEBUG) で実行するようにアプリケーションに指示する `DEBUG` 変数が定義されています。実稼働環境でアプリケーションを実行する場合、デバッグモードを使用しません。`UPLOAD_FOLDER` は、アプリケーションで後から参照できるように定義されるカスタム変数で、アップロードされたユーザーデータの保存場所を通知します。
+ `application.py` はFlask アプリケーションを初期化し、`config.py` で定義されている設定を継承します。これは以下のコードによって実行されます。

```
application = Flask(__name__)
application.config.from_pyfile('config.py')
```

# その他のパターン
<a name="machinelearning-more-patterns-pattern-list"></a>

**Topics**
+ [Backstage とセルフサービスの Amazon SageMaker AI テンプレートを使用して MLOps を高速化](accelerate-mlops-with-backstage-and-sagemaker-templates.md)
+ [Amazon Bedrock を使用して AWS インフラストラクチャオペレーションを自動化する](automate-aws-infrastructure-operations-by-using-amazon-bedrock.md)
+ [Terraform を使用して CrewAI フレームワークで Amazon Bedrock にエージェンティックシステムを展開する](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [ChatOps ソリューションをデプロイして、チャットアプリケーションのカスタムアクションと で Amazon Q Developer を使用して SAST スキャン結果を管理する CloudFormation](deploy-chatops-solution-to-manage-sast-scan-results.md)
+ [Quick Sight で AWS Mainframe Modernization と Amazon Q を使用してデータインサイトを生成する](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [Quick Sight で AWS Mainframe Modernization と Amazon Q を使用して Db2 z/OS データインサイトを生成する](generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.md)
+ [SageMaker ノートブックインスタンスに、別の AWS アカウントの CodeCommit リポジトリへの一時的なアクセスを許可する](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [AWS CodePipeline と Amazon Bedrock を使用して AWS Organizations ポリシーをコードとして管理する](manage-organizations-policies-as-code.md)
+ [を使用して CardDemo メインフレームアプリケーションをモダナイズする AWS Transform](modernize-carddemo-mainframe-app.md)
+ [と Terraform を使用してメインフレームアプリケーションをモダナイズ AWS Transform およびデプロイする](modernize-mainframe-app-transform-terraform.md)
+ [Amazon Redshift ML機械学習を使用して高度な分析を実行する](perform-advanced-analytics-using-amazon-redshift-ml.md)
+ [Amazon Bedrock エージェントと を使用して Amazon EC2 コンプライアンス管理を合理化する AWS Config](streamline-amazon-ec2-compliance-management-with-amazon-bedrock-agents-and-aws-config.md)
+ [自動ワークフローを使用して Amazon Lex ボットの開発とデプロイを合理化する](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Amazon Bedrock AWS Step Functions を使用して の状態をトラブルシューティングする](troubleshooting-states-in-aws-step-functions.md)