サーバレスRDSに対するCloudFormationの例


更新しましたCloudFormation reference repo on GitHub 最近、新しく追加されたテンプレートの1つを持ち上げたいと思いました.This template ServerlessなRDSインスタンスを構築し、そのインスタンスのパスワードを生成し、秘密マネージャに秘密を追加し、既存のスナップショットからインスタンスを構築することができます.私はまた、私が構築し、私はそれを構築した見て気にしている場合は、テンプレートのデバッグ画面のキャプチャを取った.
私は、この新しいテンプレートが起動されるか、それらのインスタンスがスナップショットに基づいているかどうか決定するこのテンプレートの条件があることに言及し始めます.I recommend looking at the template if this is confusing ), しかし、これらの条件を設定するスニペットも含まれます.
Parameters:
  SnapshotArn:
    Type: String
    Description: Snapshot to build DB off of; leave as 'none' if new DB
    Default: none

Conditions:
  isNewDb: !Equals [!Ref SnapshotArn, none]

  isSnapshotDb:
    !Not [!Equals [!Ref SnapshotArn, none]]
インスタンスのパスワードを生成し、秘密マネージャに秘密を追加するには、テンプレートの次の部分によって行われます.
Credentials:
  Condition: isNewDb
  DeletionPolicy: Retain
  Type: AWS::SecretsManager::Secret
  Properties:
    GenerateSecretString:
      SecretStringTemplate: '{"username": "admin"}'
      GenerateStringKey: "password"
      PasswordLength: 16
      ExcludeCharacters: '"@/\'
これはAWS参照で見つけることができる類似した断片です.まず最初に、新しいテンプレートのインスタンスが起動されるか、スナップショットに基づいているかどうかを決定するこのテンプレートの条件があることをあなたに思い出させます.インスタンスがスナップショットに基づいている場合、RDSクラスタの作成時に指定されたマスターユーザー名とパスワードを使用します.その理由で、私は秘密を新しいクラスタで作成して保持していますCondition: isNewDb and DeletionPolicy: Retain スタックが削除された場合.スタックを削除すると、古いデータベースのスナップショットと資格情報を使用してインスタンスを起動する新しいスタックを作成できます.
事実上、パスワード生成は単にパスワードとして使用するためにRDSによって後で参照されるランダムに生成されたストリングです.The SecretStringTemplate 部分は秘密のベースライン値です、そして、生成されたストリングは名前でキーの値として与えられますpassword 示すようにGenerateStringKey . しかし、これだけでは生成されません.どのようなパスワードを行うには、のプロパティから次のスニペットですAWS::RDS::DBCluster リソース定義.
MasterUserPassword:
  !If
    - isNewDb
    - !Join
      - ''
      -
        - '{{resolve:secretsmanager:'
        - !Ref Credentials
        - ':SecretString:password}}'
    - !Ref AWS::NoValue
現在、パスワードとして使用される生成されたストリングを参照しています.条件isNewDb 存在するので存在するAWS::RDS::DBCluster スナップショットを持つリソースは、マスター資格情報プロパティが存在しないことを要求します.私のテンプレートのスナップショットプロパティは、次のスニペットのように見えます.
SnapshotIdentifier:
  !If
    - isSnapshotDb
    - !Ref SnapshotArn
    - !Ref AWS::NoValue
これはユーザが提供した場合、スナップショットのarnを参照します.最後に、あるAWS::SecretsManager::SecretTargetAttachment いくつかのクールな魔法を行うリソース.このリソースはAWS::RDS::DBCluster and AWS::SecretsManager::Secret そして、ホスト、ポート、およびエンジンのような秘密に関連するデータベース情報を加えます.
このテンプレートは完全なデータ回復計画ではありませんが、少なくともスタックを受け入れるために設定されているすべてのものを持っていて、スタックがどうにか削除されるか、またはコピーが構築される必要があるならば、データベースクラスタを再構築することによって、ピンチで助けることができます.