AWS CDK で Amazon RDS オプショングループに物理名を設定する方法

AWS CDKでAmazon RDSリソースを構築する際、「なぜParameterGroupでは名前を直接設定できるのに、OptionGroupではできないのか?」という疑問を持ったことはありませんか?

実際にコードを書いてみると、ParameterGroupではnameプロパティが使えるものの、OptionGroupでは同じようにはいきません。
統一された命名規則を適用したいプロジェクトでは、この違いが思わぬ障害となることがあります。

この記事では、AWS CDKの公式ドキュメントを参照しながら、OptionGroupで物理名を設定する方法について詳しく解説します。

問題:OptionGroupに名前設定プロパティが存在しない

AWS CDK公式ドキュメントのOptionGroupプロパティを確認すると、以下のプロパティのみが提供されています。

 

  • configurations? – オプションの設定
  • description? – オプショングループの説明
  • engine – データベースエンジン

注目すべき点は、ParameterGroupには存在するnameプロパティが、OptionGroupには存在しないということです。

OptionGroup(名前設定不可)

// ❌ OptionGroupには物理名を設定するプロパティが存在しない
const optionGroup = new rds.OptionGroup(this, 'RDS-OptionGroup', {
engine: rds.DatabaseInstanceEngine.mariaDb({
version: rds.MariaDbEngineVersion.VER_11_4_5
}),
configurations: [],
// optionGroupName: "..." // このプロパティは存在しない
// name: "..." // このプロパティも存在しない
});

この制限により、統一された命名規則を適用したい場合や、既存リソースとの互換性を保つ必要がある場合に問題となります。

CDK APIドキュメントとの対比

同じRDSリソースでも、ParameterGroupとOptionGroupで提供されているプロパティが異なります。

ParameterGroup(名前設定可能)

// ✅ ParameterGroupには name プロパティが存在
const parameterGroup = new rds.ParameterGroup(this, 'RDS-ParameterGroup', {
engine: rds.DatabaseInstanceEngine.mariaDb({
version: rds.MariaDbEngineVersion.VER_11_4_5
}),
parameters: {
character_set_server: 'utf8mb4',
character_set_client: 'utf8mb4',
collation_server: 'utf8mb4_unicode_ci',
},
name: 'ParameterGroup' // 直接指定可能
});

 

解決策:エスケープハッチを使用した物理名設定

この問題を解決するには、CDKのエスケープハッチ機能を使用してCloudFormationのAWS::RDS::OptionGroupリソースのOptionGroupNameプロパティを直接操作する必要があります。

/**
* オプショングループの作成
*/
const optionGroup = new rds.OptionGroup(this, 'RDS-OptionGroup', {
engine: rds.DatabaseInstanceEngine.mariaDb({
version: rds.MariaDbEngineVersion.VER_11_4_5
}),
configurations: [] // MariaDBでは通常空で問題なし
});
Tags.of(optionGroup).add('App', 'Cpe');

// エスケープハッチでオプショングループの物理名を設定
const cfnOptionGroup = optionGroup.node.defaultChild as rds.CfnOptionGroup;
cfnOptionGroup.addPropertyOverride('OptionGroupName', `OptionGroup`);

エスケープハッチの動作原理

  1. L2コンストラクトの作成: CDKの高レベルAPI(L2)でOptionGroupを作成
  2. L1コンストラクトへのアクセスnode.defaultChildでCloudFormationリソース(L1)にアクセス
  3. 型キャストrds.CfnOptionGroup型にキャストして適切な型情報を取得
  4. プロパティオーバーライドaddPropertyOverride()でCloudFormationプロパティを直接操作

なぜエスケープハッチが必要なのか

CDKの設計思想では、リソースの物理名は自動生成されることが推奨されています。しかし、実際のプロジェクトでは以下のような理由で明示的な命名が必要になることがあります。

  • 統一された命名規則の適用
  • 既存リソースとの互換性保持
  • 環境間でのリソース名の一貫性
  • 運用チームでのリソース識別の簡素化

ParameterGroupではnameプロパティが提供されているにも関わらず、OptionGroupでは提供されていないのは、CDKの実装が完全に統一されていないことを示しています。

まとめ

AWS CDKの公式ドキュメントで確認できる通り、RDSのOptionGroupには物理名を設定するプロパティが提供されていません。この制限を回避するには、エスケープハッチを使用してCloudFormationレベルでのプロパティ操作が必要です。

一見すると複雑に見えるかもしれませんが、一度パターンを理解すれば、他の似たような制約がある場合にも応用できる汎用的な解決策となります。実際のプロジェクトでは、本記事で紹介した方法を活用して、統一された命名規則を実現することができます。

著者について

技術だけじゃダメですか?

なべをフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSクラウド
シェアする
タイトルとURLをコピーしました