class EcsRailsConsole::Core

Private Instance Methods

cluster_name() click to toggle source
# File lib/ecs_rails_console/core.rb, line 114
def cluster_name
  @cluster_name ||= config["cluster_name"]
end
console_security_group_ids(vpc_id) click to toggle source
# File lib/ecs_rails_console/core.rb, line 50
def console_security_group_ids(vpc_id)
  @console_security_group_ids ||= begin
    ids = ec2_client.describe_security_groups(
      filters: [
        {name: "vpc-id", values: [vpc_id]},
        {name: "group-name",
         values: config["security_groups"]}
      ]
    )[:security_groups].map(&:group_id)
    abort "Could not find security groups" if ids.empty?

    ids
  end
end
ec2_client() click to toggle source
# File lib/ecs_rails_console/core.rb, line 14
def ec2_client
  @ec2_client ||= Aws::EC2::Client.new(aws_credentials)
end
ecs_client() click to toggle source
# File lib/ecs_rails_console/core.rb, line 10
def ecs_client
  @ecs_client ||= Aws::ECS::Client.new(aws_credentials)
end
get_public_ip(task_description) click to toggle source
# File lib/ecs_rails_console/core.rb, line 101
def get_public_ip(task_description)
  network_interface_id =
    task_description[:attachments]
      .first[:details]
      .detect { |detail| detail[:name] == "networkInterfaceId" }[:value]

  ec2_client.describe_network_interfaces(
    network_interface_ids: [
      network_interface_id
    ]
  )[:network_interfaces].first[:association][:public_ip]
end
run_task() click to toggle source
# File lib/ecs_rails_console/core.rb, line 78
def run_task
  task = ecs_client.run_task(
    {
      cluster: cluster_name,
      launch_type: "FARGATE",
      task_definition: task_definition,
      network_configuration: {
        awsvpc_configuration: {
          subnets: subnet_ids(vpc_id),
          security_groups: console_security_group_ids(vpc_id),
          assign_public_ip: "ENABLED"
        }
      }
    }
  )[:tasks].first

  task_id = task[:task_arn].match(%r{.*/(\w+)$}).captures.first

  ecs_client
    .wait_until(:tasks_running, {cluster: cluster_name, tasks: [task_id]})[:tasks]
    .first
end
subnet_ids(vpc_id) click to toggle source
# File lib/ecs_rails_console/core.rb, line 34
def subnet_ids(vpc_id)
  @subnet_ids ||= begin
    ids = ec2_client.describe_subnets(
      {
        filters: [
          {name: "vpc-id", values: [vpc_id]},
          {name: "tag:aws-cdk:subnet-type", values: ["Public"]}
        ]
      }
    )[:subnets].map(&:subnet_id)
    abort "Could not find subnets" if ids.empty?

    ids
  end
end
task_definition() click to toggle source
# File lib/ecs_rails_console/core.rb, line 65
def task_definition
  @task_definition ||= begin
    task_definition_name_regex = %r{.*/(#{config['task_definition']}):\d+}
    task_definitions = ecs_client.list_task_definitions(status: "ACTIVE")
    definition_arn = task_definitions[:task_definition_arns].detect do |arn|
      arn.match(task_definition_name_regex)
    end
    abort "Could not find console task definition" if definition_arn.empty?

    definition_arn.match(task_definition_name_regex).captures.first
  end
end
vpc_id() click to toggle source
# File lib/ecs_rails_console/core.rb, line 18
def vpc_id
  @vpc_id ||= begin
    id = ec2_client.describe_vpcs(
      {
        filters: [{
          name: "tag:aws:cloudformation:stack-name",
          values: ["#{cluster_name}InfraStack"]
        }]
      }
    )[:vpcs].map(&:vpc_id).first
    abort "Could not find VPC" if id.empty?

    id
  end
end