Serviceへ移行してみたこんにちは。サービスグループの武田です。Serviceへ移行するための手順をまとめました。CDK#AWS武田隆志2021.09.28この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。サービスグループの武田です。Serviceと名称が変更されました。それに伴い、従来のElasticsearchに加え、新たにOpenSearchがエンジンとしてサポートされるようになりました。そこでこの機会に、CDKで管理しているシステムが利用しているESをOSに移行してみました。実はESからOSへの移行自体はそこまで難しいものではありません。マネジメントコンソールでぽちぽちすれば終わります。CloudFormationで管理している場合、そう簡単ではありません(CDKは内部でCFnを生成している)。簡単ではないかというと、CFnのリソースタイプがAWS::Elasticsearch::DomainからAWS::OpenSearchService::Domainへ変更されているためです。異なるリソースタイプのため同一論理IDのアップグレードができません。移行は次の手順を実施しました。Domainに関する部分をコピーし、2で更新したテンプレートに貼り付け、スタックへリソースをインポートCDKのコードをdeployしてAWS環境と一致させるCDKでエンジンバージョンをOpenSearchに変更しdeploy1がCDKの移行。2から4がCloudFormationの移行。5がOpenSearchへの移行です。CDKのソースコードを修正するこの手順は簡単です。CDKのモジュールを入れ替えます。@aws-cdk/aws-elasticsearch次にesモジュールに依存していた箇所をopensearchモジュールを使用するように修正します。ポイントは、エンジンバージョンは変えないこととインスタンスタイプ名を新しい名称に変更することの2点です。},この時点でデプロイしようとしても失敗します。前述したようにリソースタイプが内部的に変わっているため互換性のないアップグレードということで弾かれます。ElasticsearchドメインをCloudFormationスタックから切り離すリソースタイプが変わっているため、それに対応する必要があります。古いリソースタイプのスタックから切り離し、新しいリソースタイプのスタックにインポートすることで対応します。マネジメントコンソールなどから現在のスタックのテンプレートをコピーし、ローカルファイルに保存します。次にElasticsearchドメインに関する部分を削除します。具体的には次のリソースです。リソースタイプがAWS::Elasticsearch::DomainのリソースESのドメインアクセスポリシーそのほか、ESドメインに依存しているリソース今回移行したアプリケーションの場合、Lambda関数の環境変数にESのエンドポイントを設定しており、そこを一時的にハードコードに変更しました。移行するアプリケーションによって依存リソースは異なるため、地道に削除または修正して対応しましょう。テンプレートが修正できたらスタックを更新します。必要なパラメーターは入力済みのはずですので、そのまま次へ。変更セットを確認しましょう。ESに関するものが削除され、依存していたその他のリソースも変更されていれば問題ないはずです。スタックの更新が完了しました。ESは削除スキップされていますね。ElasticsearchドメインをOpenSearchServiceリソースとしてスタックにインポート続いて、今切り離したESドメインを今度はOpenSearchServiceリソースとしてスタックにインポートします。コピーし、2で修正したCFnテンプレートに貼り付け保存します。修正中のCFnテンプレートはYAML形式ですので、標準出力に出力されたsynth結果をコピーしましょう。outディレクトリの中身はJSON形式のためそのままは使えないはずです。ここの注意点はAWS::OpenSearchService::Domainのリソースのみコピーすることです。アクセスポリシーも一緒にコピーしてしまうと、インポートする際にインポート不可能なリソースとしてエラーになってしまいます。差分が出てしまうことについては次のステップで解決するので気にせず進めましょう。インポートするリソースの識別子を入力します。問題なければ既存の論理IDに紐付けられるはずです。インポートが無事に完了しました。CDKとAWS環境を同期するこのままではアクセスポリシーや一部リソース(今回で言えばLambda関数の環境変数など)が、CDKのコードとAWS環境で不一致の状態になっています。そこでdeployして一致させましょう。そのままコマンドを叩いて完了するのを待つだけです。完了後は念のためAWS環境を確認しておくとよいでしょう。ElasticsearchからOpenSearchへマイグレーションそれでは仕上げとしてドメインのエンジンを変更しましょう。しておくと安心してアップグレードできます。修正は1箇所のみでversionのパラメーターを変更するだけです。trueの指定も必要ですので、指定していなかった場合はこれも追加します。opensearch.EngineVersion.OPENSEARCH_1_0,修正できたらdeployしましょう。マネジメントコンソールを見てみるとアップグレードを開始しています。1.0に変更されました。ダッシュボードにアクセスするとログイン画面が表示されました。KibanaのURLが_plugin/kibanaから_dashboardsに変わっていますが、以前のURLでもリダイレクトされるので問題はありません。問題なさそうです!まとめElasticsearchをOpenSearchに移行する機会があったので手順をまとめてみました。単なるアップグレードならワンクリックで済むのですがCDK(CFn)で管理していると少し手順が複雑でした。誰かにお役に立てば幸いです。