AWS CodeDeploy с автоматическим масштабированием Шаблоны запуска с сочетанием спотовых инстансов и инстансов по требованию

Можно настроить группу автомасштабирования для использования шаблона запуска вместо конфигурации запуска. Я хочу использовать его, потому что когда я настраиваю группу автомасштабирования с помощью Launch Configuration, я не могу установить политику смешанных экземпляров (ondemand + spot instance).

Я создал шаблон запуска (имя test) с такой конфигурацией:

    AMI Ubuntu 16, 
    some security groups and IAM Role with EC2, AutoScaling and CodeDeploy full access 
    and all other settings in default *Not specified* state.

    Launch Template ID lt-0e1111
    Default Version Number 1
    Launch Template Name test
    Owner arn:aws:iam::11111111:user/itsp
    Version  1 (Default)
    Name  test
    Created by arn:aws:iam::179961111910:user/itsp
    Description Not specified
    Date Created February 8, 2019 at 12:47:54 AM UTC+3
    AMI ID ami-0bf1924ed30c48a6a
    Availability Zone Not specified
    Security Groups Not specified
    Instance Type t2.nano
    Key pair name itsp
    Security Group Ids sg-07e746cf0e4935b84,sg-0a45f7e6ac321614d,sg-27bf6d4b

    Advanced Details:
    Purchasing option Not specified
    Spot request type Not specified
    Spot interruption behavior Not specified
    IAM Instance Profile Not specified
    Stop - Hibernate behavior Not specified
    Monitoring Not specified
    EBS-optimized instance Not specified
    Tenancy Host ID Not specified
    RAM Disk ID Not specified
    User Data Not specified
    Elastic Inference Accelerator Not specified
    Maximum Spot price Not specified
    Spot expiry date -
    Spot block duration Not specified
    Shutdown behavior Not specified
    Termination Protection Not specified
    Placement Group Name Not specified
    Tenancy Not specified
    Tenancy Affinity Not specified
    Kernel ID Not specified
    Elastic Graphics Not specified

Затем я создаю группу AutoScaling с этим шаблоном запуска. Вот моя конфигурация группы автомасштабирования:

Launch Template test
Launch Template Version 1
Launch Template Description -
Instance Types -
Spot Diversity 0
Optional On-Demand Base 0
On-Demand Percentage 0%
Desired Capacity 1 
Min 1 
Max 1
Availability Zone(s) eu-central-1a
Subnet(s) subnet-53075e38
Classic Load Balancers -
Target Groups -
Health Check Type EC2
Health Check Grace Period 300
Instance Protection - 
Termination Policies Default
Suspended Processes -
Placement Groups -
Default Cooldown 300
Enabled Metrics -
Creation Time Fri Feb 08 00:50:16 GMT+300 2019
Service-Linked Role arn:aws:iam::11111111111:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling

Такая конфигурация появляется, когда я выбираю

*Fleet Composition - Adhere to the launch template
The launch template determines the instance type and purchase option (On-Demand or Spot).* 

вариант и моя конфигурация шаблона запуска описаны выше.

Так что в моей группе автомасштабирования нет пятен.

Затем я настраиваю приложение CodeDeploy Application и DeploymentGroup DG_TEST внутри него с такой конфигурацией:

Deployment type Blue/green
Service role ARN arn:aws:iam::11111111111111:role/CodeDeployRole
Deployment configuration CodeDeployDefault.AllAtOnce
Rollback enabled -
Environment configuration: Amazon EC2 Auto Scaling groups -> Name 'test'

Хорошо, после того, как все настроено, я установил количество желаемых экземпляров равным 1 в моей группе Autoscaling, и новые экземпляры по требованию появятся в моей «тестовой» группе.

Я начинаю сине-зеленое развертывание с помощью команды AWS CLI:

aws deploy create-deployment --application-name Application --s3-location bucket=codedeploybucket,key=application,bundleType=zip --deployment-group-name DG_TEST

И я вижу, что в моем зеленом флоте появляется новая группа автомасштабирования с тем же шаблоном запуска.

Итак, мы просто проверили, что все наши сервисы работают должным образом.


Теперь я хочу немного подправить конфигурацию моей группы автомасштабирования, чтобы смешивать в ней экземпляры ondemand и spot:

Fleet Composition - Combine purchase options and instances
Choose a mix of On-Demand Instances and Spot Instances and multiple instance types. Spot Instances are automatically launched at the lowest price available.
Instance Types:
t2.nano (1vCPUs, 0.5GiB)
t2.small (1vCPUs, 2GiB)
t2.micro (1vCPUs, 1GiB)
Maximum Spot Price - Use default (recommended)
Spot Allocation Strategy - Diversify Spot Instances across your 2 lowest priced instance types per Availability Zone
Optional On-Demand Base - Designate the first 0 instances as On-Demand
On-Demand Percentage 50% On-Demand and 50% Spot
Desired Capacity 1
Min 1
Max 1

Я сохраняю его и пробую ту же команду AWS CLI

aws deploy create-deployment --application-name Application --s3-location bucket=codedeploybucket,key=application,bundleType=zip --deployment-group-name DG_TEST

И теперь у меня произошла ошибка развертывания с таким комментарием:

The following validation error occurred: Valid requests must contain either LaunchTemplate, LaunchConfigurationName, InstanceId or MixedInstancesPolicy parameter. (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: 11111114-2b2b-11e9-93b7-11111111111)

Еще одна странность заключается в том, что если я настрою свой Launch Templae на использование только спотов:

Launch Template ID lt-00dc4c187d1111159
Default Version Number   1
Launch Template Name test2
Owner
arn:aws:iam::179961111910:user/itsp
Version     1 (Default)
Name  test2
Created by  arn:aws:iam::179961111910:user/itsp
Description Not specified
Date Created    February 8, 2019 at 1:14:13 AM UTC+3
AMI ID    ami-0bf1924ed30c48a6a
Availability Zone    Not specified
Security Groups   Not specified
Instance Type    t2.micro
Key pair name    itsp
Security Group Ids    sg-0a45f7e6ac321614d,sg-07e746cf0e4935b84,sg-27bf6d4b

Advanced details
Purchasing option    spot
Spot request type    one-time
Spot interruption behavior    Not specified
IAM Instance Profile    CodeDeployRole (arn:aws:iam::1111111111:instance-profile/CodeDeployRole)
Stop - Hibernate behavior    Not specified
Monitoring    Not specified
EBS-optimized instance   Not specified
Tenancy Host ID    Not specified
RAM Disk ID    Not specified
User Data    Not specified
Elastic Inference Accelerator    Not specified
Maximum Spot price    Not specified
Spot expiry date    -
Spot block duration    Not specified
Shutdown behavior    Not specified
Termination Protection    Not specified
Placement Group Name    Not specified
Tenancy    Not specified
Tenancy Affinity    Not specified
Kernel ID    Not specified
Elastic Graphics    Not specified

и используйте эту опцию в моей группе автомасштабирования:

*Fleet Composition - Adhere to the launch template
    The launch template determines the instance type and purchase option (On-Demand or Spot).* 

Затем после той же команды развертывания я получаю еще одну ошибку в CodeDeploy (причина неудачного развертывания):

The IAM role arn:aws:iam::179966034910:role/CodeDeployRole does not give you permission to perform operations in the following AWS service: AmazonAutoScaling. Contact your AWS administrator if you need help. If you are an AWS administrator, you can grant permissions to your users or groups by creating IAM policies.

И это определенно не так, потому что моя роль в CodeDeploy имеет полный доступ к EC2, Autoscaling и CodeDeploy.


Я что-то делаю не так или это ошибки? Как я могу настроить смешанную группу автомасштабирования (ondemand + спотовые экземпляры) с развертыванием кода с использованием шаблонов запуска? Заранее спасибо!


person Dzmitry Dranitski    schedule 07.02.2019    source источник


Ответы (1)


Я столкнулся с аналогичной проблемой при работе с CodeDeploy и LaunchTemplates.
Похоже, что LaunchTemplates по-прежнему не поддерживаются CodeDeploy.

Мы должны придерживаться LaunchConfigurations. Они по-прежнему не поддерживают управление версиями, но по большей части они почти одинаковы: /

Я не смог найти, где AWS задокументировал эту небольшую проблему несовместимости при переносе LaunchConfigurations в LaunchTemplates ... но смог найти здесь подробнее.

Sheers!

person Escobar    schedule 15.02.2019