

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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 및 Hydra를 사용하여 로컬 개발에서 확장 가능한 실험으로 기계 학습 워크플로 간소화](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)
+ [테라바이트 규모의 ML 데이터셋의 분산형 피처 엔지니어링에 SageMaker 프로세싱을 사용하기](use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets.md)
+ [Flask와 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>

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

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

이 패턴은 한의 AWS CodeCommit 리포지토리 AWS 계정 (계정 A)를 다른의 Amazon SageMaker AI Studio Classic AWS 계정 (계정 B)과 연결하는 방법에 대한 지침과 코드를 제공합니다. 연결을 설정하려면 계정 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>

**사전 조건**
+ [AWS 계정](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) 2개, 하나는 CodeCommit 리포지토리를 포함하고 다른 하나는 사용자가 있는 SageMaker AI 도메인 포함
+ 가상 프라이빗 네트워크(VPC AWS STS) 엔드포인트를 통해 CodeCommit 및 AWS Security Token Service ()에 인터넷 액세스 또는 액세스할 수 있는 프로비저닝된 [SageMaker AI 도메인 및 사용자](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html)
+ [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/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d40df9eb-6ee2-4cb8-8257-051fa624e52a/images/abb89a66-fc8f-4e72-8f45-f0f44c2ec6ce.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자는 `sts:AssumeRole` 역할을 통해 계정 A에서 `MyCrossAccountRepositoryContributorRole` 역할을 수임하고, 계정 B의 SageMaker AI Studio Classic에서 SageMaker AI 실행 역할을 사용합니다. 위임된 역할에는 지정된 리포지토리를 복제하고 상호 작용할 수 있는 CodeCommit 권한이 포함됩니다.

1. 사용자는 SageMaker AI Studio Classic의 시스템 터미널에서 Git 명령을 수행합니다.

**자동화 및 규모 조정**

이 패턴은 [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)입니다.
+ [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>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 계정 A에서 리포지토리 액세스에 대한 IAM 정책을 만듭니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html)IAM 정책의 범위를 사용 사례에 필요한 최소 권한으로 제한하는 것이 가장 좋습니다. | DevOps | 
| 계정 A에서 리포지토리 액세스를 위한 IAM 역할을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html) | DevOps | 

### 계정 B용 SageMaker AI Studio Classic에서 리포지토리를 복제합니다.
<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/ko_kr/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/ko_kr/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html)SageMaker AI Studio 계정 전반에서 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 클라우드에서 Amazon Textract는 PDF 파일에서 정보(예: 인쇄된 텍스트, 양식 및 표)를 자동으로 추출하고 소스 PDF 파일의 정보가 포함된 JSON 형식의 파일을 생성합니다. AWS Management Console에서 또는 API 직접 호출을 구현하여 Amazon Textract를 사용할 수 있습니다. [프로그래밍 방식의 API 직접 호출](https://aws.amazon.com/textract/faqs/)을 사용하여 많은 수의 PDF 파일을 확장하고 자동으로 처리하는 것을 권장합니다.

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>

**사전 조건 **
+ 활성 상태의 계정.
+ Amazon Textract에서 처리할 수 있도록 PDF 파일을 JPEG 형식으로 변환한 후 해당 파일을 저장할 기존 Amazon Simple Storage Service(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 형식으로 변환된 스캔 문서를 사용할 수 있습니다. 이에 대한 자세한 내용은 Machine Learning 블로그에서 [Amazon Textract를 사용한 PDF 문서 사전 처리: 시각적 탐지 및 제거](https://aws.amazon.com/blogs/machine-learning/process-text-and-images-in-pdf-documents-with-amazon-textract/)를 참고하십시오.
+ 여러 페이지 파일의 경우 비동기 작업을 사용하거나 PDF 파일을 단일 페이지로 분할하고 동기 작업을 사용할 수 있습니다. 이 두 옵션에 대한 자세한 내용은 Amazon Textract 설명서의 [여러 페이지 문서에서 텍스트 감지 및 분석](https://docs.aws.amazon.com/textract/latest/dg/async.html) 및 [단일 페이지 문서의 텍스트 감지 및 분석](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/ko_kr/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. 각 필수 필드에 올바른 `KeyName:DataType` 페어를 추가하여 JSON 파일을 편집하십시오. *반복 실행* 단계를 위한 `TemplateJSON` 파일을 생성합니다.

1. 각 데이터 유형(예: 부동 소수점, 정수, 날짜)에 대한 사후 처리 수정 함수를 정의합니다.

1. 첫 번째 PDF 파일과 형식이 동일한 PDF 파일을 준비합니다.

1. Amazon Textract API를 호출하고 Amazon Textract 응답 JSON을 파싱합니다.

1. 파싱된 JSON 파일을 `TemplateJSON` 파일과 일치시킵니다.

1. 사후 처리 수정을 구현합니다.

최종 JSON 출력 파일에는 각 필수 필드에 대한 올바른 `KeyName` 및 `Value`이 있습니다.

**대상 기술 스택  **
+ Amazon SageMaker 
+ Amazon S3 
+ Amazon Textract

**자동화 및 규모 조정**

Amazon S3에 새 PDF 파일이 추가될 때 Amazon Textract를 시작하는 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(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 파일을 단일 페이지로 분할하고 Amazon Textract [동기 작업](https://docs.aws.amazon.com/textract/latest/dg/sync.html)(`Syn API`)을 위한 JPEG 형식으로 변환하여 처음 실행할 때 사용할 수 있도록 준비하십시오.여러 페이지로 구성된 PDF 파일에도 Amazon Textract의 [비동기 작업](https://docs.aws.amazon.com/textract/latest/dg/async.html)(`Asyn API`)을 사용할 수 있습니다. | 데이터 사이언티스트, 개발자 | 
| 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 파일을 단일 페이지로 분할하고 Amazon Textract [동기 작업](https://docs.aws.amazon.com/textract/latest/dg/sync.html)(`Syn API`)을 위한 JPEG 형식으로 변환하여 준비합니다.여러 페이지로 구성된 PDF 파일에도 Amazon Textract의 [비동기 작업](https://docs.aws.amazon.com/textract/latest/dg/async.html)(`Asyn API`)을 사용할 수 있습니다. | 데이터 사이언티스트, 개발자 | 
| 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>
+ [Amazon Textract를 사용하여 문서에서 텍스트 및 정형 데이터를 자동으로 추출하기](https://aws.amazon.com/blogs/machine-learning/automatically-extract-text-and-structured-data-from-documents-with-amazon-textract/)
+ [Amazon Textract를 사용하여 텍스트 및 정형 데이터 추출하기](https://aws.amazon.com/getting-started/hands-on/extract-text-with-amazon-textract/)
+ [Amazon Textract 리소스](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(데이터 과학) 커널이 있는 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/ko_kr/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(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/ko_kr/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html)자세한 내용은 SageMaker AI 설명서의 [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/ko_kr/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html)자세한 내용은 SageMaker AI 설명서의 [SageMaker AI Studio Classic에 파일 업로드](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-tasks-files.html)를 참조하세요. SageMaker  | 데이터 과학자 | 
| 예측 모델을 생성하고 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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, Intelli Kokoh Prasetyo, Amazon Web Services*

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

기계 학습 운영(MLOps)은 기계 학습(ML) 워크플로 및 배포를 자동화하고 간소화하는 일련의 방식입니다. MLOps는 ML 수명 주기를 자동화하는 데 중점을 둡니다. 이는 모델이 개발될 뿐만 아니라 체계적이고 반복적으로 배포, 모니터링 및 재훈련되도록 하는 데 도움이 됩니다. ML에 DevOps 원칙을 적용합니다. MLOps를 사용하면 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 DevOps와 같은 Azure 서비스에 액세스할 수 있습니다.
+ **활성 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/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/95fdf414-e561-4a93-9628-b41db39a577e/images/84ddcc36-54ef-473e-875f-154fae18cb13.png)


이 아키텍처는 다음 구성 요소로 구성됩니다.

1. 데이터 과학자는 개발 계정에서 ML 실험을 통해 다양한 데이터 소스를 사용하여 ML 사용 사례에 대한 다양한 접근 방식을 살펴봅니다. 데이터 과학자는 단위 테스트 및 시도를 수행하고 실험을 추적하기 위해 [MLflow와 함께 Amazon SageMaker AI](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 특성 저장소), 자동 파이프라인(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 모델 모니터 및 SageMaker AI Clarify와 같은 도구를 사용하여 편향을 식별하고, 드리프트를 감지하고, 모델의 성능을 지속적으로 모니터링합니다.

**자동화 및 규모 조정**

코드형 인프라(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 서비스입니다.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)는 완전관리형 E추출, 전환, 적재(ETL) 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다.
+ [Amazon Simple Storage Service(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 워크플로의 엔드 투 엔드 테스트를 수행합니다. 테스트 아티팩트는 플랫폼이 프로덕션에 적용할 때 데이터 과학 팀이 개발하는 실제 사용 사례를 반영해야 합니다.

## 에픽
<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에서 데이터 사전 처리 및 기능 엔지니어링을 수행할 수 있습니다. 세 가지 서비스가 모두 필요할 가능성은 거의 없습니다. | AWS 관리자, 데이터 엔지니어, 데이터 과학자, ML 엔지니어 | 
| 보안 요구 사항을 분석합니다. | 보안 요구 사항을 수집하고 문서화합니다. 여기에는 다음과 같은 결정이 포함됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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)를 참조하세요. | 관리자 | 

### 개발 환경 및 버전 관리 설정
<a name="set-up-the-development-environment-and-versioning"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS 개발 계정을 생성합니다. | 데이터 엔지니어와 데이터 과학자가 ML 모델을 실험하고 생성할 권한이 AWS 계정 있는를 생성합니다. 지침은 AWS Organizations 설명서[의 조직에서 멤버 계정 생성을 참조하세요](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html). | 관리자 | 
| 모델 빌드 리포지토리를 생성합니다. | Azure에서 실험 단계가 완료된 후 데이터 과학자가 모델 빌드 및 배포 코드를 푸시할 수 있는 Git 리포지토리를 생성합니다. 지침은 Azure DevOps 설명서의 [Git 리포지토리 설정](https://learn.microsoft.com/en-us/devops/develop/git/set-up-a-git-repository)을 참조하세요. | DevOps 엔지니어, ML 엔지니어 | 
| 모델 배포 리포지토리를 생성합니다. | Azure에서 표준 배포 코드 및 템플릿을 저장할 Git 리포지토리를 생성합니다. 설계 단계에서 식별된 대로 조직에서 사용하는 모든 배포 옵션에 대한 코드가 포함되어야 합니다. 예를 들어 실시간 엔드포인트, 비동기 엔드포인트, 서버리스 추론 또는 배치 변환이 포함되어야 합니다. 지침은 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>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Automation 계정을 생성합니다. | 자동화된 파이프라인과 작업이 실행되는 AWS 계정 를 생성합니다. 데이터 과학 팀에 이 계정에 대한 읽기 액세스 권한을 부여할 수 있습니다. 지침은 AWS Organizations 설명서[의 조직에서 멤버 계정 생성을 참조하세요](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html). | 관리자 | 
| 모델 레지스트리를 설정합니다. | 자동화 계정에서 SageMaker AI 모델 레지스트리를 설정합니다. 이 레지스트리는 ML 모델의 메타데이터를 저장하고 특정 데이터 과학자 또는 팀이 모델을 승인하거나 거부하는 데 사용됩니다. 자세한 내용은 SageMaker AI 설명서의 [모델 레지스트리에 모델 등록 및 배포](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)를 참조하세요. | ML 엔지니어 | 
| 모델 빌드 파이프라인을 생성합니다. | 코드를 모델 빌드 리포지토리로 푸시할 때 수동 또는 자동으로 시작하는 CI/CD 파이프라인을 Azure에서 생성합니다. 이 파이프라인은 소스 코드를 확인하고 자동화 계정에서 SageMaker AI 파이프라인을 생성하거나 업데이트해야 합니다. 이 파이프라인은 모델 레지스트리에 새 모델을 추가해야 합니다. 파이프라인 생성에 대한 자세한 내용은 [Azure Pipelines 설명서](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). | 관리자 | 
| 모델 모니터링을 위한 S3 버킷을 설정합니다. | 모델 배포 파이프라인에서 생성한 배포된 모델에 대해 모델 모니터링을 활성화하려면 이 단계를 수행합니다. 입력 및 출력 데이터를 저장하기 위한 Amazon S3 버킷을 생성합니다. S3 버킷 생성에 대한 자세한 내용은 Amazon S3 설명서에서 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요. Automation 계정에서 자동화된 모델 모니터링 작업이 실행되도록 교차 계정 권한을 설정합니다. 자세한 내용은 SageMaker AI 설명서의 [데이터 및 모델 품질 모니터링](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html)을 참조하세요. | ML 엔지니어 | 
| 모델 배포 파이프라인을 생성합니다. | 모델 레지스트리에서 모델이 승인될 때 시작하는 Azure의 CI/CD 파이프라인을 생성합니다. 이 파이프라인은 소스 코드와 모델 아티팩트를 확인하고, 스테이징 및 프로덕션 계정에 모델을 배포하기 위한 인프라 템플릿을 빌드하고, 스테이징 계정에 모델을 배포하고, 자동 테스트를 실행하고, 수동 승인을 기다리고, 승인된 모델을 프로덕션 계정에 배포해야 합니다. 파이프라인 생성에 대한 자세한 내용은 [Azure Pipelines 설명서](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) 설명서를 참조하세요. | DevOps | 
| 인프라 파이프라인을 생성합니다. | Azure에서 인프라 배포를 위한 CI/CD 파이프라인을 생성합니다. 관리자는이 파이프라인을 시작하여 새를 생성하고 ML 팀에 필요한 환경을 AWS 계정 설정할 수 있습니다. | DevOps 엔지니어 | 

## 문제 해결
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| **불충분한 모니터링 및 드리프트 감지 **- 모니터링이 충분하지 않으면 모델 성능 문제 또는 데이터 드리프트 감지가 누락될 수 있습니다. | Amazon CloudWatch, SageMaker AI 모델 모니터, SageMaker AI Clarify와 같은 도구를 사용하여 모니터링 프레임워크를 강화합니다. 식별된 문제에 대해 즉각적인 조치를 취하기 위한 알림을 구성합니다. | 
| **CI 파이프라인 트리거 오류 **-** **잘못된 구성으로 인해 코드 병합 시 Azure DevOps의 CI 파이프라인이 트리거되지 않을 수 있습니다. | Azure DevOps 프로젝트 설정을 확인하여 웹후크가 올바르게 설정되었고 올바른 SageMaker AI 엔드포인트를 가리키는지 확인합니다. | 
| **거버넌스 **-** **중앙 Automation 계정에서 ML 플랫폼에서 모범 사례를 적용하지 않으면 워크플로가 일관되지 않을 수 있습니다. | Automation 계정 설정을 감사하여 모든 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 파운데이션 로드맵](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: MLOps를 통한 생성형 AI 및 차이점 운영](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>

*Vikramaditya Bhatnagar, Amazon Web Services*

## 요약
<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 리전 또는 장기 스토리지에 데이터를 복제하는 데 적합합니다.

이 패턴은 코드형 인프라(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 모델에 액세스할 수 있는 권한
  + Amazon S3 버킷을 생성하고 액세스할 수 있는 [권한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html) 
  + CloudWatch Logs 로그 그룹에 액세스할 수 있는 권한.
  +  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 모두에 대한 모델 간접 호출을 로깅합니다. 이 두 서비스 중 하나만 선택하는 것은 지원하지 않습니다.

## 아키텍처
<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/ko_kr/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 계정. 자세한 내용은 [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은 선도적인 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)는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다.

**기타 도구**
+ [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 템플릿을 다운로드하십시오. | GitHub [리포지토리](https://github.com/aws-samples/enable-bedrock-logging-using-cloudformation/blob/main/enable-bedrock-logging-using-cloudformation.yaml)에서 CloudFormation 템플릿을 다운로드합니다. | 클라우드 아키텍트 | 
|  템플릿을 배포합니다. | 대상 계정 및 리전에 스택을 생성합니다. **파라미터** 섹션에서 템플릿에 정의된 파라미터의 값을 지정합니다. 자세한 지침은 CloudFormation 설명서의 [스택 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)을 참조하세요. | 클라우드 아키텍트 | 

### 솔루션 테스트
<a name="test-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 모델 액세스를 활성화합니다. | Amazon Bedrock 파운데이션 모델에 대한 액세스 추가 또는 제거 지침은 Amazon Bedrock 설명서의 [Amazon Bedrock 파운데이션 모델에 대한 액세스 추가 또는 제거](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html)를 참조하세요. | 클라우드 아키텍트 | 
| 샘플 프롬프트를 실행합니다. | Amazon Bedrock 플레이그라운드에서 샘플 프롬프트를 실행합니다. 지침은 Amazon Bedrock 설명서[의 플레이그라운드를 사용하여 콘솔에서 응답 생성을 참조하세요](https://docs.aws.amazon.com/bedrock/latest/userguide/playgrounds.html). | 클라우드 아키텍트 | 
| 로깅 구성을 검토합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/prescriptive-guidance/latest/patterns/configure-bedrock-invocation-logging-cloudformation.html) | 클라우드 아키텍트 | 
| 로그 그룹을 검토합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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 설명서)
+ [스택 생성 및 관리](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)(CloudFormation 설명서)
+ [모델 간접 호출 모니터링](https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html)(Amazon Bedrock 설명서)
+ [로그 그룹 및 로그 스트림 작업](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)(CloudWatch Logs 설명서)

**AWS 블로그 게시물**
+ [Amazon Bedrock 및 Amazon CloudWatch 통합을 사용하여 생성형 AI 애플리케이션 모니터링](https://aws.amazon.com/blogs/mt/monitoring-generative-ai-applications-using-amazon-bedrock-and-amazon-cloudwatch-integration/)
+ [Amazon Bedrock Agents를 사용하여 강력한 생성형 AI 애플리케이션을 빌드하는 모범 사례 - 1부](https://aws.amazon.com/blogs/machine-learning/best-practices-for-building-robust-generative-ai-applications-with-amazon-bedrock-agents-part-1/)
+ [Amazon Bedrock Agents를 사용하여 강력한 생성형 AI 애플리케이션을 구축하는 모범 사례 - 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>

*Julia Bluszcz, Aubrey Oosthuizen, Mohan Gowda Purushothama, Neha Sharma, Mateusz Zaremba, Amazon Web Services*

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

이 패턴은 Amazon SageMaker용 Docker 컨테이너 이미지를 생성하고 이를 AWS Step Functions의 교육 모델로 사용하는 방법을 보여줍니다. 컨테이너에 사용자 정의 알고리즘을 패키징하면 프로그래밍 언어, 환경, 프레임워크, 종속성에 상관없이 SageMaker에서 거의 모든 코드를 사용할 수 있습니다.

제공된 SageMaker 노트북 예제에서는 Amazon Elastic Container Registry(Amazon ECR)에 사용자 지정 Docker 컨테이너 이미지를 저장합니다. 그러면 Step Functions는 Amazon ECR에 저장된 컨테이너를 사용하여 Python SageMaker 처리 스크립트를 실행합니다. 그리고 나서, 컨테이너는 Amazon Simple Storage Service(S3)로 모델을 내보냅니다.

## 사전 조건 및 제한 사항
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정.
+ [Amazon S3 권한을 가진 SageMaker AWS Identity and Access Management (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 Phyton(Boto3)에 대한 지식
+ Amazon ECR에 대한 지식
+ Docker에 대한 지식

**제품 버전**
+ AWS Step Functions Data Science SDK v2.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/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 데이터 사이언티스트 또는 DevOps 엔지니어는 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)은 Lambda 함수와 기타 AWS 서비스를 결합할 수 있는 서버리스 오케스트레이션 서비스로, 비즈니스 크리티컬 애플리케이션을 구축합니다.
+ [AWS Step Functions Data Science 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로 설정](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)에 나와 있는 지침에 따라 Amazon ECR을 설정합니다. 각 AWS 계정은 기본 프라이빗 Amazon ECR 레지스트리와 함께 제공됩니다. | DevOps 엔지니어 | 
| Amazon ECR 프라이빗 리포지토리를 생성합니다. | *Amazon ECR 사용 설명서*의 [프라이빗 리포지토리 생성](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)의 지침을 따릅니다.참고: 생성한 리포지토리는 사용자 지정 Docker 컨테이너 이미지를 저장하는 곳입니다. | DevOps 엔지니어 | 
| SageMaker 처리 작업을 실행하는 데 필요한 사양이 포함된 Dockerfile을 생성합니다. | Dockerfile을 구성하여 SageMaker 처리 작업을 실행하는 데 필요한 사양이 포함된 Dockerfile을 생성합니다. 지침은 *Amazon SageMaker 개발자 가이드*의 [자체 교육 컨테이너에 맞게 조정](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)을 참조하세요.Dockerfile에 대한 자세한 내용은 Docker 설명서의 [Dockerfile 참조](https://docs.docker.com/engine/reference/builder/)를 참조하세요.**Dockerfile을 생성하기 위한 Jupyter Notebook 코드 셀의 예***셀 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/ko_kr/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 코드 셀의 예**중요: 다음 셀을 실행하기 전에 Dockerfile을 생성하여 라는 디렉터리에 저장했는지 확인합니다. 또한 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 클라이언트를 프라이빗 레지스트리에 인증해야 합니다. 이러한 명령은 레지스트리의 리포지토리로 이미지를 푸시하거나 가져옵니다. | DevOps 엔지니어 | 

### 사용자 지정 Docker 컨테이너 이미지를 사용하는 Step Functions 워크플로우를 생성합니다.
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자 지정 처리 및 모델 학습 로직이 포함된 Python 스크립트를 생성합니다. | 데이터 처리 스크립트에서 실행할 사용자 지정 처리 로직을 작성합니다. 그런 다음 이라는 이름이 `training.py`인 Python 스크립트로 저장합니다.자세한 내용은 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 프로세싱 작업을 단계 중 하나로 포함하는 Step Functions 워크플로우를 생성합니다. | [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)를 사용하여 Step Functions에서 처리 단계를 정의합니다.중요: AWS 계정에서 Step Functions에 대한 IAM 실행 역할을 생성했는지 확인합니다.**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 처리 단계 정의 예시**참고: 파라미터를 사용하여 작업 이름을 지정해야 합니다. 파라미터 값은 작업이 실행될 때마다 고유해야 합니다. 또한 **training.py** 파일의 코드는 `input` 파라미터로 `ProcessingStep`에 전달되므로 컨테이너 내에 복사됩니다. `ProcessingInput` 코드의 대상은 `container_entrypoint`의 두 번째 인수와 동일합니다.<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 Data Science 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>

*Keshav Ganesh 및 Sudhanshu Saurav, Amazon Web Services*

## 요약
<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 에이전트를 사용자 지정할 수 있습니다.

Amazon Bedrock 에이전트는 AWS Lambda 함수를 작업 그룹으로 사용하여 사용자 액세스 항목 생성 및 액세스 정책 관리와 같은 작업을 처리할 수 있습니다. 또한 Amazon Bedrock 에이전트는 클러스터에서 실행되는 포드의 AWS Identity and Access Management (IAM) 리소스에 대한 액세스를 허용하는 포드 자격 증명 연결을 구성할 수 있습니다. 이 솔루션을 사용하면 조직은 간단한 텍스트 기반 프롬프트로 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)됨.
+ eksctl 0.194.0 이상, [설치](https://eksctl.io/installation/)됨.

**제한 사항 **
+ 이러한 기술을 원활하게 채택하고 효과적으로 사용하는 데 도움이 되도록 교육 및 설명서가 필요할 수 있습니다. 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/ko_kr/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 에이전트는 Virtual Private Cloud(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은 선도적인 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는 클라우드에서 OpenSearch 클러스터를 손쉽게 배포, 운영 및 확장할 수 있도록 해주는 관리형 서비스입니다. 컬렉션 기능을 사용하면 데이터를 구성하고 Amazon Bedrock 에이전트와 같은 AI 어시스턴트가 사용할 수 있는 포괄적인 지식 기반을 구축할 수 있습니다.
+ [Amazon Simple Storage Service(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 클러스터가 프라이빗이고, 액세스 권한이 제한되어 있으며, 모든 리소스가 Virtual Private Cloud(VPC) 내에 있는지 확인합니다. 자세한 내용은 IAM 설명서의 [보안 모범 사례](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) 및 [보안 모범 사례](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> | DevOps | 
|  AWS 계정 ID를 가져옵니다. |  AWS 계정 ID를 가져오려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)이 명령은 AWS 계정 ID를 `AWS_ACCOUNT` 변수에 저장합니다. | DevOps | 
| Lambda 코드용 S3 버킷을 생성합니다. | 이 솔루션을 구현하려면 [아키텍처](#using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-architecture) 다이어그램과 같이 서로 다른 용도로 사용되는 Amazon S3 버킷 3개를 생성해야 합니다. S3 버킷은 Lambda 코드, 지식 기반 및 OpenAPI 스키마용입니다.Lambda 코드 버킷을 생성하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | DevOps | 
| 지식 기반용 S3 버킷을 생성합니다. | 지식 기반용 Amazon S3 버킷을 생성하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | DevOps | 
| OpenAPI 스키마에 대한 S3 버킷을 생성합니다. | OpenAPI 스키마에 대한 Amazon S3 버킷을 생성하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | DevOps | 

### CloudFormation 스택 배포
<a name="deploy-the-cfnshort-stack"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CloudFormation 스택 배포  | CloudFormation 스택을 배포하려면 이전에 `eks-access-controls-template.yaml` 생성한 CloudFormation 템플릿 파일을 사용합니다. 자세한 지침은 [ CloudFormation 설명서의 CloudFormation 콘솔에서 스택 생성을](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) 참조하세요. CloudFormation CloudFormation 템플릿을 사용하여 OpenSearch 인덱스를 프로비저닝하는 데 약 10분이 걸립니다.OAC를 생성한 후 `VPC_ID`Name`PRIVATE_SUBNET ID`(이름)을 기록해 둡니다. | DevOps | 
| Amazon EKS 클러스터를 생성합니다. | VPC 내에 Amazon EKS 클러스터를 생성하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | 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/ko_kr/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | DevOps | 

### 솔루션 테스트
<a name="test-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Bedrock 설정 테스트 | Amazon Bedrock 에이전트를 테스트하기 전에 다음을 수행해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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/ko_kr/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)를 참조하세요. | DevOps | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 정리하십시오. | 이 패턴으로 생성된 리소스를 정리하려면 다음 명령을 실행합니다. 다음 단계를 진행하기 전에 각 삭제 단계가 완료될 때까지 기다립니다.이 절차는 이러한 스택에서 생성된 모든 리소스를 영구적으로 삭제합니다. 계속하기 전에 중요한 데이터를 백업했는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | DevOps | 

## 문제 해결
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 환경 설정 중에 0이 아닌 오류 코드가 반환됩니다. | 명령을 실행하여이 솔루션을 배포할 때 올바른 폴더를 사용하고 있는지 확인합니다. 자세한 내용은이 패턴의 리포지토리에 있는 [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) 파일을 참조하세요. | 
| 클러스터 스택 삭제에 실패했습니다. | 스택을 삭제하려는 초기 시도가 실패할 수 있습니다. 이 실패는 지식 기반에 대한 인덱싱을 수행하는 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 설명서**
+ [에이전트를 사용하여 애플리케이션에서 태스크 자동화](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) 
+ [Amazon Bedrock Agents 작동 방식](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-Compatible을 벡터 스토어로 기반으로 하는 RAG 기반 애플리케이션을 위한 솔루션을 제공합니다. Terraform을 사용하여이 솔루션을에 직접 배포 AWS 계정 하고 다음과 같은 간단한 RAG 사용 사례를 구현할 수 있습니다.

1. 사용자는 Microsoft Excel 파일 또는 PDF 문서와 같은 Amazon Simple Storage Service(Amazon S3) 버킷에 파일을 수동으로 업로드합니다. (지원되는 파일 유형에 대한 자세한 내용은 [비정](https://docs.unstructured.io/open-source/core-functionality/partitioning)형 설명서를 참조하세요.)

1. 파일의 콘텐츠는 추출되어 서버리스 Aurora PostgreSQL-Compatible을 기반으로 하는 지식 데이터베이스에 포함됩니다.이 데이터베이스는 벡터 스토어로 문서를 거의 실시간으로 수집할 수 있도록 지원합니다. 이 접근 방식을 통해 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) 참조하세요.
+ 의 Amazon Bedrock 콘솔에서 필요한 대규모 언어 모델(LLMs)에 대해 활성화된 모델 액세스입니다 AWS 계정. 이 패턴에는 다음 LLMs이 필요합니다.
  + `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 함수를 Lambda 간접 호출 속도를 제어할 수 있는 Amazon Simple Queue Service(Amazon SQS) 대기열과 분리할 수 있습니다.
+ 일부 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)을 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ AWS CLI 버전 2 이상
+ [Docker](https://docs.docker.com/get-started/) 버전 26.0.0 이상
+ Poetry 버전 1.7.1 이상
+ Python 버전 3.10 이상
+ Terraform 버전 1.8.4 이상

## 아키텍처
<a name="deploy-rag-use-case-on-aws-architecture"></a>

다음 다이어그램은 이 패턴의 워크플로 및 구성 요소를 보여 줍니다.

![\[Amazon Bedrock에서 Aurora PostgreSQL 및 LLMs 사용하여 RAG 기반 애플리케이션을 생성하는 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/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 함수는 Amazon Elastic Container Registry(Amazon ECR) 리포지토리에 저장된 Docker 이미지를 `data-ingestion-processor` 기반으로 합니다`bedrock-rag-template`.

   함수는 [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_OVERLAP` 달라지는 `CHUNK_SIZE` 및를 고려하여 각 문서를 청크합니다. 다음으로, 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`는 Virtual Private Cloud(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-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 호환 관계형 데이터베이스 엔진입니다. 이 패턴에서 Aurora PostgreSQL-Compatible은 pgvector 플러그인을 벡터 데이터베이스로 사용합니다.
+ Amazon Bedrock은 선도적인 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(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/)는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼(PaaS) 제품 세트입니다.
+ [HashiCorp Terraform](https://www.terraform.io/docs)은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 인프라(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>
+ 이 코드 샘플을에 배포할 수 있지만 미국 동부(버지니아 북부) `us-east-1` 또는 미국 서부(캘리포니아 북부) –를 사용하는 AWS 리전것이 좋습니다`us-west-1`. 이 권장 사항은이 패턴의 게시 시점에 Amazon Bedrock에서 파운데이션 및 임베딩 모델의 가용성을 기반으로 합니다. 에서 Amazon Bedrock 파운데이션 모델 지원의 up-to-date 목록은 Amazon Bedrock 설명서의 [모델 지원을 AWS 리전](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) AWS 리전참조하세요. 이 코드 샘플을 다른 리전에 배포하는 방법에 대한 자세한 내용은 [추가 정보를](#deploy-rag-use-case-on-aws-additional) 참조하세요.
+ 이 패턴은 proof-of-concept(PoC) 또는 파일럿 데모만 제공합니다. 코드를 프로덕션으로 가져오려면 다음 모범 사례를 사용해야 합니다.
  + Amazon S3 서버 액세스 로깅을 사용 설정합니다.
  + Lambda 함수에 대한 모니터링 및 알림을 설정합니다.
  + 사용 사례에 API가 필요한 경우 검색 및 질문 응답 작업을 실행하는 Lambda 함수와 함께 Amazon API Gateway를 추가하는 것이 좋습니다.
+ 최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여하세요. 자세한 내용은 IAM 설명서의 [최소 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) 및 [보안 모범 사례](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> | DevOps | 
| 변수를 구성합니다. | 이 패턴에 대한 파라미터를 구성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | DevOps | 
| 솔루션을 배포합니다. | 솔루션을 배포하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)인프라 배포는 VPC 내부의 SageMaker AI 인스턴스와 Aurora PostgreSQL 데이터베이스에 액세스할 수 있는 권한을 프로비저닝합니다. | DevOps | 

### 솔루션 테스트
<a name="test-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  데모 실행 | 이전 인프라 배포에 성공한 후 다음 단계에 따라 Jupyter Notebook에서 데모를 실행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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> | DevOps | 

## 관련 리소스
<a name="deploy-rag-use-case-on-aws-resources"></a>

**AWS resources**
+ [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 파운데이션 모델 액세스
+ [생성형 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-west-1`하려면 미국 동부(버지니아 북부) `us-east-1` 또는 미국 서부(캘리포니아 북부) 리전을 사용하는 것이 좋습니다. 그러나이 코드 샘플을 `us-east-1` 및 이외의 리전에 배포하는 방법에는 두 가지가 있습니다`us-west-1`. `commons.tfvars` 파일에서 배포 리전을 구성할 수 있습니다. 리전 간 파운데이션 모델 액세스의 경우 다음 옵션을 고려하세요.
+ **퍼블릭 인터넷 통과** - 트래픽이 퍼블릭 인터넷을 통과할 수 있는 경우 인터넷 게이트웨이를 VPC에 추가합니다. 그런 다음 Lambda 함수에 할당된 보안 그룹`data-ingestion-processor`과 SageMaker AI 노트북 인스턴스를 조정하여 퍼블릭 인터넷으로의 아웃바운드 트래픽을 허용합니다.
+ **퍼블릭 인터넷을 통과하지 않음 **-이 샘플을 `us-east-1` 또는 이외의 리전에 배포하려면 다음을 `us-west-1`수행합니다.

1. `us-east-1` 또는 `us-west-1` 리전에서에 대한 VPC 엔드포인트를 포함하여 추가 VPC를 생성합니다`bedrock-runtime`.

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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html) 

1. `us-east-1` 또는 외부의 Lambda 함수에서 `bedrock-runtime` boto3 클라이언트를 구성할 때 `us-east-1` 또는 us-west-1`bedrock-runtime`에 대한 VPC 엔드포인트의 프라이빗 DNS 이름을 boto3 클라이언트`endpoint_url`에 로 `us-west-1`전달합니다.

# 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)을 사용하여 단일 엔드포인트에 여러 파이프라인 모델 객체를 배포하는 방법을 설명합니다. 파이프라인 모델 객체는 사전 처리, 모델 추론, 사후 처리와 같은 다양한 기계 학습(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(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 파이프라인 모델 객체 배포를 위한 아키텍처를 보여줍니다.

![\[SageMaker 파이프라인 모델 객체의 배포를 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/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(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 Machine Learning Repository의 **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/ko_kr/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 도커 이미지를 검색하고 예측기 객체를 생성한 다음 해당 객체를 사용하여 회귀 모델을 학습시킵니다. | 데이터 과학자 | 

### 최종 파이프라인 배포
<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>

이 패턴은 세 가지 업계 표준 보안 스캔 도구를 통합하여 포괄적인 코드 보안 분석을 제공하는 모델 컨텍스트 프로토콜(MCP) 서버를 구현하는 방법을 설명합니다. 서버를 사용하면 AI 코딩 어시스턴트(예: Kiro, Amazon Q Developer 및 Cline)가 코드 조각 및 코드형 인프라(IaC) 구성을 자동으로 스캔할 수 있습니다. 이러한 스캔을 통해 코딩 도우미는 보안 취약성, 잘못된 구성 및 규정 준수 위반을 식별하는 데 도움이 될 수 있습니다.

수백만 개의 코드 조각에 대해 훈련된 AI 코드 생성기는 보안 사각 지대를 생성합니다. 해당 훈련 데이터는 얼마나 안전했습니까? 이 패턴은 코드 생성 중에 실시간 보안 검증을 제공하여 개발자가 코드화할 때 잠재적 보안 문제를 식별하고 이해하는 데 도움이 됩니다. 이 접근 방식은 개발자가 직접적인 취약성과 종속성으로 인한 상속된 위험을 모두 해결하는 데 도움이 됩니다. 이 패턴은 AI 효율성과 보안 규정 준수 간의 격차를 해소하여 AI 기반 개발 도구를 안전하게 채택하는 데 도움이 됩니다.

이 패턴은 조직이 AI 지원 코딩 도구를 통해 개발 보안 관행을 강화하여 여러 프로그래밍 언어 및 인프라 정의에 걸쳐 지속적인 보안 스캔 기능을 제공하는 데 도움이 됩니다. 이 솔루션은 다음 도구의 기능을 결합합니다.
+ Terraform AWS CloudFormation및 Kubernetes 매니페스트를 포함한 IaC 파일 스캔을 위한 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 및 애플리케이션 보안에 대한 기본 이해

**제한 사항 **
+ Bandit 스캔은 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/ko_kr/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)는 AWS 애플리케이션을 이해, 구축, 확장 및 운영하는 데 도움이 되는 생성형 AI 기반 대화형 어시스턴트입니다.

**기타 도구**
+ [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용 데이터 검증 라이브러리입니다.
+ [모델 컨텍스트 프로토콜(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 보안 스캐너: 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 구성 파일을 사용합니다.
+ 사용자 지정 규칙 및 구성을 문서화합니다.

**통합**
+ 개발 주기 초기에 보안 스캔을 통합합니다.
+ 커밋 전 후크 또는 지속적 통합 및 지속적 배포(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 설정을 구성합니다. | (옵션 1) 구성 파일을 수동으로 찾거나 (옵션 2) Kiro IDE를 사용하여 Kiro에서 구성 파일을 편집할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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> | 앱 개발자 | 

### (사용자 정렬) 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/ko_kr/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/ko_kr/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/ko_kr/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/ko_kr/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/ko_kr/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>


| 문제 | Solution | 
| --- | --- | 
| 환경 설정 문제 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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/ko_kr/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/ko_kr/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 설명서**
+ [코드형 인프라](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)(AWS 의 * 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/)
+ [모델 컨텍스트 프로토콜(MCP) 설명서](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [OWASP 보안 코딩 관행](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 Resource Manager)
+ 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
+ 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\$160행을 스캔하고 결과를 알려주세요.”
+ “이 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 템플릿을 생성하고 보안 검사를 통과했는지 확인합니다.”
+ “Python 스크립트를 작성하여 페이지 매김으로 DynamoDB를 쿼리하고 보안 모범 사례를 스캔합니다.”
+ “보안 강화 기능이 있는 마이크로서비스에 대한 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>

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

## 요약
<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(RDS)와 같은 데이터 소스의 데이터 검색 접근 방식을 제공합니다. 검색 [증강 생성(RAG)을 사고 체인 메서드](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)와 인터리빙하여 해당 데이터에서 값을 얻습니다. chain-of-thought 결과는 기업의 저장된 데이터 전체를 활용하는 복잡한 채팅 기반 어시스턴트 대화를 지원합니다.

이 패턴은 Amazon SageMaker 매뉴얼 및 요금 데이터 테이블을 예로 사용하여 생성형 AI 채팅 기반 어시스턴트의 기능을 탐색합니다. 요금 및 서비스 기능에 대한 질문에 답변하여 고객이 SageMaker 서비스를 평가하는 데 도움이 되는 채팅 기반 어시스턴트를 구축합니다. 이 솔루션은 프런트엔드 애플리케이션을 구축하기 위해 Streamlit 라이브러리를 사용하고 대규모 언어 모델(LLM)로 구동되는 애플리케이션 백엔드를 개발하기 위해 LangChain 프레임워크를 사용합니다.

채팅 기반 어시스턴트에 대한 쿼리는 세 가지 가능한 워크플로 중 하나로 라우팅하기 위한 초기 의도 분류로 충족됩니다. 가장 정교한 워크플로는 일반 자문 지침과 복잡한 요금 분석을 결합합니다. 기업, 기업 및 산업 사용 사례에 맞게 패턴을 조정할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-prereqs"></a>

**사전 조건 **
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 설치 및 구성
+ [AWS Cloud Development Kit(AWS CDK) Toolkit 2.114.1 이상](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) 설치 및 구성
+ Python에 대한 기본적인 지식
+ [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 계정(에서 AWS CDK를 사용)
+ Amazon Bedrock 서비스에서 활성화된 Amazon Titan 및 Anthropic Claude [모델 액세스](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access) 
+ [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)
+ Glue
+ AWS Lambda
+ Amazon S3
+ Amazon Kendra
+ Elastic Load Balancing

**대상 아키텍처 **

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/ko_kr/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/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/70ae4736-06a6-4d3a-903a-edc5c10d78a0.png)

+ 1단계 - 입력`query`(질문)은 다음 세 가지 의도 중 하나로 분류됩니다.
  + 일반 SageMaker 지침 질문
  + 일반 SageMaker 요금(훈련/추론) 질문
  + SageMaker 및 요금과 관련된 복잡한 질문
+ 2단계 - 입력은 다음 세 가지 서비스 중 하나를 `query` 시작합니다.
  + `RAG Retrieval service`: [Amazon Kendra](https://aws.amazon.com/kendra/) 벡터 데이터베이스에서 관련 컨텍스트를 검색하고 [Amazon Bedrock](https://aws.amazon.com/bedrock/)을 통해 LLM을 직접적으로 호출하여 검색된 컨텍스트를 응답으로 요약합니다.
  + `Database Query service`: - 관련 테이블의 LLM, 데이터베이스 메타데이터 및 샘플 행을 사용하여 입력을 SQL 쿼리`query`로 변환합니다. 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>

**서비스**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)는 표준 SQL을 사용하여 Amazon Simple Storage Service(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)는 클러스터에서 컨테이너를 실행, 중지 및 관리하는 데 도움이 되는 빠르고 확장 가능한 컨테이너 관리 서비스입니다.
+ [AWS Glue](https://docs.aws.amazon.com/glue/)는 완전 관리형 추출, 전환, 적재(ETL) 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다. 이 패턴은 AWS Glue 크롤러와 AWS Glue 데이터 카탈로그 테이블을 사용합니다.
+ Amazon Kendra - Amazon Kendra는 자연어 처리 및 고급 기계 학습 알고리즘을 사용하여 데이터에서 검색 질문에 대한 구체적인 답변을 반환하는 지능형 검색 서비스입니다.
+ [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)은 들어오는 애플리케이션 또는 네트워크 트래픽을 여러 대상에 분산합니다. 예를 들어 하나 이상의 가용 영역에 있는 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 CDK는 AWS 리소스를 생성하는 데 사용되는 Python 파일 구성
+ `app.py` - 대상 AWS 계정에 AWS 리소스를 배포하는 데 사용되는 AWS CDK 스택 Python 파일
+ `requirements.txt` - 설치해야 하는 모든 Python 종속성 목록
+ `requirements-dev.txt` - 유닛 테스트 제품군을 실행하기 위해 AWS CDK에 설치해야 하는 모든 Python 종속성 목록
+ `cdk.json` - 리소스를 스핀업하는 데 필요한 값을 제공하는 입력 파일


| 
| 
| 참고: AWS CDK 코드는 솔루션을 배포하기 위해 AWS에서 관리하는 [L3(계층 3) 구성](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) 및 AWS Identity and Access Management(IAM) 정책을 사용합니다. [AWS Identity and Access Management ](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>
+ 여기에 제공된 코드 예는 proof-of-concept(PoC) 또는 파일럿 데모 용도로만 사용됩니다. 코드를 프로덕션으로 가져오려면 다음 모범 사례를 사용해야 합니다.
  + [Amazon S3 액세스 로깅이 활성화](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)되었습니다.
  + [vpc-flow-logs-enabled](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 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/ko_kr/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)의 지침을 따릅니다. | DevOps | 
| 계정에 리소스를 배포하십시오. | AWS CDK를 사용하여 AWS 계정에 리소스를 배포하려면 다음을 수행하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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 크롤러 스케줄러에서 정의한 대로 정기적으로 크롤러를 실행하여 [AWS Glue 데이터 카탈로그 테이블](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html)에 파티션을 생성하고 업데이트합니다. CSV 데이터 세트 파일을 S3 버킷에 복사한 후 AWS Glue 크롤러를 실행하고 테스트를 위한 데이터 카탈로그 테이블 스키마를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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/ko_kr/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>


| 문제 | Solution | 
| --- | --- | 
| 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)
+ [SDK 시작하기](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Python에서 AWS CDK로 작업하기](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [AWS의 생성형 AI 애플리케이션 빌더](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>

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

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

많은 조직이 다양한 데이터 소스를 오케스트레이션하여 포괄적인 답변을 제공할 수 있는 채팅 기반 어시스턴트를 만들 때 어려움을 겪습니다. 이 패턴은 간단한 배포를 통해 설명서와 데이터베이스 모두의 쿼리에 응답할 수 있는 채팅 기반 어시스턴트를 개발하기 위한 솔루션을 제공합니다.

[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)부터이 완전 관리형 생성형 인공 지능(AI) 서비스는 다양한 고급 파운데이션 모델(FMs 제공합니다. 이를 통해 개인 정보 보호 및 보안에 중점을 두고 생성형 AI 애플리케이션을 효율적으로 생성할 수 있습니다. 설명서 검색의 맥락에서 [Retrieval Augmented Generation(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의 FMs 텍스트 쿼리를 구조화된 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 설치됨
+ 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 도구 키트 버전 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에 대한 [액세스 활성화](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) – 텍스트

**제한 사항 **
+ 이 솔루션은 단일에 배포됩니다 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/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


다이어그램은 여러를 AWS 리전사용하여 단일 내에서 포괄적인 AWS 클라우드 네이티브 설정을 보여줍니다 AWS 서비스. 채팅 기반 어시스턴트의 기본 인터페이스는 Amazon ECS 클러스터에서 호스팅되는 [스트리밍](https://docs.streamlit.io/) 애플리케이션입니다. [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/)는 접근성을 관리합니다. 이 인터페이스를 통해 이루어진 쿼리는 `Invocation` Lambda 함수를 활성화한 다음 Amazon Bedrock의 에이전트와 인터페이스합니다. 이 에이전트는 Knowledge Bases for 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(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(ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)은 들어오는 애플리케이션 또는 네트워크 트래픽을 여러 대상에 분산합니다. 예를 들어 하나 이상의 가용 영역에 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, 컨테이너, IP 주소 전반에 걸쳐 트래픽을 분산할 수 있습니다.
+ [AWS Glue](https://docs.aws.amazon.com/glue/)는 완전관리형 E추출, 전환, 적재(ETL) 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다. 이 패턴은 AWS Glue 크롤러와 AWS Glue Data Catalog 테이블을 사용합니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ Amazon OpenSearch Serverless는 Amazon OpenSearch Service를 위한 온디맨드 서버리스 구성입니다. 이 패턴에서 OpenSearch Serverless 인덱스는 Amazon Bedrock의 지식 기반에 대한 벡터 데이터베이스 역할을 합니다.
+ [Amazon Simple Storage Service(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 리소스를 생성하는 Python 파일을 AWS CDK 구성합니다.
+ `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>
+ 여기에 제공된 코드 예는 proof-of-concept(PoC) 또는 파일럿 용도로만 사용됩니다. 코드를 프로덕션으로 가져오려면 다음 모범 사례를 사용해야 합니다.
  + Amazon S3 서버 액세스 로깅 사용
  + [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/ko_kr/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 설명서**
+ 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)
  + [Knowledge Bases for 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. 기존 데이터베이스에 연결하는 경우에서 함수를 업데이트`create_sql_engine()``code/lambda/action-lambda/build_query_engine.py`하여 데이터베이스에 연결합니다.

**구성 및 코드 업데이트**

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` 파일에서 `context/configure/bedrock_instructions/action_group_description` 필드를 업데이트하여 `Action group` Lambda 함수의 용도와 기능을 설명합니다.

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>

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

## 요약
<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>

**사전 조건 **
+ 활성 상태의 계정.
+ Docker 설치됨
+ `us-east-1` 또는 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)된 `us-west-2` AWS Cloud Development Kit(AWS CDK) 버전 2.114.1 이상
+ AWS CDK Toolkit 버전 2.114.1 이상 [설치](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ Command Line Interface(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.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 설명서의 [미디어 형식을](https://docs.aws.amazon.com/transcribe/latest/dg/how-input.html#how-input-audio) 참조하세요.

**제품 버전**
+ Python용 AWS SDK(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/ko_kr/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 Notification Service(Amazon SNS)를 통해 이메일 알림을 받게 됩니다.

이 프로세스 전체에서 AWS Step Functions는 각 Lambda 함수가 올바른 순서로 시작되도록 합니다. 이 상태 시스템에는 효율성을 높이기 위한 병렬 처리 용량이 있습니다. Amazon S3 버킷은 중앙 스토리지 리포지토리 역할을 하여 관련된 다양한 미디어 및 문서 형식을 관리하여 워크플로를 지원합니다.

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

**서비스**
+ Amazon Bedrock은 선도적인 AI 스타트업과 Amazon의 고성능 파운데이션 모델(FM)을 통합 API를 통해 사용할 수 있게 해주는 완전 관리형 서비스입니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [Amazon Simple Notification Service(Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다.
+ [Amazon Simple Storage Service(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 서비스를 결합할 수 있는 서버리스 오케스트레이션 서비스로, 비즈니스 크리티컬 애플리케이션을 구축합니다. 
+ 는 기계 학습 모델을 사용하여 오디오를 텍스트로 변환하는 자동 음성 인식 서비스입니다.

**기타 도구**
+ LangChain은 언어 모델을 기반으로 애플리케이션을 개발할 수 있는 프레임워크입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [aws-backup-report-generator](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 CDK는 AWS 리소스를 생성하는 데 사용되는 Python 파일 구성
+ `app.py` - 대상 AWS 계정에 AWS 리소스를 배포하는 데 사용되는 AWS CDK 앱 Python 파일
+ `requirements.txt` - 설치해야 하는 모든 Python 종속성 목록
+ `cdk.json` - 리소스를 스핀업하는 데 필요한 값을 제공하는 입력 파일

## 모범 사례
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-best-practices"></a>

제공된 코드 예는 proof-of-concept(PoC) 또는 파일럿 용도로만 사용됩니다. 솔루션을 프로덕션 환경에 적용하려면 다음 모범 사례를 사용합니다.
+ Amazon S3 서버 액세스 로깅 사용
+ [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 명명된 프로파일을 설정하려면 [구성 및 자격 증명 파일 설정](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/ko_kr/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 설명서의 [모델 액세스 추가](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#model-access-add)를 참조하세요. | DevOps | 
| 계정에 리소스를 배포하십시오. | AWS CDK를 사용하여 AWS 계정에 리소스를 배포하려면 다음을 수행하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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/ko_kr/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/ko_kr/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 설명서**
+ 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 리소스:
  + [SDK 시작하기](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [Python에서 AWS CDK로 작업하기](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
  + [일반적인 AWS CDK 문제 해결](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [도구 키트 명령](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-commands)
+ asff Step Functions 리소스
  + [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 애플리케이션 빌더](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(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 Command Line Interface(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 Command Line Interface(AWS CLI)
+ AWS Lambda
+ Step Functions

**대상 아키텍처**

다음 다이어그램은 실시간 데이터를 Amazon Personalize로 수집하기 위한 파이프라인을 보여줍니다. 그런 다음 파이프라인은 해당 데이터를 사용하여 사용자를 위한 개인화되고 순위가 조정된 추천을 생성합니다.

![\[Amazon Personalize에 사용되는 데이터 통합 아키텍처\]](http://docs.aws.amazon.com/ko_kr/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 Data Streams의 레코드를 처리하고 API 호출을 통해 레코드의 사용자 상호 작용을 Amazon Personalize의 이벤트 트래커에 추가합니다.

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 Command Line Interface(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)를 사용하면 다른 AWS 서비스, 사용자 지정 HTTP 엔드포인트 및 타사 서비스 제공업체가 소유한 HTTP 엔드포인트에 실시간 [스트리밍 데이터](https://aws.amazon.com/streaming-data/)를 전송할 수 있습니다.
+ [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/)은 범용 컴퓨터 프로그래밍 언어입니다.

**코드**

이 패턴의 코드는 GitHub [동물 추천](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/ko_kr/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/ko_kr/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 함수 순위 재지정에 요청을 제출합니다. 페이로드에는 `userId`의 순위를 다시 매길 모든 항목 ID와 해당 메타데이터가 포함되어 있습니다. 다음 예제 데이터는 `animal_species_id`(1=cat, 2=dog)에는 Oxford Pets 클래스를 사용하고 `animal_age_id` 및 `animal_size_id`에는 정수 1\$15를 사용합니다.

```
{
   "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 함수는 이러한 항목의 순위를 다시 지정한 다음 Amazon Personalize의 직접 응답과 항목 ID가 포함된 정렬된 목록을 반환합니다. 이 목록은 항목이 속한 동물 그룹과 점수의 순위 목록입니다. 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 및 Hydra를 사용하여 로컬 개발에서 확장 가능한 실험으로 기계 학습 워크플로 간소화
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker"></a>

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

## 요약
<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 설정을 위해서는 추가 세부 정보가 있어야 합니다. 컴퓨팅 및 스토리지를 위한 사용자 지정 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/ko_kr/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 이미지를 빌드하여 라는 Amazon Elastic Container Registry(Amazon ECR) 리포지토리에 푸시합니다`hydra-sm-artifact`. (자세한 내용은 [Epics](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics)의 "SageMaker AI에서 워크플로 실행"을 참조하세요.)

1. 데이터 과학자는 Python 스크립트를 사용하여 SageMaker AI 훈련 작업 또는 하이퍼파라미터 최적화(HPO) 작업을 시작합니다. 일반 훈련 작업의 경우 조정된 구성은 라는 Amazon Simple Storage Service(Amazon S3) 버킷에 기록됩니다`hydra-sample-config`. 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 훈련은 대규모로 ML 모델을 훈련할 수 있는 SageMaker AI 내의 완전관리형 ML 서비스입니다. 이 도구는 훈련 모델의 컴퓨팅 요구를 효율적으로 처리하여 기본 제공 확장성을 활용하고 다른와 통합할 수 있습니다 AWS 서비스. SageMaker AI 훈련은 사용자 지정 알고리즘과 컨테이너도 지원하므로 다양한 ML 워크플로에 유연하게 적용할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**기타 도구**
+ [Docker](https://www.docker.com/)는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼(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) 및 [보안 모범 사례](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>


| 문제 | Solution | 
| --- | --- | 
| 만료된 토큰 | 새 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>

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

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

이 패턴은 대규모 언어 모델(LLMs)을 사용하여 자연어 쿼리를 쿼리 도메인별 언어(쿼리 DSL)로 변환하는 방법을 보여줍니다. 이를 통해 사용자는 쿼리 언어에 대한 광범위한 지식 없이 OpenSearch 및 Elasticsearch와 같은 검색 서비스와 더 쉽게 상호 작용할 수 있습니다. 이 리소스는 자연어 쿼리 기능으로 검색 기반 애플리케이션을 개선하여 궁극적으로 사용자 경험과 검색 기능을 개선하려는 개발자와 데이터 과학자에게 특히 유용합니다.

이 패턴은 특수 지식의 프롬프트 엔지니어링, 반복적인 구체화 및 통합을 위한 기술을 보여 주며, 모두 합성 데이터 생성에 매우 중요합니다. 이 접근 방식은 주로 쿼리 변환에 중점을 두지만 데이터 증강 및 확장 가능한 합성 데이터 생성의 잠재력을 암시적으로 보여줍니다. 이 기반을 보다 포괄적인 합성 데이터 생성 작업으로 확장하여 구조화된 애플리케이션별 출력과 비정형 자연어 입력을 연결하는 LLMs의 성능을 강조할 수 있습니다.

이 솔루션에는 기존 방식의 마이그레이션 또는 배포 도구가 포함되지 않습니다. 대신 LLMs을 사용하여 자연어 쿼리를 쿼리 DSL로 변환하기 위한 개념 증명(PoC)을 입증하는 데 중점을 둡니다.
+ 이 패턴은 환경을 설정하고 텍스트-쿼리 변환을 구현하기 위한 단계별 가이드로 Jupyter Notebook을 사용합니다.
+ Amazon Bedrock을 사용하여 자연어를 해석하고 적절한 쿼리를 생성하는 데 중요한 LLMs에 액세스합니다.
+ 이 솔루션은 Amazon OpenSearch Service와 함께 작동하도록 설계되었습니다. Elasticsearch에 대한 유사한 프로세스를 따를 수 있으며, 생성된 쿼리는 유사한 검색 엔진에 맞게 잠재적으로 조정될 수 있습니다.

[쿼리 DSL](https://opensearch.org/docs/latest/query-dsl/)은 Elasticsearch와 OpenSearch 모두에서 복잡한 쿼리를 구성하는 데 사용되는 유연한 JSON 기반 검색 언어입니다. 검색 작업의 쿼리 파라미터에서 쿼리를 지정할 수 있으며 다양한 쿼리 유형을 지원합니다. DSL 쿼리에는 리프 쿼리와 복합 쿼리가 포함됩니다. 리프 쿼리는 특정 필드에서 특정 값을 검색하며 전체 텍스트, 용어 수준, 지리적, 조인, 범위 및 특수 쿼리를 포함합니다. 복합 쿼리는 여러 리프 또는 복합 절의 래퍼 역할을 하며 결과를 결합하거나 동작을 수정합니다. 쿼리 DSL은 간단한 일치 전체 쿼리부터 매우 구체적인 결과를 생성하는 복잡한 다중 쿼리에 이르기까지 정교한 검색 생성을 지원합니다. 쿼리 DSL은 고급 검색 기능, 유연한 쿼리 구성 및 JSON 기반 쿼리 구조가 필요한 프로젝트에 특히 유용합니다.

이 패턴은 텍스트text-to-query DSL 변환을 위한 몇 번의 프롬프트, 시스템 프롬프트, 구조화된 출력, 프롬프트 체인, 컨텍스트 프로비저닝 및 작업별 프롬프트와 같은 기술을 사용합니다. 이러한 정책의 예는 [추가 정보](#translate-natural-language-query-dsl-opensearch-elasticsearch-additional) 섹션을 참조하십시오.

## 사전 조건 및 제한 사항
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-prereqs"></a>

**사전 조건 **

자연어 쿼리를 쿼리 DSL 쿼리로 변환하는 데 Jupyter Notebook을 효과적으로 사용하려면 다음이 필요합니다.
+ **Jupyter Notebook에 대한 지식.** Jupyter Notebook 환경에서 코드를 탐색하고 실행하는 방법에 대한 기본 이해.
+ **Python 환경**. 필요한 라이브러리가 설치된 작동 Python 환경, 가급적이면 Python 3.x.
+ **Elasticsearch 또는 OpenSearch 지식**. 아키텍처 및 쿼리 수행 방법을 포함하여 Elasticsearch 또는 OpenSearch에 대한 기본 지식.
+ **AWS 계정**. Amazon Bedrock 및 기타 관련 서비스에 액세스할 AWS 계정 수 있는 활성 입니다.
+ **라이브러리 및 종속성**. 상호 `boto3` AWS 작용 및 LLM 통합에 필요한 기타 종속성과 같이 노트북에 언급된 특정 라이브러리의 설치.
+ **Amazon Bedrock의 모델 액세스** 이 패턴은 Anthropic의 Claude LLMs 3개를 사용합니다. [Amazon Bedrock 콘솔](https://console.aws.amazon.com/bedrock/)을 열고 **모델 액세스를** 선택합니다. 다음 화면에서 **특정 모델 활성화**를 선택하고 다음 세 가지 모델을 선택합니다.
  + claude-4-sonnet
  + claude-3.5-sonnet
  + Claude 3 하이쿠
+ **적절한 IAM 정책 및 IAM 역할**. 에서 노트북을 실행하려면 AWS 계정 AWS Identity and Access Management (IAM) 역할에 `SagemakerFullAccess` 정책뿐만 아니라 이름을 지정할 수 있는 [추가 정보](#translate-natural-language-query-dsl-opensearch-elasticsearch-additional) 섹션에 제공된 정책이 필요합니다`APGtext2querydslpolicy`. 이 정책에는 나열된 세 가지 Claude 모델 구독이 포함됩니다.

이러한 사전 조건을 마련하면 노트북으로 작업하고 text-to-query 기능을 구현할 때 원활한 경험을 보장할 수 있습니다.

**제한 사항 **
+ **개념 증명 상태**. 이 프로젝트는 주로 개념 증명(PoC)으로 작성되었습니다. LLMs 사용하여 자연어 쿼리를 쿼리 DSL로 변환할 수 있지만 완전히 최적화되지 않았거나 프로덕션 준비가 되지 않았을 수 있습니다.
+ **모델 제한** 사항:

  **컨텍스트 창 제약 조건입니다***.* Amazon Bedrock에서 사용할 수 있는 LLMs 사용하는 경우 컨텍스트 창 제한 사항에 유의하세요.

  Claude 모델(2024년 9월 기준):
  + Claude 3 Opus: 토큰 200,000개
  + Claude 3 Sonnet: 토큰 200,000개
  + Claude 3 Haiku: 토큰 200,000개

  Amazon Bedrock의 다른 모델은 컨텍스트 창 크기가 다를 수 있습니다. 최신 정보는 Launch Wizard 설명서를 참조하십시오.

  **모델 가용성***. * Amazon Bedrock에서 특정 모델의 가용성은 다를 수 있습니다. 이 솔루션을 구현하기 전에 필요한 모델에 액세스할 수 있는지 확인합니다.
+ **추가 제한 사항**
  + **쿼리 복잡성** DSL 변환을 쿼리하는 자연어의 효과는 입력 쿼리의 복잡성에 따라 달라질 수 있습니다.
  + **버전 호환성** 생성된 쿼리 DSL은 사용하는 Elasticsearch 또는 OpenSearch의 특정 버전에 따라 조정해야 할 수 있습니다.
  + **성능**. 이 패턴은 PoC 구현을 제공하므로 쿼리 생성 속도와 정확도가 대규모 프로덕션 사용에 최적이 아닐 수 있습니다.
  + **비용**. Amazon Bedrock에서 LLMs 사용하면 비용이 발생합니다. 선택한 모델의 요금 구조에 유의하세요. 자세한 내용은 [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 쿼리 DSL Python 라이브러리를 사용하는 경우 해당 버전이 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/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/75296405-2893-4328-9551-9bcc6ec7fd3e/images/ffb1b893-d23c-4e1c-b679-8063b4f85a8a.png)


여기서 각 항목은 다음과 같습니다.

1. 스크린샷이 거의 없는 프롬프트 예시가 포함된 사용자 입력 및 시스템 프롬프트입니다. 프로세스는 자연어 쿼리 또는 스키마 생성 요청을 제공하는 사용자로 시작됩니다.

1. Amazon Bedrock. 입력은 Claude LLM에 액세스하기 위한 인터페이스 역할을 하는 Amazon Bedrock으로 전송됩니다.

1. Claude Sonnet 3.7 Amazon Bedrock은 Claude 3 LLMs을 사용하여 입력을 처리합니다. 적절한 Elasticsearch 또는 OpenSearch 쿼리 DSL을 해석하고 생성합니다. 스키마 요청의 경우 합성 Elasticsearch 또는 OpenSearch 매핑을 생성합니다.

1. DSL 생성을 쿼리합니다. 자연어 쿼리의 경우 애플리케이션은 LLM의 출력을 가져와 유효한 Elasticsearch 또는 OpenSearch Service 쿼리 DSL로 포맷합니다.

1. 합성 데이터 생성. 또한 애플리케이션은 스키마를 사용하여 테스트를 위해 OpenSearch Serverless 컬렉션에 로드할 합성 Elasticsearch 또는 OpenSearch 데이터를 생성합니다.

1. OpenSearch 또는 Elasticsearch 버전입니다. 생성된 쿼리 DSL은 모든 인덱스의 OpenSearch Serverless 컬렉션에 대해 쿼리됩니다. JSON 출력에는 OpenSearch Serverless 컬렉션에 있는 데이터의 관련 데이터와 *적*중 수가 포함됩니다.

**자동화 및 규모 조정**

이 패턴과 함께 제공되는 코드는 PoC용으로만 빌드됩니다. 다음 목록은 솔루션을 자동화 및 조정하고 코드를 프로덕션으로 이동하기 위한 몇 가지 제안을 제공합니다. 이러한 개선 사항은이 패턴의 범위를 벗어납니다.
+ 컨테이너화
  + 애플리케이션을 도커화하여 다양한 환경에서 일관성을 보장합니다.
  + 확장 가능한 배포를 위해 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은 선도적인 AI 스타트업과 Amazon의 고성능 파운데이션 모델(FM)을 통합 API를 통해 사용할 수 있게 해주는 완전 관리형 서비스입니다. Amazon Bedrock은 자연어 처리를 위해 LLMs에 대한 액세스를 제공합니다. 이 패턴은 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)는 클라우드에서 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>

에서 GoldenGate 작업을 할 때 다음 사항을 고려하십시오.
+ 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>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| .NET 개발 환경 설정 | 이에 대한 자세한 지침과 코드 및이 패턴의 다른 단계는 [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/ko_kr/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 | 

### 합성 데이터 생성
<a name="generate-synthetic-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| LLM 기반 데이터 생성기를 생성합니다. | **create\$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 서버리스 설명서를 참조하시기 바랍니다. | OpenSearch Serverless API | 
| OpenSearch 인덱스를 정의합니다. | 미리 정의된 스키마 매핑을 기반으로 OpenSearch 클라이언트를 사용하여 상태 게시물 및 사용자 프로필에 대한 indiex를 생성합니다. 인덱스 생성은 다음과 같습니다.<pre>response_health = oss_client.indices.create(healthpost_index, body=healthpost_body)</pre> | OpenSearch, JSON | 
| OpenSearch에 데이터를 로드합니다. | **ingest\$1data()** 함수를 실행하여 합성 상태 게시물과 사용자 프로필을 해당 OpenSearch 인덱스에 일괄 삽입합니다. 함수는의 대량 헬퍼를 사용합니다`opensearch-py`.<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 | 
| text-to-query 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()** 함수를 실행하여 OpenSearch Serverless 컬렉션에 대해 생성된 쿼리 DSL을 실행하고 결과를 반환합니다. 함수는 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>
+ [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 모델을 사용한 text-to-query DSL 변환에 대한 다음과 같은 프롬프트 기술을 보여줍니다.
+ **퓨샷 프롬프트:** 퓨샷 프롬프트는 Amazon Bedrock에서 Claude 3 모델의 성능을 개선하기 위한 강력한 기술입니다. 이 접근 방식에는 모델에 유사한 작업을 수행하도록 요청하기 전에 원하는 입력/출력 동작을 보여주는 몇 가지 예가 포함됩니다. Amazon Bedrock에서 Claude 3 모델을 사용하는 경우 특정 형식 지정, 추론 패턴 또는 도메인 지식이 필요한 작업에 특히 효과적일 수 있습니다. 이 기술을 구현하려면 일반적으로 예시 섹션과 실제 쿼리라는 두 가지 주요 구성 요소로 프롬프트를 구성합니다. 예시 섹션에는 작업을 설명하는 입력/출력 페어가 하나 이상 포함되어 있으며, 쿼리 섹션에는 응답을 원하는 새 입력이 표시됩니다. 이 방법은 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>

*Ram Kandaswamy, Amazon Web Services*

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

이 패턴은 tic-tac-toe 게임을 사용하여 다양한 개발 작업에 Amazon Q Developer를 적용하는 방법을 보여줍니다. 단일 페이지 애플리케이션(SPA)으로 tic-tac-toe 게임에 대한 코드를 생성하고, 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이 설치되었습니다. 지침은 [AWS 설명서](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는 한 번에 하나의 개발 작업만 수행할 수 있습니다.
+ 일부 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가 필요합니다. 지원되는 IDEs 목록은 [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를 사용하여 tic-tac-toe 게임 프로젝트 설계
<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/ko_kr/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | 앱 개발자, 프로그래머, 소프트웨어 개발자 | 
| tic-tac-toe용 코드를 생성합니다. | 채팅 패널에서 `/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` 파일을 자동으로 교체합니다.문제가 발생하면 **피드백 제공 및 재생성을** 선택하고 발생한 문제를 설명합니다. | 앱 개발자, 프로그래머, 소프트웨어 개발자 | 
| 보풀 오류를 수정합니다. | 예시 tic-tac-toe 게임에는 그리드가 포함되어 있습니다. 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/ko_kr/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`.<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/ko_kr/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> | 앱 개발자, 프로그래머, 소프트웨어 개발자 | 
| 애플리케이션을 스택에 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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>


| 문제 | Solution | 
| --- | --- | 
| 빌드는 단일 페이지 애플리케이션을 생성하거나 출력 폴더로 내보내지 않습니다. | `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, & Using Amazon Q Developer with JetBrains IDEs (How-to)](https://www.youtube.com/watch?v=-iQfIhTA4J0&pp=ygUSYW1hem9uIHEgZGV2ZWxvcGVy)
+ [명령줄용 Amazon Q 설치](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-getting-started-installing.html)(AWS 문서)

# 테라바이트 규모의 ML 데이터셋의 분산형 피처 엔지니어링에 SageMaker 프로세싱을 사용하기
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets"></a>

*Chris Boomhower, Amazon Web Services*

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

테라바이트 규모 이상의 많은 데이터 세트는 계층적 폴더 구조로 구성된 경우가 많으며, 데이터 세트에 있는 파일은 때때로 상호 종속성을 공유합니다. 이러한 이유로 기계 학습(ML) 엔지니어와 데이터 과학자는 모델 훈련 및 추론에 사용할 데이터를 준비하기 위해 신중한 설계 결정을 내려야 합니다. 이 패턴은 수동 매크로샤딩 및 마이크로샤딩 기법을 Amazon SageMaker Processing 및 가상 CPU(vCPU) 병렬화와 함께 사용하여 복잡한 빅 데이터 ML 데이터세트에 대한 특성 추출 프로세스를 효율적으로 확장하는 방법을 보여줍니다. 

이 패턴은 프로세싱을 위해 *매크로샤딩*을 여러 시스템에 걸쳐 데이터 디렉터리를 분할하는 것으로 정의하고, *마이크로샤딩*은 여러 프로세싱 스레드에 걸쳐 각 시스템의 데이터를 분할하는 것으로 정의합니다. 이 패턴은 [PhysioNet MIMIC-III](https://physionet.org/content/mimic3wdb/1.0/) 데이터세트의 샘플 시계열 파형 레코드와 함께 Amazon SageMaker를 사용하여 이러한 기술을 보여줍니다. 이 패턴으로 기술을 구현하면 특성 추출의 처리 시간과 비용을 최소화하는 동시에 리소스 사용률과 처리 효율성을 극대화할 수 있습니다. 이러한 최적화는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 및 vCPU에서 분산형 SageMaker Processing을 기반으로 하며 데이터 유형에 관계없이 비슷하고 큰 데이터 세트를 처리합니다.

## 사전 조건 및 제한 사항
<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)를 참고하십시오.
+ [PhysioNet MIMIC-III](https://physionet.org/content/mimic3wdb/1.0/) 샘플 데이터로 이 패턴을 구현하려는 경우 SageMaker Studio를 사용합니다. 
+ 패턴은 SageMaker Processing을 사용하지만 SageMaker Processing 작업을 실행한 경험이 없어도 됩니다.

**제한 사항 **
+ 이 패턴은 상호 종속적인 파일이 포함된 ML 데이터셋에 매우 적합합니다. 이러한 상호 종속성은 수동 매크로샤딩과 여러 개의 단일 인스턴스 SageMaker Processing 작업을 병렬로 실행할 때 가장 큰 이점을 발휘합니다. 이러한 상호 종속성이 존재하지 않는 데이터셋의 경우 SageMaker Processing의 `ShardedByS3Key` 기능이 매크로샤딩에 대해 더 나은 대안일 수 있습니다. 이 기능은 샤딩된 데이터를 동일한 처리 작업으로 관리되는 여러 인스턴스로 전송하기 때문입니다. 하지만 두 시나리오 모두에서 이 패턴의 마이크로샤딩 전략을 구현하여 인스턴스 vCPU를 가장 잘 활용할 수 있습니다.

**제품 버전**
+ 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개의 병렬 프로세스는 MIMIC-III 데이터 세트의 구조를 반영합니다. (다이어그램을 단순화하기 위해 프로세스가 타원으로 표시됩니다.) 수동 매크로샤딩을 사용하는 경우 모든 데이터세트에 유사한 아키텍처가 적용됩니다. MIMIC-III의 경우, 최소한의 노력으로 각 환자 그룹 폴더를 개별적으로 처리하여 데이터 세트의 원시 구조를 유리하게 사용할 수 있습니다. 다음 다이어그램에서 레코드 그룹 블록은 왼쪽에 표시됩니다 (1). 데이터가 분산되어 있다는 점을 고려하면 환자 그룹별로 샤딩하는 것이 합리적입니다.

![\[마이크로샤딩 및 분산형 EC2 인스턴스의 아키텍처\]](http://docs.aws.amazon.com/ko_kr/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가 인스턴스 전반에서 데이터 샤딩을 자동으로 관리하도록 지시합니다. 

여러 인스턴스를 동시에 실행하면 시간이 절약되므로 각 폴더의 처리 작업을 시작하면 데이터를 전처리하는 비용 효율적인 방법이 됩니다. 추가 비용 및 시간을 절약하기 위해 각 처리 작업 내에서 마이크로샤딩을 사용할 수 있습니다. 

*마이크로샤딩 및 병렬 vCPU*

각 처리 작업 내에서 그룹화된 데이터는 SageMaker 완전 관리형 EC2 인스턴스에서 사용 가능한 모든 vCPU의 사용을 극대화하기 위해 추가로 분할됩니다. 다이어그램 (2)의 중간 섹션에 있는 블록은 각 기본 처리 작업에서 발생하는 상황을 나타냅니다. 환자 기록 폴더의 콘텐츠는 인스턴스에서 사용 가능한 vCPU 수에 따라 평탄화되고 균등하게 분할됩니다. 폴더 콘텐츠가 분할되면 동일한 크기의 파일 집합이 처리를 위해 모든 vCPU에 배포됩니다. 처리가 완료되면 각 vCPU의 결과가 각 처리 작업에 대한 단일 데이터 파일로 결합됩니다. 

첨부된 코드에서 이러한 개념은 `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 인스턴스에서 사용할 수 있는 vCPU 수가 구해집니다. `chunks`를 호출하여 이진 파형 파일 목록을 이러한 vCPU에 균등하게 분할한 다음, [joblib의 Parallel 클래스](https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html)를 사용하여 각 파형 하위 목록을 자체 vCPU에서 처리합니다. 결과는 프로세싱 작업에 의해 단일 데이터 프레임 목록으로 자동 결합되며, SageMaker는 작업 완료 시 Amazon S3에 기록하기 전에 이 목록을 추가로 처리합니다. 이 예제에서는 프로세싱 작업에 의해 Amazon S3에 10개의 파일이 기록되어 있습니다(각 작업당 하나).

초기 프로세싱 작업이 모두 완료되면 다이어그램 (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)입니다. SageMaker Studio 내에서 Jupyter Notebook을 사용하여 SageMaker 프로세싱 작업을 실행합니다.
+ [SageMaker Processing](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) - Amazon SageMaker Processing은 데이터 처리 워크로드를 실행하는 간소화된 방법을 제공합니다. 이 패턴에서 특성 추출 코드는 SageMaker Processing 작업을 사용하여 대규모로 구현됩니다.

**코드**

첨부된 .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>.zip 파일을 추출한 위치로 이동하여 `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 엔지니어 | 

### 첫 번째 전처리 스크립트 구성
<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 수에 따라 파일을 하위 그룹으로 나눕니다. | 스크립트를 실행하는 인스턴스에 있는 vCPU 수에 따라 파일을 균일한 크기의 하위 그룹 또는 청크로 나누어야 합니다. 이 단계에서는 다음과 비슷한 코드를 구현할 수 있습니다.<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 엔지니어 | 
| vCPU 전반의 하위 그룹 처리를 병렬화합니다. | 모든 서브그룹을 병렬로 처리하도록 스크립트 로직을 구성해야 합니다. 이렇게 하려면 다음과 같이 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 엔지니어 | 

### 두 번째 전처리 스크립트 구성
<a name="configure-the-second-preprocessing-script"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 첫 번째 스크립트를 실행한 모든 프로세싱 작업에서 생성된 데이터 파일을 결합합니다. | 이전 스크립트는 데이터 세트의 파일 그룹을 처리하는 각 SageMaker Processing 작업에 대해 단일 파일을 출력합니다.  다음으로, 이러한 출력 파일을 단일 객체로 결합하고 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 엔지니어 | 
| 두 번째 처리 작업을 실행합니다. | 첫 번째 처리 작업 세트에서 생성된 출력을 결합하고 사전 처리를 위한 추가 계산을 수행하려면 단일 SageMaker Processing 작업을 사용하여 두 번째 스크립트를 실행합니다. 다음 코드는 이를 보여줍니다(`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.Parallel 설명서](https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html)
+ Moody, B., Moody, G., Villarroel, M., Clifford, G. D., Silva, I. (2020). [MIMIC-III 파형 데이터베이스](https://doi.org/10.13026/c2607m)(버전 1.0). *PhysioNet*.
+ Johnson, A. E. W., Pollard, T. J., Shen, L., Lehman, L. H., Feng, M., Ghassemi, M., Moody, B., Szolovits, P., Celi, L. A., Mark, R. G. (2016). [MIMIC-III(무료로 이용할 수 있는 중환자 치료 데이터베이스)](https://dx.doi.org/10.1038/sdata.2016.35) Scientific Data, 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) 파일의 압축을 풉니다.

# Flask와 AWS Elastic Beanstalk를 사용하여 AI/ML 모델 결과 시각화
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk"></a>

*Chris Caudill, Durga Sury, Amazon Web Services*

## 요약
<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 계정. 
+ 로컬 시스템에 설치 및 구성된 Command Line Interface(CLI). 이에 대한 자세한 내용은 CLI 설명서에서 [기본 사항 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)을 참조하십시오. AWS Cloud9 통합 개발 환경(IDE)을 사용할 수도 있습니다. 이에 대한 자세한 내용은 Cloud9 설명서에서 [Cloud9에 관한 Python 자습서](https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-python.html) 및 [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의 웹 애플리케이션 프레임워크에 대한 이해. Flask에 대한 자세한 내용은 Flask 설명서에서 [퀵스타트](https://flask.palletsprojects.com/en/1.1.x/quickstart)를 참조하십시오.
+ Python 버전 3.6 이상이 설치 및 구성되었습니다. AWS Elastic Beanstalk 설명서에서 [Python 개발 환경 설정](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-development-environment.html)의 지침을 따라 Python을 설치할 수 있습니다.
+ Elastic Beanstalk Command Line Interface(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 애플리케이션 아키텍처**

Flask는 Python에서 웹 애플리케이션을 개발하기 위한 경량 프레임워크입니다. Python의 강력한 데이터 처리 기능과 풍부한 웹 UI를 결합하도록 설계되었습니다. 패턴의 Flask 애플리케이션은 사용자가 데이터를 업로드하고 추론을 위해 Amazon Comprehend로 데이터를 전송한 다음 결과를 시각화하는 웹 애플리케이션을 빌드하는 방법을 보여줍니다.   애플리케이션의 구조는 다음과 같습니다.
+ `static` - 웹 UI를 지원하는 모든 정적 파일(예: JavaScript, CSS, 이미지) 포함
+ `templates` - 애플리케이션의 모든 HTML 페이지 포함
+ `userData` - 업로드된 사용자 데이터 저장
+ `application.py` - Flask 애플리케이션 파일
+ `comprehend_helper.py` - Amazon Comprehend에 대한 API 직접 호출 함수
+ `config.py` - 애플리케이션 구성 파일
+ `requirements.txt` - 애플리케이션에 필요한 Python 종속성

`application.py` 스크립트에는 4개의 Flask 경로로 구성된 웹 애플리케이션의 핵심 기능이 포함되어 있습니다. 다음 다이어그램은 이러한 Flask 경로를 보여줍니다.

![\[웹 애플리케이션의 핵심 기능을 구성하는 4개의 Flask 경로.\]](http://docs.aws.amazon.com/ko_kr/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 객체로 반환됩니다.

**배포 아키텍처**

![\[Flask와 Elastic Beanstalk를 사용하여 AI/ML 모델 결과를 시각화하는 아키텍처 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/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 배포는 로드 밸런서 및 오토 스케일링 그룹을 사용하여 자동으로 설정됩니다. 추가 구성 옵션에 대해서는 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 Command Line Interface(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)를 사용하면 애플리케이션을 실행하는 인프라에 대해 자세히 알지 못해도 클라우드에서 애플리케이션을 신속하게 배포하고 관리할 수 있습니다.
+ [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를 사용하여 대화형 웹 시각화를 제공합니다.

**코드**

이 패턴의 코드는 [Flask 및 AWS Elastic Beanstalk 리포지토리를 사용한 GitHub Visualize 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 리포지토리를 복제합니다. | 다음 명령을 실행하여 [Flask 및 AWS Elastic Beanstalk 리포지토리를 사용한 GitHub Visualize 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 개발자 | 
| 로컬로 애플리케이션 테스트합니다. | 다음 명령을 실행하여 Flask 서버를 시작합니다.`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>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 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/ko_kr/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를 호출할 수 있는 권한을 배포된 애플리케이션에 제공하는 관리형 정책입니다.다음 명령을 실행하여 `ComprehendFullAccess` 정책을 `aws-elasticbeanstalk-ec2-role`(이 역할은 배포의 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`은 애플리케이션 배포 시 생성됩니다. 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/ko_kr/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/ko_kr/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>

**문제 해결 목록**

다음은 6가지 일반적인 오류와 해결 방법입니다.

***오류 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는 Flask 코드의 이름이 지정될 것으로 예상하기 때문에 배포 로그에서 이 오류가 발생합니다. `application.py` 다른 이름을 선택한 경우 다음 코드 샘플에 표시된 대로 `eb config`(을)를 실행하고 WSGIPath를 편집합니다.

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

`application.py`(을)를 파일 이름으로 바꿔야 합니다.

Gunicorn 및 Procfile을 적극 활용할 수도 있습니다. 이 접근 방식에 대한 자세한 내용은 AWS Elastic Beanstalk 설명서에서 [Procfile을 사용하여 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를 사용하면 엔드포인트를 생성하여 실시간으로 사용할 수 있는 사용자 지정 개체 인식 및 텍스트 분류 모델을 훈련할 수 있습니다.

이 패턴은 비동기 배치 작업을 사용하여 여러 문서가 포함된 입력 파일에서 감성과 개체를 탐지합니다. 이 패턴에서 제공하는 샘플 애플리케이션은 사용자가 행당 하나의 텍스트 문서와 함께 하나의 열이 들어 있는 .csv 파일을 업로드하도록 설계되어 있습니다. [Flask 및 AWS Elastic Beanstalk 리포지토리를 사용한 GitHub 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의 신뢰 수준을 표시하는 점수를 반환합니다. 한 번의 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`). 한 번의 API 직접 호출로 최대 25개의 문서를 전송할 수 있으며, 각 문서의 크기는 5,000바이트 미만입니다. 감성에 대한 분석은 간단하며, 사용자가 가장 높은 점수의 감성을 선택하여 최종 결과에 표시합니다. 이에 대한 자세한 내용은 Amazon Comprehend 설명서에서 [BatchDetectSentiment](https://docs.aws.amazon.com/comprehend/latest/dg/API_BatchDetectSentiment.html)를 참조하십시오.

 

 

**Flask 구성 처리**

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)
+ [채팅 애플리케이션에서 Amazon Q Developer 사용자 지정 작업 및를 사용하여 SAST 스캔 결과를 관리하는 ChatOps 솔루션 배포 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)
+ [AWS Transform 및 Terraform을 사용하여 메인프레임 애플리케이션 현대화 및 배포](modernize-mainframe-app-transform-terraform.md)
+ [Amazon Redshift 기계 학습을 이용하여 고급 분석 수행](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)