継続は力なり

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

OpenSearch Serverless のリソースを Terraform にインポートする

タダです.

OpenSearch Serverless のリソースを Terraform の管理下に置くためにインポートを行いました.一部自分の勘違いでハマったことがあったのでそこからの学びをこの記事でまとめます.なお,本記事で使用する hashicorp/aws のプロバイダーバージョンは 5.68.0 です.

OpenSearch Serverless の Terraform インポート対象リソース

OpenSearch Serverless の Terraform インポートを行った対象は下記のものです.

  • aws_opensearchserverless_collection
  • aws_opensearchserverless_security_policy
  • aws_opensearchserverless_access_policy

これらの中で aws_opensearchserverless_collection のインポート時に勘違いをしてちょっとハマったのでその対処を次のセクション以降で書きます.

aws_opensearchserverless_collection のインポートに必要な記述について

aws_opensearchserverless_collection のインポート時には以下のような指定が必要です.OpenSearch Serverless コレクションの ID を自分は最初コレクション名と勘違いしてハマりました.

import {
  to = aws_opensearchserverless_collection.example
  id = "<OpenSearch Serverless コレクションの ID>"
}

コレクション ID をコレクション名にした場合は Terraform の実行計画時に以下のようにエラーがでます.

╷
│ Error: reading AWS OpenSearch Serverless Collection (hoge): operation error OpenSearchServerless: BatchGetCollection, https response error StatusCode: 400, RequestID: 479f005d-48ca-4465-86e5-7fc0ffc267d2, ValidationException: 1 validation error detected: Value '[hoge]' at 'ids' failed to satisfy constraint: Member must satisfy constraint: [Member must have length less than or equal to 40, Member must have length greater than or equal to 3, Member must satisfy regular expression pattern: [a-z0-9]{3,40}]
│ 
│ operation error OpenSearchServerless: BatchGetCollection, https response error StatusCode: 400, RequestID: 479f005d-48ca-4465-86e5-7fc0ffc267d2, ValidationException: 1 validation error detected: Value '[hoge]' at
│ 'ids' failed to satisfy constraint: Member must satisfy constraint: [Member must have length less than or equal to 40, Member must have length greater than or equal to 3, Member must satisfy regular expression
│ pattern: [a-z0-9]{3,40}]

関連ドキュメント

registry.terraform.io

OpenSearch Serverless コレクション ID の調べ方

OpenSearch Serverless コレクション ID は様々な確認の仕方がありますが,この記事では AWS CLI で確認した方法を記載します.list-collections を実行するとコレクション ID をコレクションごとに確認ができます.

実行例

$ aws opensearchserverless list-collections    
{
    "collectionSummaries": [
        {
            "arn": "arn:aws:aoss:ap-northeast-1:123456789010:collection/abcdefgh12345678910",
            "id": "abcdefgh12345678910",
            "name": "hoge",
            "status": "ACTIVE"
        },
        {
            "arn": "arn:aws:aoss:ap-northeast-1:123456789010:collection/ijklmnop12345678910",
            "id": "ijklmnop12345678910",
            "name": "fuga",
            "status": "ACTIVE"
        }
    ]
}

上記の実行した結果からコレクション ID を記載してインポートすれば Terraform の実行計画時のエラーが解消できます.

import {
  id = "abcdefgh12345678910"
  to = aws_opensearchserverless_collection.hoge
}

まとめ

OpenSearch Serverless のリソースを Terraform にインポートする時にハマってしまったことと,その解消のために行ったことをまとめました.