Я обновил свой Справочный репо 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»