[アップデート] AWS CloudFormation が Amazon S3 のベクトルバケットをサポートしました

[アップデート] AWS CloudFormation が Amazon S3 のベクトルバケットをサポートしました

2025.11.05

いわさです。

今年の 7 月に安価なベクトルストレージを提供できるサービスとして Amazon S3 Vectors というサービスがプレビューで登場しました。

https://dev.classmethod.jp/articles/amazon-s3-vectors-preview-release/

この S3 Vectors ですが、本日時点ではコンソールで操作できないことが多く AWS CLI などで変更管理しなければいけないことも多かったのですが CloudFormation はまだサポートされていませんでした。
実は先日のアップデートで密かに CloudFormation が S3 Vectors をサポートしていまして、少し管理しやすくなりました。

S3 Vectors 自体東京リージョンはまだなのですが、バージニア北部リージョンで少し触ってみましたので紹介します。

757831B1-1F44-4510-A7E9-1FA56FF0334C.png

サポートされたのは以下の3つのリソースです。

  • AWS::S3Vectors::VectorBucket
  • AWS::S3Vectors::VectorBucketPolicy
  • AWS::S3Vectors::Index

https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/AWS_S3Vectors.html

特にバケットポリシーについてはこれまでコンソールから全くさわれなくて AWS CLI で設定するしかなかったので嬉しいと思います。
他にもバケットやインデックスの設定変更や削除もコンソールから出来なかったのが CloudFormation スタックで管理できるのはありがたい。

バケット

AWS::S3Vectors::VectorBucketでバケットの作成ができます。
最低限の設定だと以下だけで OK です。オプションで KMS の指定もできます。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeBucket:
    Type: AWS::S3Vectors::VectorBucket
    Properties:
      VectorBucketName: hoge1102bucket

このテンプレートでスタックを作成すると次のようにバケットが作成されました。

5A555489-44F6-48B1-BC69-C86E4F04E678_4_5005_c.jpeg

コンソールからバケット詳細情報は確認できないので、AWS CLI を使って確認してみると、暗号化の構成はデフォルトの SSE-S3 が設定されていることが確認できました。

% aws s3vectors get-vector-bucket --vector-bucket-name hoge1102bucket --region us-east-1 --profile hoge
{
    "vectorBucket": {
        "vectorBucketName": "hoge1102bucket",
        "vectorBucketArn": "arn:aws:s3vectors:us-east-1:123456789012:bucket/hoge1102bucket",
        "creationTime": "2025-11-02T05:43:13+09:00",
        "encryptionConfiguration": {
            "sseType": "AES256"
        }
    }
}

バケットポリシー

続いてバケットポリシーです。
上記手順でバケットを作成した時点ではバケットポリシーは何も設定されておらず、AWS CLI で確認してみると次のように何も設定されていないよと言われます。

% aws s3vectors get-vector-bucket-policy --vector-bucket-name hoge1102bucket --region us-east-1 --profile hoge

An error occurred (NotFoundException) when calling the GetVectorBucketPolicy operation: The specified vector bucket policy could not be found

AWS::S3Vectors::VectorBucketPolicyを使って設定してみましょう。
汎用バケットのバケットポリシーと同じでポリシードキュメントを記述するだけです。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeBucket:
    Type: AWS::S3Vectors::VectorBucket
    Properties:
      VectorBucketName: hoge1102bucket

  HogePolicy:
    Type: AWS::S3Vectors::VectorBucketPolicy
    Properties:
      VectorBucketArn: !GetAtt HogeBucket.VectorBucketArn
      Policy: 
        Version: "2012-10-17"
        Statement:
          - Action: "s3vectors:*"
            Effect: Allow
            Resource:
              - !GetAtt HogeBucket.VectorBucketArn
            Principal:
              AWS: "arn:aws:iam::123456789012:root"

上記デプロイ後に再度 AWS CLI から確認してみると次のようにバケットポリシーが設定されていることを確認できました。

% aws s3vectors get-vector-bucket-policy --vector-bucket-name hoge1102bucket --region us-east-1 --profile hoge     
{
    "policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:root\"},\"Action\":\"s3vectors:*\",\"Resource\":\"arn:aws:s3vectors:us-east-1:123456789012:bucket/hoge1102bucket\"}]}"
}

ベクトルインデックスの作成

S3 Vectors ではバケット作成のみではなく、ベクトルインデックスの作成も必要になります。
バケット作成直後は次のようにベクトルインデックスは存在しない状態です。

6455C2FF-0938-4B51-ABA2-6CA2DE59840A.png

AWS::S3Vectors::Indexで作成しましょう。
指定可能なのは概ねマネジメントコンソール上から新規作成した時の内容と同じなのですが、DataTypeだけは指定しないと思います。ここは本日時点ではfloat32のみ指定可能です。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeBucket:
    Type: AWS::S3Vectors::VectorBucket
    Properties:
      VectorBucketName: hoge1102bucket

  HogePolicy:
    Type: AWS::S3Vectors::VectorBucketPolicy
    Properties:
      VectorBucketArn: !GetAtt HogeBucket.VectorBucketArn
      Policy: 
        Version: "2012-10-17"
        Statement:
          - Action: "s3vectors:*"
            Effect: Allow
            Resource:
              - !GetAtt HogeBucket.VectorBucketArn
            Principal:
              AWS: "arn:aws:iam::123456789012:root"

  HogeIndex:
    Type: AWS::S3Vectors::Index
    Properties:
      VectorBucketArn: !GetAtt HogeBucket.VectorBucketArn
      IndexName: hoge1102index
      Dimension: 1
      DataType: float32
      DistanceMetric: cosine
      MetadataConfiguration: 
        NonFilterableMetadataKeys:
          - Hoge1
          - Hoge2

スタック作成後ベクトルインデックスが存在していることを確認しました。

32844EEA-4519-4C90-A46F-8A9994A24D01.png

スタックを削除する

最後に、これまで S3 Vectors 関係のリソースは AWS CLI でひとつづつ削除する必要があったのですが、CloudFormation でスタック管理できるようになったことで削除のライフサイクルも管理しやすくなりました。

先程デプロイしたスタックを削除してみます。

7BDD90F8-E4C1-4DB4-A70B-FAFE045A7C20_4_5005_c.jpeg

S3 ベクトルバケットやら一式もきれいに削除できました。良いですね。

9DFCB6B9-6056-4E7D-B4B4-E6C8405982BA_4_5005_c.jpeg

ただし、今回は空のバケットだったのできれいに削除が出来ました。
ベクトルバケットも汎用バケットと同じで、バケットが空じゃない場合はバケットの削除には失敗します。必要に応じてDeletionPolicyの利用を検討しましょう。

さいごに

本日は AWS CloudFormation が Amazon S3 のベクトルバケットをサポートしたので使ってみました。

これまで AWS CLI でのみ管理できる領域があったので、CloudFormation で管理できるようになったのは嬉しいです。この感じだと CDK もサポートされるか。

この記事をシェアする

FacebookHatena blogX

関連記事