Определение таблиц, представлений и индексов в AWS CloudFormation

В AWS CloudFormation вы можете определить стек служб с помощью шаблона JSON/YAML. В частности, я использую кластеры Redshift и Aurora.

Шаблон позволяет вам определять административные свойства кластера, но, похоже, не существует четкого способа определения таблиц, представлений и индексов в кластере, чтобы при отправке обновлений стека БД автоматически обновляла схему как необходимо, аналогично тому, как он управляет обновлениями для полных стеков.

Есть ли способ управления схемой баз данных Redshift и Aurora в Cloud Formation?

2 ответа

Решение

Работайте в Progess!! Я обновлю, как только я уверен, что это работает!

Итак, сканирование документации, Github и час общения с AWS позволяют мне создавать родительский и дочерний стек ( примеры шаблонов). Родительский стек будет содержать тему SNS, подписку SNS и лямбда-функцию, которые контролируют дочерний стек.

Родительский стек может выглядеть так:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  StackEventTopic:
    Type: AWS::SNS::Topic

  StackEventEmailSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: email
      Endpoint: <your email>@gmail.com
      TopicArn:
        Ref: StackEventTopic

  StackEventLambdaSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: lambda
      Endpoint:
        Ref: StackEventHandler
      TopicArn:
        Ref: StackEventTopic

  StackEventHandler:
    Type: AWS::Lambda::Function
    Properties:
      ... configure your Lambda ...

  ChildStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      NotificationARNs:
        Ref: StackEventTopic
      TemplateURL: "s3 url for template YAML"

Amazon CloudFormation можно использовать для создания ресурсов AWS. Думайте об этом как о вызове стандартных API-интерфейсов AWS от вашего имени.

Если "содержимым" ресурса можно управлять с помощью вызова API AWS, CloudFormation также может управлять им. Например, создание таблицы в Amazon DynamoDB, корзины в Amazon S3 и потока в Amazon Kinesis. Это примеры услуг, предоставляемых в масштабах региона и полностью предоставляемых AWS.

В отличие от этого, когда служба должна быть развернута в зоне доступности, CloudFormation не имеет доступа. Примеры: экземпляры Amazon EC2, экземпляры Amazon RDS, кластеры Amazon Redshift, кластеры Amazon EMR и кластеры Amazon Elasticsearch. Все они работают поверх виртуальной машины, и "содержимое" не доступно через вызовы API AWS.

Единственный способ выполнить автоматические действия в таких системах - вызвать их напрямую. Например, установление соединения JDBC с базой данных, а затем передача некоторых команд SQL. Это можно сделать из приложения, запущенного на экземпляре Amazon EC2, из функции AWS Lambda или с любого компьютера, подключенного к Интернету.

Amazon CloudFormation может запускать пользовательские ресурсы AWS с лямбда-поддержкой. Эта лямбда-функция может затем выполнять практически любую функцию, но вы будете нести ответственность за ее кодирование.

Другие вопросы по тегам