Показаны сообщения с ярлыком cfn. Показать все сообщения
Показаны сообщения с ярлыком cfn. Показать все сообщения

понедельник, 28 сентября 2020 г.

AWS CFN: несколько полезных ссылок для изучения CFN

7 Awesome CloudFormation Hacks

19 Best Practices for Creating Amazon Cloud Formation Templates

Continuous Delivery in the Cloud: CloudFormation

Эти 6 уроков работы с cloudformation я усвоил на всю жизнь

AWS CFN: замечание про последовательную выкатку стэка

 Если нам нужно выкатывать набор инстансов, то там можно указать DependsOn и сборка будет ждать готовности инстанса. Но в случае с ASG всё не так просто.

Во-первых, DependsOn на ASG - продолжит развёртывание по готовности самого ASG, но не его машин.

Во-вторых, повесить DependsOn на отдельный инстанс группы или их набор - невозможно напрямую.

В третьих, есть механизмы CreationPolicy и UpdatePolicy (которые так же нужно вешать на инстанс, чтобы стек ждал готовности ноды) и через /opt/aws/bin/cfn-signal на ASG выставлять что нода готова.

Можно сделать внешний счётчик через WaitCondition + WaitConditionHandle.

У него есть нюанс. Если в случае *Policy используется формат --resource (ASGName), то в случае WaitCondition - такой формат не работает! Мы должны применять форму cfn-signal -e 0 !Ref OurWaitCondition, ну или использовать curl. У меня ушло много времени, чтобы найти этот "особый" формат. И да, если мы используем runcmd с блоком Sub - то вместо !Ref надо использовать  формат ${OurWaitCondition}.

Второй нюанс: Anytime you add a WaitCondition resource during a stack update or update a resource with a wait condition, you must associate the wait condition with a new WaitConditionHandle resource. Do not reuse an old wait condition handle that has already been defined in the template. If you reuse a wait condition handle, the wait condition might evaluate old signals from a previous create or update stack command.

И напоследок: Updates are not supported for this resource.


И ещё линки

https://github.com/awslabs/aws-cloudformation-templates/blob/master/aws/services/AutoScaling/AutoScalingRollingUpdates.yaml

https://aws.amazon.com/ru/blogs/mt/signaling-aws-cloudformation-waitconditions-using-aws-privatelink/

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html

понедельник, 7 сентября 2020 г.

aws: ещё один графический дизайнер стэков

https://www.stackery.io/


Как я понимаю, в отличие от штатного убогого, тут сразу получаем автогенерацию шаблона. В общем, можно поиграться и посмотреть. Но советую использовать такие приложения или для быстрого прототипирования, или для самообразования. Тот случай, когда разобраться в итоговом шаблоне - обязательно.

Одно но: оно платное, хотя есть Developer версия,  1 seat, 1 linked AWS account, 6 active stacks

AWS CFN: Fixing UPDATE_ROLLBACK_FAILED

https://harrisonmilbradt.com/blog/fixing-update_rollback_failed-in-serverless/

Actions > Continue Update Rollback и там есть пропуск сломанных шагов. Также есть консольная версия

aws cloudformation continue-update-rollback --stack-name my-stack --resources-to-skip failed-resource1 failed-resource2

среда, 3 июня 2020 г.

CloudFormation, ASG and Route53

Иногда нужно добавлять домены в Route53 при создании серверов. Для обычных EC2::Instance просто добавляем столько же секций, сколько нам нужно доменов. Всё усложняется, когда нужно делать динамические имена для ASG (Auto Scale Groups).
Вариант "в лоб": делим единый ASG на столько, сколько у нас инстансов, и уже к каждому привязываем конкретный поддомен и всё что нужно. Да, это дублирование как самих ASG, так и связанных LaunchConfiguration, потому что теперь они как минимум содержат номер, поддомен или ещё что-либо. То есть получаем по сути обычный EC::Instance, с небольщим отличием - самовосстановлением, если машина полностью ломается то она будет пересоздана автоматически.
Есть вариант через CloudMap, там уже есть некая гибкость, но нужно внимательно изучить
Есть и такое
https://underthehood.meltwater.com/blog/2020/02/07/dynamic-route53-records-for-aws-auto-scaling-groups-with-terraform/
но тоже надо смотреть, как оно внутри устроено и работает.
Далее, можно в UserData какими-то БД, внешними арбитрами итд вычислять нужные имена и далее через aws route53 манипулировать
Также есть Macro
https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/Count

пятница, 20 марта 2020 г.

CloudFormation для VPC Peering

Продолжение https://dragonflybsd.blogspot.com/2020/01/amazon-vpc.html, при настройке через CloudFormation

Казалось бы, настройка элементарна
  VPCPeeringWithMain:
    Type: AWS::EC2::VPCPeeringConnection
    Properties:
      VpcId:
        Fn::ImportValue: !Sub "${AWS::StackName}-VPC"
      PeerVpcId: !Ref VPCMainID

Но нет. Элементарно ловится ошибка
VpcPeeringConnection failed to stabilize. State: [failed]
Открываем доку
https://aws.amazon.com/ru/premiumsupport/knowledge-center/cloudformation-vpc-peering-error/
и начинаем читать. Оказывается, там много подводных камней. Если пирятся разные аккаунты - нужно озаботиться ролями, если разные регионы - читаем
The Region code for the accepter VPC, if the accepter VPC is located in a Region other than the Region in which you make the request.
и так далее, и разумеется, в основной доке про это явно - нет.

И это всё в дополнение к

вторник, 3 марта 2020 г.

aws: Конвертируем существущую инфру в cloudformation template

Using CloudFormer (Beta) to Create AWS CloudFormation Templates from Existing AWS Resources

Important
CloudFormer is currently in beta. We recommend against utilizing it in critical or production environments.

Вкратце. Через CloudFormation создаём новый стэк, examples, CloudFormer. Далее будет создана виртуалка (которая тарифицируется, да, t2.medium), задаём ей логин-пароль, подключаемся. Выбираем что вносим в шаблон, на выходе получаем шаблон.

вторник, 18 февраля 2020 г.

aws: Load Balancer Types

Elastic Load Balancing supports the following types of load balancers: Application Load Balancers, Network Load Balancers, and Classic Load Balancers. Amazon ECS services can use either type of load balancer. Application Load Balancers are used to route HTTP/HTTPS (or Layer 7) traffic. Network Load Balancers and Classic Load Balancers are used to route TCP (or Layer 4) traffic.

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/load-balancer-types.html (и вообще лучше ознакомиться, там подходы разные)
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/

Когда нам нужно обрабатывать http(s) трафик, лучше всего подходит application LB. Чем он лучше классического:
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html#application-load-balancer-benefits

Моменты, о которых надо помнить
- Требуется минимум 2 AZ. Даже если данные есть только в одной, остальные должны просто быть. А вот 1 сети в каждой AZ будет достаточно.
- Не забыть про security groups
- Желательно добавить Health Checks для сервера

В случае с CloudFormation можно начать отсюда
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html
Не путать с почти такой же страницей, но без V2 - так как это classic lb

You can specify the AvailabilityZones or Subnets property, but not both.

четверг, 16 января 2020 г.

CloudFormation и установка ПО после настройки инфраструктуры


Все действия производятся в блоке UserData, так или иначе. А теперь по порядку, что там может быть

Обязательно начинаем с док
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html#cfn-ec2-instance-userdata

1) Простой баш скрипт где всё нужное. Быстро, но со своими особенностями вроде сложности обработки ошибок.
https://github.com/hashicorp/consul-ec2-auto-join-example/blob/master/templates/consul.sh.tpl#L5

понедельник, 13 января 2020 г.

Очень быстрое введение в CloudFormation

CloudFormation, он же cfn - система для быстрой настройки инфрастуктуры, более убогая версия TerraForm'a который умеет не только амазон. Но иногда нужен именно он.
Вариант первый: настройка через веб
https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-walkthrough-createbasicwebserver.html
Без инструкции будет тоже непонятно - есть какая-то форма, куда можно перетягивать квадратики, стрелочки... Поэтому читать.

Вариант второй - писать конфиг с нуля, руками.
Конфиг файл - файл yaml или json формата и состоит из 3 типовых частей:

  • Parameters
  • Resources
  • Output
(это основные, вообще их чуть больше: Description, Metadata, Mappings, Conditions, Transform)