ecs_deploy 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +19 -5
- data/lib/ecs_deploy/auto_scaler.rb +0 -1
- data/lib/ecs_deploy/capistrano.rb +3 -11
- data/lib/ecs_deploy/scheduled_task.rb +16 -12
- data/lib/ecs_deploy/task_definition.rb +0 -36
- data/lib/ecs_deploy/version.rb +1 -1
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b00504a25168d2bc3b6c700c8ec8ff5ccded3ff3
         | 
| 4 | 
            +
              data.tar.gz: 97c42178d1adec1876d319ddb8776cf28f687231
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fa259524dc7c1c0d0b2a61228d61014106df9ecc9c5b0ae21eda2300917935103f4122d8d2682e51f4232da6d9037b79a7f4646ff189915a64c12330bb39a33c
         | 
| 7 | 
            +
              data.tar.gz: b2d4350db7dd4083fceef62a38c9dc229e20bdfec903a09ee5cfbf5ba8a4a9089c1177fb23a7dfb2ba1659515f2b94e12c9a3df15b4ebaa9c03f3c6f6942c6f3
         | 
    
        data/README.md
    CHANGED
    
    | @@ -28,8 +28,6 @@ require 'ecs_deploy/capistrano' | |
| 28 28 |  | 
| 29 29 | 
             
            # deploy.rb
         | 
| 30 30 | 
             
            set :ecs_default_cluster, "ecs-cluster-name"
         | 
| 31 | 
            -
            set :ecs_access_key_id, "dummy" # optional, if nil, use environment variable
         | 
| 32 | 
            -
            set :ecs_secret_access_key, "dummy" # optional, if nil, use environment variable
         | 
| 33 31 | 
             
            set :ecs_region, %w(ap-northeast-1) # optional, if nil, use environment variable
         | 
| 34 32 | 
             
            set :ecs_service_role, "customEcsServiceRole" # default: ecsServiceRole
         | 
| 35 33 | 
             
            set :ecs_deploy_wait_timeout, 600 # default: 300
         | 
| @@ -87,12 +85,27 @@ set :ecs_tasks, [ | |
| 87 85 | 
             
                  }
         | 
| 88 86 | 
             
                ],
         | 
| 89 87 | 
             
                volumes: [{name: "sockets_path", host: {}}],
         | 
| 90 | 
            -
                executions: [ # execution task on deploy timing
         | 
| 91 | 
            -
                  {container_overrides: [{name: "myapp", command: ["db_migrate"]}]},
         | 
| 92 | 
            -
                ]
         | 
| 93 88 | 
             
              },
         | 
| 94 89 | 
             
            ]
         | 
| 95 90 |  | 
| 91 | 
            +
            set :ecs_scheduled_tasks, [
         | 
| 92 | 
            +
              {
         | 
| 93 | 
            +
                cluster: "default", # Unless this key, use fetch(:ecs_default_cluster)
         | 
| 94 | 
            +
                rule_name: "schedule_name",
         | 
| 95 | 
            +
                schedule_expression: "cron(0 12 * * ? *"),
         | 
| 96 | 
            +
                description: "schedule_description", # Optional
         | 
| 97 | 
            +
                target_id: "task_name", # Unless this key, use task_definition_name
         | 
| 98 | 
            +
                task_definition_name: "myapp-#{fetch(:rails_env)}",
         | 
| 99 | 
            +
                task_count: 2, # Default 1
         | 
| 100 | 
            +
                revision: 12, # Optional
         | 
| 101 | 
            +
                role_arn: "TaskRoleArn", # Optional
         | 
| 102 | 
            +
                container_overrides: [ # Optional
         | 
| 103 | 
            +
                  name: "myapp-main",
         | 
| 104 | 
            +
                  command: ["ls"],
         | 
| 105 | 
            +
                ]
         | 
| 106 | 
            +
              }
         | 
| 107 | 
            +
            ]
         | 
| 108 | 
            +
             | 
| 96 109 | 
             
            set :ecs_services, [
         | 
| 97 110 | 
             
              {
         | 
| 98 111 | 
             
                name: "myapp-#{fetch(:rails_env)}",
         | 
| @@ -116,6 +129,7 @@ set :ecs_services, [ | |
| 116 129 |  | 
| 117 130 | 
             
            ```sh
         | 
| 118 131 | 
             
            cap <stage> ecs:register_task_definition # register ecs_tasks as TaskDefinition
         | 
| 132 | 
            +
            cap <stage> ecs:deploy_scheduled_task # register ecs_scheduled_tasks to CloudWatchEvent
         | 
| 119 133 | 
             
            cap <stage> ecs:deploy # create or update Service by ecs_services info
         | 
| 120 134 |  | 
| 121 135 | 
             
            cap <stage> ecs:rollback # deregister current task definition and update Service by previous revision of current task definition
         | 
| @@ -36,15 +36,6 @@ namespace :ecs do | |
| 36 36 | 
             
                      )
         | 
| 37 37 | 
             
                      result = task_definition.register
         | 
| 38 38 | 
             
                      ecs_registered_tasks[region][t[:name]] = result
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                      executions = t[:executions].to_a
         | 
| 41 | 
            -
                      unless executions.empty?
         | 
| 42 | 
            -
                        warn "`executions` config is deprecated. I will remove this in near future"
         | 
| 43 | 
            -
                      end
         | 
| 44 | 
            -
                      executions.each do |exec|
         | 
| 45 | 
            -
                        exec[:cluster] ||= fetch(:ecs_default_cluster)
         | 
| 46 | 
            -
                        task_definition.run(exec)
         | 
| 47 | 
            -
                      end
         | 
| 48 39 | 
             
                    end
         | 
| 49 40 | 
             
                  end
         | 
| 50 41 |  | 
| @@ -53,14 +44,14 @@ namespace :ecs do | |
| 53 44 | 
             
              end
         | 
| 54 45 |  | 
| 55 46 | 
             
              task deploy_scheduled_task: [:configure, :register_task_definition] do
         | 
| 56 | 
            -
                if fetch(: | 
| 47 | 
            +
                if fetch(:ecs_scheduled_tasks)
         | 
| 57 48 | 
             
                  regions = Array(fetch(:ecs_region))
         | 
| 58 49 | 
             
                  regions = [nil] if regions.empty?
         | 
| 59 50 | 
             
                  regions.each do |r|
         | 
| 60 51 | 
             
                    fetch(:ecs_scheduled_tasks).each do |t|
         | 
| 61 52 | 
             
                      scheduled_task = EcsDeploy::ScheduledTask.new(
         | 
| 62 53 | 
             
                        region: r,
         | 
| 63 | 
            -
                        cluster: t[:cluster],
         | 
| 54 | 
            +
                        cluster: t[:cluster] || fetch(:ecs_default_cluster),
         | 
| 64 55 | 
             
                        rule_name: t[:rule_name],
         | 
| 65 56 | 
             
                        schedule_expression: t[:schedule_expression],
         | 
| 66 57 | 
             
                        enabled: t[:enabled] != false,
         | 
| @@ -70,6 +61,7 @@ namespace :ecs do | |
| 70 61 | 
             
                        revision: t[:revision],
         | 
| 71 62 | 
             
                        task_count: t[:task_count],
         | 
| 72 63 | 
             
                        role_arn: t[:role_arn],
         | 
| 64 | 
            +
                        container_overrides: t[:container_overrides],
         | 
| 73 65 | 
             
                      )
         | 
| 74 66 | 
             
                      scheduled_task.deploy
         | 
| 75 67 | 
             
                    end
         | 
| @@ -9,7 +9,7 @@ module EcsDeploy | |
| 9 9 | 
             
                def initialize(
         | 
| 10 10 | 
             
                  cluster:, rule_name:, schedule_expression:, enabled: true, description: nil, target_id: nil,
         | 
| 11 11 | 
             
                  task_definition_name:, revision: nil, task_count: nil, role_arn:,
         | 
| 12 | 
            -
                  region: nil
         | 
| 12 | 
            +
                  region: nil, container_overrides: nil
         | 
| 13 13 | 
             
                )
         | 
| 14 14 | 
             
                  @cluster = cluster
         | 
| 15 15 | 
             
                  @rule_name = rule_name
         | 
| @@ -22,6 +22,7 @@ module EcsDeploy | |
| 22 22 | 
             
                  @revision = revision
         | 
| 23 23 | 
             
                  @role_arn = role_arn
         | 
| 24 24 | 
             
                  @region = region || EcsDeploy.config.default_region || ENV["AWS_DEFAULT_REGION"]
         | 
| 25 | 
            +
                  @container_overrides = container_overrides
         | 
| 25 26 |  | 
| 26 27 | 
             
                  @client = Aws::ECS::Client.new(region: @region)
         | 
| 27 28 | 
             
                  @cloud_watch_events = Aws::CloudWatchEvents::Client.new(region: @region)
         | 
| @@ -58,19 +59,22 @@ module EcsDeploy | |
| 58 59 | 
             
                end
         | 
| 59 60 |  | 
| 60 61 | 
             
                def put_targets
         | 
| 62 | 
            +
                  target = {
         | 
| 63 | 
            +
                    id: @target_id,
         | 
| 64 | 
            +
                    arn: cluster_arn,
         | 
| 65 | 
            +
                    role_arn: @role_arn,
         | 
| 66 | 
            +
                    ecs_parameters: {
         | 
| 67 | 
            +
                      task_definition_arn: task_definition_arn,
         | 
| 68 | 
            +
                      task_count: @task_count,
         | 
| 69 | 
            +
                    },
         | 
| 70 | 
            +
                  }
         | 
| 71 | 
            +
                  if @container_overrides
         | 
| 72 | 
            +
                    target.merge!(input: { containerOverrides: @container_overrides }.to_json)
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
             | 
| 61 75 | 
             
                  res = @cloud_watch_events.put_targets(
         | 
| 62 76 | 
             
                    rule: @rule_name,
         | 
| 63 | 
            -
                    targets: [
         | 
| 64 | 
            -
                      {
         | 
| 65 | 
            -
                        id: @target_id,
         | 
| 66 | 
            -
                        arn: cluster_arn,
         | 
| 67 | 
            -
                        role_arn: @role_arn,
         | 
| 68 | 
            -
                        ecs_parameters: {
         | 
| 69 | 
            -
                          task_definition_arn: task_definition_arn,
         | 
| 70 | 
            -
                          task_count: @task_count,
         | 
| 71 | 
            -
                        },
         | 
| 72 | 
            -
                      }
         | 
| 73 | 
            -
                    ]
         | 
| 77 | 
            +
                    targets: [target]
         | 
| 74 78 | 
             
                  )
         | 
| 75 79 | 
             
                  if res.failed_entry_count.zero?
         | 
| 76 80 | 
             
                    EcsDeploy.logger.info "create cloudwatch event target [#{@target_id}] [#{@region}] [#{Paint['OK', :green]}]"
         | 
| @@ -56,41 +56,5 @@ module EcsDeploy | |
| 56 56 | 
             
                  EcsDeploy.logger.info "register task definition [#{@task_definition_name}] [#{@region}] [#{Paint['OK', :green]}]"
         | 
| 57 57 | 
             
                  res.task_definition
         | 
| 58 58 | 
             
                end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                def run(info)
         | 
| 61 | 
            -
                  resp = @client.run_task({
         | 
| 62 | 
            -
                    cluster: info[:cluster],
         | 
| 63 | 
            -
                    task_definition: @task_definition_name,
         | 
| 64 | 
            -
                    overrides: {
         | 
| 65 | 
            -
                      container_overrides: info[:container_overrides] || []
         | 
| 66 | 
            -
                    },
         | 
| 67 | 
            -
                    count: info[:count] || 1,
         | 
| 68 | 
            -
                    started_by: "capistrano",
         | 
| 69 | 
            -
                  })
         | 
| 70 | 
            -
                  unless resp.failures.empty?
         | 
| 71 | 
            -
                    resp.failures.each do |f|
         | 
| 72 | 
            -
                      raise "#{f.arn}: #{f.reason}"
         | 
| 73 | 
            -
                    end
         | 
| 74 | 
            -
                  end
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                  wait_targets = Array(info[:wait_stop])
         | 
| 77 | 
            -
                  unless wait_targets.empty?
         | 
| 78 | 
            -
                    @client.wait_until(:tasks_running, cluster: info[:cluster], tasks: resp.tasks.map { |t| t.task_arn })
         | 
| 79 | 
            -
                    @client.wait_until(:tasks_stopped, cluster: info[:cluster], tasks: resp.tasks.map { |t| t.task_arn })
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                    resp = @client.describe_tasks(cluster: info[:cluster], tasks: resp.tasks.map { |t| t.task_arn })
         | 
| 82 | 
            -
                    resp.tasks.each do |t|
         | 
| 83 | 
            -
                      t.containers.each do |c|
         | 
| 84 | 
            -
                        next unless wait_targets.include?(c.name)
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                        unless c.exit_code.zero?
         | 
| 87 | 
            -
                          raise "Task has errors: #{c.reason}"
         | 
| 88 | 
            -
                        end
         | 
| 89 | 
            -
                      end
         | 
| 90 | 
            -
                    end
         | 
| 91 | 
            -
                  end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
                  EcsDeploy.logger.info "run task [#{@task_definition_name} #{info.inspect}] [#{@region}] [#{Paint['OK', :green]}]"
         | 
| 94 | 
            -
                end
         | 
| 95 59 | 
             
              end
         | 
| 96 60 | 
             
            end
         | 
    
        data/lib/ecs_deploy/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ecs_deploy
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - joker1007
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017- | 
| 11 | 
            +
            date: 2017-10-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: aws-sdk
         | 
| @@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 123 123 | 
             
                  version: '0'
         | 
| 124 124 | 
             
            requirements: []
         | 
| 125 125 | 
             
            rubyforge_project: 
         | 
| 126 | 
            -
            rubygems_version: 2.6. | 
| 126 | 
            +
            rubygems_version: 2.6.13
         | 
| 127 127 | 
             
            signing_key: 
         | 
| 128 128 | 
             
            specification_version: 4
         | 
| 129 129 | 
             
            summary: AWS ECS deploy helper
         |