Sha256: 62d16789c58673c8ff3c86e40dcf6c676c35d9a67ae1301b54ba135484e225e9

Contents?: true

Size: 1.61 KB

Versions: 29

Compression:

Stored size: 1.61 KB

Contents

module Ufo::Cfn::Stack::Builder::Resources::Scaling
  class Target < Base
    def build
      return unless autoscaling_enabled?

      text =<<~EOL
        Type: AWS::ApplicationAutoScaling::ScalableTarget
        DependsOn: EcsService
        Properties:
          RoleARN: !GetAtt ScalingRole.Arn
          ResourceId: !Join
            - "/"
            - [service, #{@cluster}, !GetAtt [EcsService, Name]]
          ServiceNamespace: ecs
          ScalableDimension: ecs:service:DesiredCount
          MinCapacity: #{min_capacity}
          MaxCapacity: #{max_capacity}
      EOL
      Ufo::Yaml.load(text).deep_symbolize_keys
    end

  private
    def min_capacity
      return autoscaling.min_capacity if vars[:new_stack] || !autoscaling.manual_changes.retain
      scalable_target ? scalable_target.min_capacity : autoscaling.min_capacity
    end

    def max_capacity
      return autoscaling.max_capacity if vars[:new_stack] || !autoscaling.manual_changes.retain
      scalable_target ? scalable_target.max_capacity : autoscaling.max_capacity
    end

    def scalable_target
      resources = stack_resources(vars[:stack_name])
      return unless resources
      ecs_service = resources.find { |r| r.logical_resource_id == "EcsService" }
      service_name = File.basename(ecs_service.physical_resource_id) # IE: demo-web-dev-EcsService-Tw0nPMgpkmm4
      resource_id = "service/#{vars[:cluster]}/#{service_name}"
      resp = applicationautoscaling.describe_scalable_targets(
        service_namespace: "ecs",
        resource_ids: [resource_id],
      )
      resp.scalable_targets.first
    end
    memoize :scalable_target
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
ufo-6.3.13 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.12 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.11 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.10 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.9 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.8 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.7 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.6 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.5 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.4 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.3 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.2 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.1 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.3.0 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.2.5 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.2.4 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.2.3 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.2.2 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.2.1 lib/ufo/cfn/stack/builder/resources/scaling/target.rb
ufo-6.2.0 lib/ufo/cfn/stack/builder/resources/scaling/target.rb