はじめに

猫大好きエンジニアの福田です。
抜け落ちた猫のひげを集めて、いつか筆を作りたいと思っている今日この頃です。

さて、ElastiCache for Redis を Multi-AZ (マルチAZ)で構築しようとした時に、少し詰まったため備忘として構築方法を残しておきます。

前提条件

  • 実装時のCDKバージョン:2.37.1

うまくいかないやり方

  • CfnCacheCluster を利用し azModecross-aznumCacheNodes2にする
new elasticache.CfnCacheCluster(this, 'MyCfnCacheCluser', {
  engine: "redis",
  engineVersion: "6.2",
  cacheNodeType: "cache.t4g.micro",
  azMode: "cross-az",
  numCacheNodes: 2,
  // ...
})

cdk deployすると以下のようなエラーが出ます。

18:23:22 | CREATE_FAILED        | AWS::ElastiCache::CacheCluster                  | MyCfnCacheCluser
NumCacheNodes should be 1 if engine is redis

エラーメッセージに従って、NumCacheNodesを1に変更すると、また別のエラーが出てしまいます。

18:28:35 | CREATE_FAILED        | AWS::ElastiCache::CacheCluster                  | MyCfnCacheCluser
Must specify at least two cache nodes in order to specify AZ Mode of 'cross-az'. (Service: AmazonElastiCache; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 68de40a8-8068-455d-8d22-0782f24c5
c00; Proxy: null)

そもそも azModeMemcached のみサポートされているようで、Redis は未対応でした。

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_elasticache.CfnCacheCluster.html#azmode
This parameter is only supported for Memcached clusters.

うまくいくやり方

new elasticache.CfnReplicationGroup(this, 'MyCfnReplicationGroup', {
  engine: "redis",
  engineVersion: "6.2",
  cacheNodeType: "cache.t4g.micro",
  multiAzEnabled: true,
  // ...
})

まとめ

すでにCfnCacheClusterazMode: 'single-az'で構築されていたRedisがあり、それをMulti-AZ対応すべく、安直にazMode: 'cross-az'と変更してもうまくいかなかったため、備忘として残させていただきました。
あらかじめMulti-AZ構成が見込まれている場合は「うまくいくやり方」で構築しておくと良いと思います。

ElastiCache for Redis で Multi-AZ を CDK で構築する方法をご紹介しました。
どなたかの参考になれば幸いです。