Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fixing AWS with AWS

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Fixing AWS with AWS

Avatar for Mike Fiedler

Mike Fiedler

January 18, 2018
Tweet

More Decks by Mike Fiedler

Other Decks in Technology

Transcript

  1. One Task Per Host - ECS? • Run on Boot

    via user-data ◦ Unmanaged task, doesn’t restart ◦ Update requires host replacement • Placement Strategies/Constraints ◦ distinctInstance / memberOf ◦ Count mismatch ◦ Doesn’t follow Autoscaling
  2. AWS Lambda Handler (trimmed) def lambda_handler(event, context): service = os.getenv('ECS_SERVICE_ARN')

    cluster = event["detail"]["clusterArn"] adjust_service_desired_count( ecs_client(), cluster, service )
  3. def adjust_service_desired_count(ecs_client, cluster, service): running_service = ecs_client.describe_services(cluster=cluster, services=[service]) desired_task_count =

    running_service["services"][0]["desiredCount"] clusters = ecs_client.describe_clusters(clusters=[cluster]) registered_instances = clusters["clusters"][0]["registeredContainerInstancesCount"] if desired_task_count != registered_instances: response = ecs_client.update_service( cluster=cluster, service=service, desiredCount=registered_instances, ) return response