

# 벡터 버킷에서 벡터 인덱스 만들기
<a name="s3-vectors-create-index"></a>

**참고**  
벡터 인덱스 구성 파라미터를 신중하게 선택합니다. 벡터 인덱스를 만든 후에는 벡터 인덱스 이름, 차원, 거리 지표 또는 필터링할 수 없는 메타데이터 키를 업데이트할 수 없습니다. 이러한 값을 변경하려면 새 벡터 인덱스를 만들어야 합니다.

벡터 인덱스는 효율적인 유사성 검색을 위해 벡터 데이터를 저장하고 구성하는 벡터 버킷 내의 리소스입니다. 벡터 인덱스를 만들 때 차원, 유사성 계산에 사용되는 거리 지표, 필터링 불가능한 메타데이터 키(선택 사항)와 같이 해당 인덱스의 모든 벡터가 공유해야 하는 특성을 정의합니다. 인덱스 생성 시 벡터 인덱스에 대한 전용 암호화 설정 및 태그를 선택적으로 구성할 수도 있습니다. 벡터 인덱스 이름 지정 요구 사항, 차원 요구 사항, 거리 지표 옵션 및 필터링 불가능한 메타데이터 키에 대한 자세한 내용은 [한계 및 제한](s3-vectors-limitations.md) 섹션을 참조하세요. 벡터 인덱스의 암호화 구성 설정에 대한 자세한 내용은 [S3 Vectors의 데이터 보호 및 암호화](s3-vectors-data-encryption.md) 섹션을 참조하세요. 태그 설정에 대한 자세한 내용은 [S3 벡터 버킷에서 태그 사용](s3-vectors-tags.md) 섹션을 참조하세요.

 벡터 인덱스는 기존 벡터 버킷 내에서 만들어야 하며, 만든 후 수정할 수 없는 특정 구성 파라미터가 필요합니다.

## S3 콘솔 사용
<a name="s3-vectors-create-index-console"></a>

**벡터 인덱스 생성**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 탐색 창에서 **벡터 버킷**을 선택합니다.

1. 벡터 버킷 목록에서 벡터 인덱스를 만들려는 버킷의 이름을 선택합니다.

1. 그런 다음 **벡터 인덱스 생성**을 선택합니다.

1. **벡터 인덱스 이름**에 벡터 인덱스의 이름을 입력합니다.

   벡터 인덱스 이름은 벡터 버킷 내에서 고유해야 합니다. 인덱스 이름은 3\$163자 이내로 작성해야 합니다. 유효한 문자는 소문자(a\$1z), 숫자(0\$19), 하이픈(-), 점(.)입니다. 벡터 인덱스 이름 지정 요구 사항에 대한 자세한 내용은 [한계 및 제한](s3-vectors-limitations.md) 섹션을 참조하세요.

1. **차원**에 각 벡터의 값 수를 입력합니다.
**참고**  
**차원** 값은 각 벡터에 포함될 숫자 값의 수를 결정합니다.
이 인덱스에 추가된 모든 벡터에는 정확히 이 수의 값이 있어야 합니다.
차원은 1에서 4,096 사이여야 합니다.
차원이 클수록 스토리지 공간이 더 많이 필요합니다.
임베딩 모델의 출력 차원에 따라를 선택합니다.

   차원 요구 사항에 대한 자세한 내용은 [한계 및 제한](s3-vectors-limitations.md) 섹션을 참조하세요.

1. **거리 지표**에서 다음 옵션 중 하나를 선택합니다.
   + **코사인** - 벡터 간 각도의 코사인을 측정합니다. 정규화된 벡터 및 방향이 크기보다 중요한 경우에 가장 적합합니다.
   + **유클리드** - 벡터 간의 직선 거리를 측정합니다. 방향과 크기가 모두 중요한 경우에 가장 적합합니다.

1. (선택 사항) **필터링 불가능한 메타데이터** 아래에서 저장되지만 필터링에 사용되지 않는 메타데이터 키를 구성합니다.

   필터링 불가능한 메타데이터 키 추가:

   1. **키 추가**를 선택합니다.

   1. 키 이름(1\$163자, 이 벡터 인덱스 내에서 고유)을 입력합니다.

   1. 반복하여 추가 키(최대 10개의 키)를 추가합니다.
**참고**  
벡터 인덱스를 만든 후 벡터 데이터를 삽입할 때 필터링 가능한 메타데이터를 각 벡터에 키-값 페어로 연결할 수 있습니다. 기본적으로 벡터에 연결된 모든 메타데이터 키는 필터링이 가능하며, 유사성 쿼리에서 필터로 사용할 수 있습니다. 벡터 인덱스 만들기 중에 필터링 불가능한 것으로 지정된 메타데이터 키만 필터링에서 제외됩니다. 총 메타데이터 제약 조건과 필터링 가능한 메타데이터 제약 조건을 포함하여 벡터당 메타데이터 크기 제한에 대한 자세한 내용은 [한계 및 제한](s3-vectors-limitations.md) 섹션을 참조하세요.

1. 구성을 신중하게 검토합니다.
**참고**  
이러한 설정은 만든 후에 변경할 수 없습니다.

1. **암호화**에서 **암호화 유형 지정**을 선택합니다. **암호화에 버킷 설정을 사용**하거나 벡터 인덱스에 대한 암호화 설정을 재정의할 수 있습니다. 버킷 수준 설정을 재정의하는 경우, 벡터 인덱스의 암호화 유형을 **AWS 키 관리 서비스를 사용한 서버 측 암호화(SSE-KMS)** 또는 **Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)**로 지정할 수 있습니다. 벡터 인덱스의 암호화 구성 설정에 대한 자세한 내용은 [S3 Vectors의 데이터 보호 및 암호화](s3-vectors-data-encryption.md) 섹션을 참조하세요.

1. **태그(선택 사항)**에서 태그를 키-값 페어로 추가하고 AWS Billing and Cost Management를 사용하여 벡터 인덱스 비용을 추적하고 구성할 수 있습니다. **키**와 **값**을 입력합니다. 태그를 더 추가하려면 **태그 추가(Add Tag)**를 선택합니다. 벡터 인덱스에 최대 50개의 태그를 입력할 수 있습니다. 자세한 내용은 [S3 벡터 버킷에서 태그 사용](s3-vectors-tags.md) 섹션을 참조하세요.

1. 그런 다음 **벡터 인덱스 생성**을 선택합니다.

## AWS CLI 사용
<a name="s3-vectors-create-index-cli"></a>

벡터 버킷에서 벡터 인덱스를 만들려면 다음 예제 명령을 사용하고 `user input placeholders`를 자체 정보로 바꿉니다.

**예제 1: 필터링 불가능한 메타데이터 키를 사용하여 벡터 인덱스 만들기**

```
aws s3vectors create-index \
  --vector-bucket-name "amzn-s3-demo-vector-bucket" \
  --index-name "idx" \
  --data-type "float32" \
  --dimension 1 \
  --distance-metric "cosine" \
  --metadata-configuration '{"nonFilterableMetadataKeys":["nonFilterableKey1"]}'
```

**예제 2: 필터링 불가능한 메타데이터 키 없이 벡터 인덱스 만들기**

```
aws s3vectors create-index \
  --vector-bucket-name "amzn-s3-demo-vector-bucket" \
  --index-name "idx2" \
  --data-type "float32" \
  --dimension 4096 \
  --distance-metric "euclidean"
```

또한 모든 메타데이터(필터링 가능한 메타데이터와 필터링 불가능한 메타데이터 모두)는 `GetVectors`, `ListVectors` 또는 `QueryVectors` API 작업을 사용하여 동일한 방식으로 검색됩니다. 다음 CLI 명령은 메타데이터(필터링 불가능한 메타데이터 포함)를 사용하여 벡터를 검색하는 방법을 보여줍니다.

요청 예제:

```
aws s3vectors get-vectors \
  --vector-bucket-name "amzn-s3-demo-vector-bucket" \
  --index-name "idx" \
  --keys '["vec1", "vec3"]' \
  --return-data \
  --return-metadata \
```

응답 예제: 

```
{
    "vectors": [
        {
            "key": "vec1",
            "data": {
                "float32": [
                    0.10000000149011612,
                    0.20000000298023224,
                    0.30000001192092896,
                    0.4000000059604645,
                    0.5
                ]
            },
            "metadata": {
                "category": "test",
                "text": "First vector"
            }
        },
        {
            "key": "vec3",
            "data": {
                "float32": [
                    0.6000000238418579,
                    0.699999988079071,
                    0.800000011920929,
                    0.8999999761581421,
                    1.0
                ]
            },
            "metadata": {
                "text": "Third vector",
                "category": "test"
            }
        }
    ]
}
```

응답에는 인덱스 생성 중에 필터링 가능 또는 필터링 불가능으로 지정되었는지 여부에 관계없이 벡터와 연결된 모든 메타데이터가 포함됩니다.

## AWS SDK 사용
<a name="s3-vectors-create-index-sdk"></a>

------
#### [ SDK for Python ]

```
import boto3

# Create a S3 Vectors client in the AWS Region of your choice. 
s3vectors = boto3.client("s3vectors", region_name="us-west-2")

#Create a vector index "movies" in the vector bucket "media-embeddings" without non-filterable metadata keys
s3vectors.create_index(
    vectorBucketName="media-embeddings",
    indexName="movies",
    dimension=3,
    distanceMetric="cosine",
    dataType = "float32"
)


#Create a vector index "movies" in the vector bucket "media-embeddings" with non-filterable metadata keys
s3vectors.create_index(
    vectorBucketName="media-embeddings",
    indexName="movies",
    dimension=3,
    distanceMetric="cosine",
    dataType = "float32",
    metadataConfiguration= {"nonFilterableMetadataKeys": ["nonFilterableMetadataKey1"]}
)
```

------