継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS CLI で S3 Vectors を操作するコマンドを学んだメモ✍

タダです.

以下の記事で S3 Vectors を使ってみました.ただ GUI ではやれることがあまり多くないので AWS CLI で操作できることを学んだメモをまとめます.

sadayoshi-tada.hatenablog.com

事前準備

手元の AWS CLI2.22.27 だったのですが,このバージョンでは s3vectors コマンドがなかったのでバージョンを 2.28.25 まで上げました.

❯ aws --version
aws-cli/2.22.27 Python/3.12.8 Darwin/24.5.0 source/arm64
❯ which aws
/opt/homebrew/bin/aws
❯ brew upgrade awscli
❯ aws --version
aws-cli/2.28.25 Python/3.13.7 Darwin/24.5.0 source/arm64

S3 Vectors バケットの作成

まずはバケットバージニアに作成します.

❯ aws s3vectors create-vector-bucket --vector-bucket-name "blog-s3-vectors" --region us-east-1
(何もレスポンスがない)
❯ aws s3vectors list-vector-buckets --region us-east-1
{
    "vectorBuckets": [
        {
            "vectorBucketName": "blog-s3-vectors",
            "vectorBucketArn": "arn:aws:s3vectors:us-east-1:1234567891011:bucket/blog-s3-vectors",
            "creationTime": "2025-09-06T16:42:51+09:00"
        },
    ]
}
❯ aws s3vectors get-vector-bucket --vector-bucket-name blog-s3-vectors --region us-east-1
{
    "vectorBucket": {
        "vectorBucketName": "blog-s3-vectors",
        "vectorBucketArn": "arn:aws:s3vectors:us-east-1:1234567891011:bucket/blog-s3-vectors",
        "creationTime": "2025-09-06T16:42:51+09:00",
        "encryptionConfiguration": {
            "sseType": "AES256"
        }
    }
}

インデックスの作成及びベクトルデータを投入する

次にベクトル検索をするためのインデックスを作成します.

❯ aws s3vectors create-index --vector-bucket-name blog-s3-vectors --index-name test-index --data-type float32 --dimension 1024 --distance-metric cosine --region us-east-1
(何もレスポンスがない)
❯ aws s3vectors get-index --vector-bucket-name blog-s3-vectors --index-name test-index --region us-east-1
{
    "index": {
        "vectorBucketName": "blog-s3-vectors",
        "indexName": "test-index",
        "indexArn": "arn:aws:s3vectors:us-east-1:1234567891011:bucket/blog-s3-vectors/index/test-index",
        "creationTime": "2025-09-06T16:52:47+09:00",
        "dataType": "float32",
        "dimension": 1024,
        "distanceMetric": "cosine"
    }
}

続いてベクトルデータを用意し,投入していきます.

cat <<EOF > input.json
∙ {
∙   "inputText": "This is test vector data."
∙ }
∙ EOF
❯ cat input.json
{
  "inputText": "This is test vector data."
}
❯ aws bedrock-runtime invoke-model --model-id "amazon.titan-embed-text-v2:0" --body fileb://input.json --content-type application/json --accept application/json --region us-east-1 output.json
{
    "contentType": "application/json"
}
❯ jq -c '.embedding' output.json > vector_data.json
❯ cat <<EOF > vector_upload.json
[
  {
    "key": "doc1",
    "data": {
      "float32": $(cat vector_data.json)
    },
    "metadata": {
      "source_text": "This is test vector data.",
      "category": "test"
    }
  }
]
EOF
❯ aws s3vectors put-vectors --vector-bucket-name blog-s3-vectors --index-name test-index --vectors file://vector_upload.json --region us-east-1
(何もレスポンスがない)

ベクトルデータを検索する

投入したデータを検索してみます.

❯ jq '{float32: .embedding}' output.json > embedding.json
❯ aws s3vectors query-vectors --vector-bucket-name blog-s3-vectors --index-name test-index --top-k 3 --query-vector file://embedding.json --return-metadata --region us-east-1
{
    "vectors": [
        {
            "key": "doc1",
            "metadata": {
                "source_text": "This is test vector data.",
                "category": "test"
            }
        }
    ]
}

S3 Vectors バケット削除

最後にバケットを削除します.

❯ aws s3vectors delete-index --vector-bucket-name blog-s3-vectors --index-name test-index --region us-east-1
(何もレスポンスがない)
❯ aws s3vectors delete-vector-bucket --vector-bucket-name blog-s3-vectors --region us-east-1
(何もレスポンスがない)
❯ aws s3vectors get-vector-bucket --vector-bucket-name blog-s3-vectors --region us-east-1

An error occurred (NotFoundException) when calling the GetVectorBucket operation: The specified vector bucket could not be found
※ちゃんと削除できたことを確認した

まとめ

AWS CLI で S3 Vectors を操作するコマンドを学んだメモをまとめました.