タダです.
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}] ╵
関連ドキュメント
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 にインポートする時にハマってしまったことと,その解消のために行ったことをまとめました.