Определение таблиц, представлений и индексов в 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 с лямбда-поддержкой. Эта лямбда-функция может затем выполнять практически любую функцию, но вы будете нести ответственность за ее кодирование.