Рубрики
Uncategorized

Пример CloudFormation для Serverless RDS

Пример шаблона облачности, который можно использовать для создания кластера RDS без сервера. Теги с DEVOPS, AWS, базой данных.

Я обновил свой Справочный репо Cloudbation Refo на Github В последнее время, и я хотел поднять одну из недавно добавленных шаблонов. Этот шаблон Создает экземпляр RDS без сервера, генерирует пароль для этого экземпляра, добавляет секрет для менеджера Secrets, а также позволяет встроить экземпляр существующего моментального снижения. Я также взял на себя захват экрана мне построения и отладки этого шаблона, который является Доступно на YouTube Если вы хотите посмотреть, как я его построил.

Начну, упомянув, что в этом шаблоне есть условия, которые определяют, будут ли запущены новые экземпляры баз данных или если эти экземпляры будут основаны на снимок ( Я рекомендую смотреть на шаблон, если это запутано ), Но я также включу фрагмент, который устанавливает эти условия.

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]]

Создание пароля для экземпляра и добавление секретного менеджера Secrets выполняется следующей частью шаблона.

Credentials:
  Condition: isNewDb
  DeletionPolicy: Retain
  Type: AWS::SecretsManager::Secret
  Properties:
    GenerateSecretString:
      SecretStringTemplate: '{"username": "admin"}'
      GenerateStringKey: "password"
      PasswordLength: 16
      ExcludeCharacters: '"@/\'

Это похожий фрагмент к чему можно найти в упоминании AWS. Во-первых, я буду напоминать вам, что в этом шаблоне есть условия, которые определяют, будут ли будут запущены совершенно новые экземпляры базы данных или если эти экземпляры будут основаны на снимке. Если экземпляры основаны на снимок, они будут использовать имя пользователя и пароль, который был указан во время создания кластера RDS. По этой причине я сохраняю секреты, созданные с новыми кластерами с Состояние: isnewdb и Деленполиция: Сохранить в случае удаления их стеков. Если стеки будут удалены, это позволяет создавать новый стек, который запустит экземпляры с использованием снимка и учетных данных старой базы данных.

На самом деле генерация пароля — это просто случайно сгенерированная строка, которая позже наносится RDS для использования в качестве пароля. SecretStringTemplate Часть — это базовое значение для секрета, и сгенерированная строка задана в качестве значения для ключа с именем пароль Как обозначены 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 Snapshot, если он был предоставлен пользователем. Наконец, есть AWS:: SecretsManager:: Secrettargetatchment Ресурс, который делает какую-то крутую магию. Этот ресурс принимает в AWS:: RDS:: dbcluster и AWS:: SecretsManager:: Secret и добавляет соответствующую информацию базы данных в секрет, как хост, порт и двигатель.

Хотя этот шаблон не является полным планом восстановления данных, он может помочь в щепоте, по крайней мере, имея все, что настроит, чтобы принять снимок и восстановить кластер базы данных, если стек каким-то образом удален, или необходимо построить копию.

Оригинал: «https://dev.to/thomasstep/cloudformation-for-serverless-rds-1lm3»