AWS CloudFormationで管理しているAmazon Elasticsearch Serviceをダウンタイムなしでアップグレードする
こんにちは。サービスグループの武田です。
AWSが提供している全文検索サービスであるAmazon Elasticsearch Service(以下、ESS)はダウンタイムなしでのアップグレードをサポートしています。
手動でアップグレードする場合はこれでいいのですが、AWS CloudFormation(以下、CFn)で管理しているESSのアップグレードは知見がありませんでした。今回その方法を調べる機会がありました。
UpdatePolicyを指定すれば可能
まずは結論から。AWS::Elasticsearch::Domain
で定義しているリソースにUpdatePolicy
が指定できます。これにEnableVersionUpgrade: true
を指定すればダウンタイムなしでのアップグレードが可能です。
次のように定義してあるESSのリソースを例にします。
Domain: Type: AWS::Elasticsearch::Domain Properties: ElasticsearchVersion: '7.1'
これを次のように修正するだけでOKです。
Domain: Type: AWS::Elasticsearch::Domain Properties: ElasticsearchVersion: '7.4' UpdatePolicy: EnableVersionUpgrade: true
やってみた
修正したCFnテンプレートでスタックを更新してみます。するとアップグレードが始まります。
ドキュメントにも記載がありますが負荷の少ない時間帯に実施するのがよいです。一時的にCPUの負荷が上がっています。
短時間ですがKibanaにアクセスできないタイミングがありました。Webのエンドポイントは問題ありませんでした。
30分くらい待っていると無事にアップグレードが完了しました。
おまけ:CDKの場合
CDKでESSを管理している場合も同じようにUpdatePolicy
を指定することになりますが、指定方法が最初はよくわかりませんでした。
const domain = new CfnDomain(this, 'Domain', { elasticsearchVersion: '7.1', });
次のように指定すれば大丈夫でした。
const domain = new CfnDomain(this, 'Domain', { elasticsearchVersion: '7.4', }); domain.cfnOptions.updatePolicy = { enableVersionUpgrade: true, };
まとめ
マネージドサービスは便利ですね!