Example #1
0
    def test_allow_placement_strategy_constraint(self):
        task_definition = ecs.TaskDefinition(
            "mytaskdef",
            ContainerDefinitions=[
                ecs.ContainerDefinition(
                    Image="myimage",
                    Memory="300",
                    Name="mycontainer",
                )
            ],
            Volumes=[
                ecs.Volume(Name="my-vol"),
            ],
        )
        ecs_service = ecs.Service(
            'Service',
            Cluster='cluster',
            DesiredCount=2,
            PlacementStrategies=[
                ecs.PlacementStrategy(
                    Type="random",
                )
            ],
            PlacementConstraints=[
                ecs.PlacementConstraint(
                    Type="distinctInstance",
                )
            ],
            TaskDefinition=Ref(task_definition),
        )

        ecs_service.to_dict()
Example #2
0
    def test_fargate_launch_type(self):
        task_definition = ecs.TaskDefinition(
            "mytaskdef",
            ContainerDefinitions=[
                ecs.ContainerDefinition(
                    Image="myimage",
                    Memory="300",
                    Name="mycontainer",
                )
            ],
            Volumes=[
                ecs.Volume(Name="my-vol"),
            ],
        )
        ecs_service = ecs.Service(
            'Service',
            Cluster='cluster',
            DesiredCount=2,
            PlacementStrategies=[ecs.PlacementStrategy(Type="random", )],
            LaunchType='FARGATE',
            NetworkConfiguration=ecs.NetworkConfiguration(
                AwsVpcConfiguration=ecs.AwsVpcConfiguration(
                    AssignPublicIp='DISABLED',
                    SecurityGroups=['sg-1234'],
                    Subnets=['subnet-1234'])),
            PlacementConstraints=[
                ecs.PlacementConstraint(Type="distinctInstance", )
            ],
            TaskDefinition=Ref(task_definition),
        )

        ecs_service.to_dict()
Example #3
0
    def __init__(self, title, scheme, **kwargs):
        super().__init__(title, **kwargs)

        self.Cluster = get_expvalue('Cluster', 'ClusterStack')

        # DAEMON MODE DO NOT SUPPORT DESIRED OR PLACEMENT STRATEGIES,
        # IS SIMPLY ONE TASK FOR CONTAINER INSTANCE
        if cfg.SchedulingStrategy == 'REPLICA':
            self.DesiredCount = get_endvalue('CapacityDesired')
            self.DeploymentConfiguration = ecs.DeploymentConfiguration(
                MaximumPercent=get_endvalue(
                    'DeploymentConfigurationMaximumPercent'),
                MinimumHealthyPercent=get_endvalue(
                    'DeploymentConfigurationMinimumHealthyPercent'),
            )
            self.PlacementStrategies = If(
                'LaunchTypeFarGate',
                Ref('AWS::NoValue'),
                [
                    # ecs.PlacementStrategy(
                    #    Type='spread',
                    #    Field='attribute:ecs.availability-zone'
                    # ),
                    ecs.PlacementStrategy(
                        Type='spread',
                        Field='instanceId'
                    )
                ]
            )
        elif cfg.SchedulingStrategy == 'DAEMON':
            self.SchedulingStrategy = 'DAEMON'

        self.LaunchType = get_endvalue('LaunchType')

        if cfg.HealthCheckGracePeriodSeconds != 0:
            self.HealthCheckGracePeriodSeconds = (
                get_endvalue('HealthCheckGracePeriodSeconds'))

        # self.PlatformVersion = 'LATEST'

        if cfg.LoadBalancerApplication:
            self.LoadBalancers = []
            self.Role = If(
                'NetworkModeAwsVpc',
                Ref('AWS::NoValue'),
                get_expvalue('RoleECSService')
            )
            # When creating a service that specifies multiple target groups,
            # the Amazon ECS service-linked role must be created.
            # The role is created by omitting the Role property
            # in AWS CloudFormation
            if (cfg.LoadBalancerApplicationExternal and
                    cfg.LoadBalancerApplicationInternal):
                self.Role = Ref('AWS::NoValue')

        self.TaskDefinition = Ref('TaskDefinition')
Example #4
0
 - Spread to several AZs for HA
 - Binpack to minimize number of required hosts per AZ
"""
service = t.add_resource(
    ecs.Service(
        "Service",
        Cluster=ImportValue(Sub("${EcsStack}-Cluster")),
        DependsOn=service_role,
        DesiredCount=Ref(autoscaling_min),
        LoadBalancers=[
            ecs.LoadBalancer(ContainerName=Ref(container_name),
                             ContainerPort=Ref(container_port),
                             TargetGroupArn=Ref(target_group)),
        ],
        PlacementStrategies=[
            ecs.PlacementStrategy(Type="spread",
                                  Field="attribute:ecs.availability-zone"),
            ecs.PlacementStrategy(Type="binpack", Field="memory"),
        ],
        Role=Ref(service_role),
        TaskDefinition=Ref(task_definition),
        DeploymentConfiguration=ecs.DeploymentConfiguration(
            MaximumPercent="100", MinimumHealthyPercent="50"),
        PlacementConstraints=[
            ecs.PlacementConstraint(Type="distinctInstance")
        ],
    ))
"""
Make the service a ScalableTarget
"""
# scalable_target = t.add_resource(applicationautoscaling.ScalableTarget(
#     'ScalableTarget',