Шаблоны AWS CloudFormation
Сервис AWS CloudFormation упрощает распределение ресурсов AWS и управление ими. Вы можете создавать шаблоны нужной архитектуры сервисов или приложений, и эти шаблоны будут использоваться AWS CloudFormation для быстрого и надежного выделения сервисов или приложений (именуемых «стеками»). Стеки можно легко обновлять или реплицировать по мере необходимости.
Образцы шаблонов помогут начать работу с AWS CloudFormation и быстро создать собственные шаблоны
Шаблоны и фрагменты шаблонов сервиса AWS
Просмотр образцов шаблонов сервиса AWS.
Просмотр образцов шаблонов по регионам AWS.
Платформы приложений
Шаблоны платформы приложений демонстрируют использование сервиса AWS CloudFormation для обеспечения работы таких популярных сред, как LAMP или Ruby on Rails.
Экспериментальные примеры и примеры сообщества
В AWS Labs вы найдете экспериментальные шаблоны AWS CloudFormation и другие проекты сотрудников и партнеров AWS.
Эталонная реализация
Краткое руководство по началу эталонного развертывания AWS содержит шаблоны AWS CloudFormation и подробные руководства по развертыванию для популярных ИТ-систем, таких как Microsoft Windows Server или SAP HANA.
Примеры решений
На примерах шаблонов решений вы увидите, как создать комплексное решение на основе широко используемых приложений. AWS не поддерживает и не обслуживает приложения в этих примерах. Примеры предназначены исключительно для того, чтобы продемонстрировать возможности сервиса AWS CloudFormation.
Цены на AWS CloudFormation
AWS CloudFormation предлагает простой и стабильный способ моделирования и распределения коллекции сопутствующих ресурсов AWS и сторонних ресурсов, а также управления ими за счет работы с инфраструктурой как с кодом. Вы платите только за то, чем пользуетесь, без минимальной оплаты или долгосрочных обязательств. За использование AWS CloudFormation с поставщиками ресурсов в следующих пространствах имен дополнительная плата не взимается: AWS::*, Alexa::*, Custom::*. В этих случаях вы платите за ресурсы AWS (например, инстансы Amazon Elastic Compute Cloud (EC2), балансировщики нагрузки Elastic Load Balancing и т. д.), созданные с использованием AWS CloudFormation, по тем же принципам, что и за созданные вручную аналогичные ресурсы.
При использовании поставщиков ресурсов с AWS CloudFormation вне указанных выше пространств имен, плата начисляется за каждую операцию обработчика. Операциями обработчика являются CREATE (СОЗДАНИЕ), UPDATE (ОБНОВЛЕНИЕ), DELETE (УДАЛЕНИЕ), READ (ЧТЕНИЕ) или LIST (ПОЛУЧЕНИЕ СПИСКА) ресурсов. Подробнее об операциях обработчика и поставщиках ресурсов см. в документации CloudFormation.
Калькулятор цен AWS
Посчитайте затраты на AWS CloudFormation и архитектуру в единой смете.
Создайте персонализированную смету прямо сейчас »
What is AWS CloudFormation?
AWS CloudFormation is a service that helps you model and set up your AWS resources so that you can spend less time managing those resources and more time focusing on your applications that run in AWS. You create a template that describes all the AWS resources that you want (like Amazon EC2 instances or Amazon RDS DB instances), and CloudFormation takes care of provisioning and configuring those resources for you. You don’t need to individually create and configure AWS resources and figure out what’s dependent on what; CloudFormation handles that. The following scenarios demonstrate how CloudFormation can help.
Simplify infrastructure management
For a scalable web application that also includes a backend database, you might use an Auto Scaling group, an Elastic Load Balancing load balancer, and an Amazon Relational Database Service database instance. You might use each individual service to provision these resources and after you create the resources, you would have to configure them to work together. All these tasks can add complexity and time before you even get your application up and running.
Instead, you can create a CloudFormation template or modify an existing one. A template describes all your resources and their properties. When you use that template to create a CloudFormation stack, CloudFormation provisions the Auto Scaling group, load balancer, and database for you. After the stack has been successfully created, your AWS resources are up and running. You can delete the stack just as easily, which deletes all the resources in the stack. By using CloudFormation, you easily manage a collection of resources as a single unit.
Quickly replicate your infrastructure
If your application requires additional availability, you might replicate it in multiple regions so that if one region becomes unavailable, your users can still use your application in other regions. The challenge in replicating your application is that it also requires you to replicate your resources. Not only do you need to record all the resources that your application requires, but you must also provision and configure those resources in each region.
Reuse your CloudFormation template to create your resources in a consistent and repeatable manner. To reuse your template, describe your resources once and then provision the same resources over and over in multiple regions.
Easily control and track changes to your infrastructure
In some cases, you might have underlying resources that you want to upgrade incrementally. For example, you might change to a higher performing instance type in your Auto Scaling launch configuration so that you can reduce the maximum number of instances in your Auto Scaling group. If problems occur after you complete the update, you might need to roll back your infrastructure to the original settings. To do this manually, you not only have to remember which resources were changed, you also have to know what the original settings were.
When you provision your infrastructure with CloudFormation, the CloudFormation template describes exactly what resources are provisioned and their settings. Because these templates are text files, you simply track differences in your templates to track changes to your infrastructure, similar to the way developers control revisions to source code. For example, you can use a version control system with your templates so that you know exactly what changes were made, who made them, and when. If at any point you need to reverse changes to your infrastructure, you can use a previous version of your template.
Related information
For more information about CloudFormation stacks and templates, see AWS CloudFormation concepts.
For an overview about how to use CloudFormation, see How does AWS CloudFormation work?.
Эти 6 уроков работы с cloudformation я усвоил на всю жизнь
Я начал работать с cloudformation 4 года назад. С тех пор я сломал много инфраструктур, даже те, которые уже были в продукции. Но каждый раз, когда я что-то портил, узнавал новое. Благодаря этому опыту, я поделюсь некоторыми из самых важных уроков, которые я выучил.
Урок 1: проверяйте изменения перед тем, как развернуть их
Я усвоил этот урок вскоре как начал работать с cloudformation. Не помню, что именно я тогда сломал, но точно помню, что использовал команду aws cloudformation update. Эта команда просто выкатывает шаблон без какой-либо проверки изменений, которые будут развернуты. Не думаю, что требуются объяснения, для чего нужно проверить все изменения перед тем, как развернуть их.
После этого провала, я сразу же изменил deployment pipeline, заменив команду update командой create-change-set
Когда набор изменений создан, он никак не влияет на существующий стек. В отличие от команды update, подход с использованием набора изменений не вызывает фактического развертывания. Вместо этого он создает список изменений, которые вы можете просмотреть до развертывания. Вы можете просмотреть изменения в интерфейсе консоли aws. Но если вы предпочитаете автоматизировать всё, что только можно, то проверяйте их в CLI:
Эта команда должна выдать вывод, похожий на следующий:
Обратите особое внимание на изменения, где Action это Replace, Delete или где ReplacementNeeded — True. Это самые опасные изменения и обычно они приводят к потере информации.
Когда изменения просмотрены, они могут быть развернуты
Урок 2: используйте stack policy для предотвращения замены или удаления ресурсов с сохранением состояния
Иногда простого просмотра изменений недостаточно. Все мы люди и все допускаем ошибки. Вскоре после того, как мы начали использовать наборы изменений, мой товарищ по команде неосознанно выполнил развертывание, что привело к обновлению базы данных. Ничего страшного не произошло, потому что это была среда тестирования.
Несмотря на то, что наши скрипты отображали список изменений и просили подтверждения, изменение Replace было пропущено, потому что список изменений был настолько большим, что не помещался на экране. И поскольку это было обычное обновление в среде тестирования, изменениям уделялось не так много внимания.
Есть ресурсы, которые вы никогда не захотите заменить или удалить. Это statefull сервисы, такие как экземпляр базы данных RDS или кластер elastichsearch и т. д. Было бы хорошо, если бы aws автоматически отказывал в развертывании, если выполняемая операция потребует удаления такого ресурса. К счастью, cloudformation имеет встроенный способ сделать это. Это называется stack policy, и об этом можно больше узнать в документации:
Урок 3: используйте UsePreviousValue, когда обновляете стек с секретными параметрами
Когда вы создаете сущность RDS mysql AWS требует от вас предоставить MasterUsername и MasterUserPassword. Поскольку лучше не хранить секреты в исходном коде, и я хотел автоматизировать абсолютно все, я реализовал «умный механизм», при котором перед развертыванием учетные данные будут получены из s3, и если учетные данные не будут найдены, новые учетные данные генерируются и хранятся в s3.
Затем эти учетные данные будут переданы в качестве параметров команде cloudformation create-change-set. Во время экспериментов со скриптом случилось, что соединение с s3 было потеряно, и мой «умный механизм» рассматривал его как сигнал для генерации новых учетных данных.
Если бы я начал использовать этот скрипт в рабочей среде, и проблема с подключением возникла бы снова, он бы обновил стек новыми учетными данными. В этом конкретном случае ничего плохого не произойдет. Однако я отказался от такого подхода и начал использовать другой, предоставляя учетные данные только один раз — при создании стека. И позже, когда стек потребует обновления, я бы вместо указания секретного значения параметра просто использовал UsePreviousValue=true:
Урок 4: используйте rollback configuration
Другая команда, с которой я работал, использовала функцию cloudformation, называемую rollback configuration. Я не встречался с ней раньше и быстро понял, что это сделает развертывание моих стеков еще круче. Теперь я использую каждый раз, когда разворачиваю свой код в lambda или ECS с помощью cloudformation.
Как это работает: вы указываете CloudWatch alarm arn в параметре —rollback-configuration, когда создаете набор изменений. Позже, когда вы выполните набор изменений, aws отслеживает alarm не менее одной минуты. Он откатывает развертывание обратно, если в течение этого времени alarm изменяет состояние на ALARM.
Ниже приведен пример отрывка шаблона cloudformation, в котором я создаю cloudwatch alarm, отслеживающий пользовательскую метрику облака в виде числа ошибок в журналах облака (метрика создается через MetricFilter):
Сейчас alarm может быть использован как rollback триггер при выполнении набора инструментов:
Урок 5: убедитесь, что вы разворачиваете самую последнюю версию шаблона
Легко развернуть не самую последнюю версию шаблона cloudformation, но это нанесет большой ущерб. Однажды так было у нас: разработчик не отправил последние изменения из Git и неосознанно развернул предыдущую версию стека. Это привело к простою приложения, которое использовало этот стек.
Что-то простое, например, добавление проверки, актуальна ли ветка, прежде чем выполнять развертывание, будет хорошо (если предположить, что git — это ваш инструмент контроля версий):
Урок 6: не изобретайте велосипед
Может показаться, что развертывание с cloudformation — это легко. Вам просто нужна куча скриптов bash, выполняющих команды aws cli.
4 года назад я начинал с простых скриптов, которые называют aws cloudformation create-stack командой. Вскоре скрипт уже не был простым. Каждый выученный урок делал скрипт все более и более сложным. Было не только сложно, но и с кучей багов.
Сейчас я работаю в небольшом ИТ-отделе. Опыт показывает, что у каждой команды есть свой способ развертывания стеков cloudformation. И это плохо. Было бы лучше, если бы все использовали единый подход. К счастью, существует множество инструментов, которые помогают развернуть и настроить стеки cloudformation.
Возможности AWS CloudFormation
AWS CloudFormation предлагает простой способ моделирования наборов связанных ресурсов AWS и сторонних ресурсов, их быстрого и единообразного выделения, а также управления ими на протяжении всего жизненного цикла за счет работы с инфраструктурой как с кодом. Шаблон CloudFormation описывает требуемые ресурсы и их зависимости, что позволяет запускать и настраивать их вместе в виде стека. Вместо того чтобы управлять ресурсами по отдельности, можно использовать шаблон для создания, обновления и удаления всего стека как единого целого. Управлять стеками и выделять их можно в нескольких аккаунтах и регионах AWS.
Возможность расширения
С помощью реестра AWS CloudFormation вы можете моделировать и распределять модули и ресурсы сторонних поставщиков, опубликованные партнерами сети APN (AWS Partner Network) и сообществом разработчиков. Среди прочего, партнеры APN предоставляют следующие средства для мониторинга, поддержки работы в команде, управления инцидентами и управления версиями: MongoDB, Datadog, Atlassian Opsgenie, JFrog, Trend Micro, Splunk, Aqua Security, FireEye, Sysdig, Snyk, Check Point, Spot от NetApp, Gremlin, Stackery и Iridium. Вы можете просматривать, искать и выбирать из коллекции готовые модули JFrog и Stackery, а также поддерживаемые в AWS Quick Starts.
Вы можете создать собственные поставщики ресурсов с помощью интерфейса командной строки AWS CloudFormation. Это инструмент с открытым исходным кодом, который ускоряет процесс разработки и предоставляет возможности локального тестирования и генерации кода.
Управление множеством аккаунтов и регионов
Наборы CloudFormation StackSet позволяют выделять стандартный набор ресурсов AWS для множества аккаунтов и регионов с помощью единого шаблона CloudFormation. Наборы StackSet безопасно автоматически выделяют, обновляют и удаляют стеки, независимо от того, где они находятся.
Создание шаблонов с помощью JSON / YAML
CloudFormation позволяет моделировать всю облачную инфраструктуру в текстовых файлах. Для описания ресурсов AWS, которые нужно создать и настроить, можно использовать декларативные языки с открытым кодом, например JSON или YAML. В инструменте AWS CloudFormation Designer реализовано визуальное проектирование, что поможет начать работу с шаблонами AWS CloudFormation.
Создание шаблонов с помощью привычных языков программирования
Разработка бессерверных приложений с помощью SAM
Разрабатывайте бессерверные приложения быстрее с помощью AWS Serverless Application Model (SAM) – платформы с открытым исходным кодом, предоставляющей краткий синтаксис для обозначения функций, API, баз данных и сопоставления источников событий. С помощью нескольких строк кода можно создать нужное приложение и смоделировать его с помощью YAML. Во время разработки SAM преобразует и расширяет синтаксис SAM, превращая его в синтаксис CloudFormation.
Средства контроля безопасности
CloudFormation автоматизирует безопасное и контролируемое выделение и обновление инфраструктуры. Здесь нет действий или элементов управления, которые требуется настраивать вручную, что может повлечь за собой ошибки. Возможность Rollback Triggers позволяет настроить оповещения CloudWatch, которые CloudFormation будет отслеживать при создании и обновлении стека. Если появится какое‑либо из этих оповещений, CloudFormation выполнит откат всего стека до состояния предыдущего стабильного развертывания.
С помощью наборов ChangeSet можно просматривать предлагаемые CloudFormation изменения, которые будут внесены в инфраструктуру и ресурсы приложения, до выполнения самой операции. В результате развертывание будет всегда идти строго по плану. CloudFormation определяет, какие действия необходимо выполнить, выделяет ресурсы наиболее эффективным образом и автоматически выполняет откат при обнаружении ошибок. Это действие возвращает инфраструктуру и ресурсы приложения в последнее стабильное состояние. Функция обнаружения несоответствий позволяет записывать изменения, вносимые в ресурсы вне CloudFormation, благодаря чему всегда можно видеть актуальное состояние инфраструктуры.
Предварительный просмотр изменений в среде
С помощью наборов AWS CloudFormation Change Set можно увидеть, каким образом вносимые в стек изменения могут повлиять на используемые ресурсы. Например, можно выяснить, не будут ли в результате изменений удалены или заменены критически важные ресурсы. CloudFormation внесет изменения в стек только после того, как соответствующий набор Change Set будет запущен.
Управление зависимостями
При управлении стеком AWS CloudFormation автоматически контролирует зависимости между ресурсами. Нет необходимости указывать определенный порядок создания, обновления и удаления ресурсов; при выполнении операций со стеками CloudFormation самостоятельно определяет последовательность действий для каждого ресурса.





