elastic_beans 0.11.0.alpha2 → 0.11.0.alpha3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cf29882390196563d6e401c86f27aa56099845d
4
- data.tar.gz: 1ecd6fd9e0f45035e3e3f236946c55f4f50ec17b
3
+ metadata.gz: 447c3a015ec047c6869fb9cb7f0aed2f705f8478
4
+ data.tar.gz: 6bb14f4d01a75b033ce771359bb2749b9826f15c
5
5
  SHA512:
6
- metadata.gz: 5470ba71fd7685d7d68f6e52770c10f5265189dc6777a53b6c2aaf9e2f01f2fef57f2704aae8693d6f9005ae567461a7ddda656bf144dbb225ec7f9c4860aa21
7
- data.tar.gz: 14708dd76eeeedda6256cecb732610852e9c4ab15cf5994bcc44c41045bd0a05410bf688c9e27e4408e0243dcd77148fd4dccfea183667c1a159e5d96d9d43f3
6
+ metadata.gz: 90923ac6059ab4623182556cb7b07917edc075ff71e7fe213df7826d7c4e61362f4bdab240dc57c58939e53554daa4794b6e7d2216c47207e248e6cbed448d3c
7
+ data.tar.gz: 37d5e729599034467b376668822b5ee45494650da65d58b282225686116612332f29b045b586a27f72b6f8d72039269b0000b83ebab3d1e0b7bb874bb069fcf8
data/README.md CHANGED
@@ -24,9 +24,11 @@ As the SDK documentation suggests, using environment variables is recommended.
24
24
 
25
25
  # Pre-configure the application before creating environments
26
26
  beans configure -n myapp-networking -a myapp \
27
- -b SECRET_KEY_BASE -d DATABASE_URL -k KEYPAIR \
28
27
  -p INTERNAL_PUBLIC_KEY -s SSL_CERTIFICATE_ARN \
29
- [-i IMAGE_ID] [-t INSTANCE_TYPE]
28
+ -k KEYPAIR [-i IMAGE_ID] [-t INSTANCE_TYPE]
29
+ beans setenv -a myapp \
30
+ DATABASE_URL=mysql2://db.example.com:3306/myapp \
31
+ SECRET_KEY_BASE=abc123
30
32
 
31
33
  # Create a webserver environment with a pretty DNS name at myapp.TLD (managed by Route53)
32
34
  beans create -a myapp [-d myapp.TLD] [--tags=Environment:production Team:Unicorn] webserver
@@ -63,9 +65,8 @@ As the SDK documentation suggests, using environment variables is recommended.
63
65
 
64
66
  # Update all existing environments and configuration
65
67
  beans configure -n myapp-networking -a myapp \
66
- [-b SECRET_KEY_BASE] [-d DATABASE_URL] [-k KEYPAIR] \
67
68
  [-p INTERNAL_PUBLIC_KEY] [-s SSL_CERTIFICATE_ARN] \
68
- [-i IMAGE_ID] [-t INSTANCE_TYPE]
69
+ [-k KEYPAIR] [-i IMAGE_ID] [-t INSTANCE_TYPE]
69
70
 
70
71
  ### API
71
72
 
@@ -230,58 +231,8 @@ Elastic Beans will set the `DISABLE_SQS_CONSUMER` environment variable appropria
230
231
 
231
232
  ### Known issues and limitations of the pre-release
232
233
 
233
- Elastic Beans still has some rough edges that need to be worked out.
234
-
235
- #### Authentication with AWS uses environment variables
236
-
237
- Use the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables to authenticate with the AWS SDK.
238
-
239
- #### Creating multiple environments simultaneously causes sample application to be deployed
240
-
241
- Due to a bug in the version-finding code, creating multiple environments simultaneously can cause a sample application to be deployed to one of them (an empty version label).
242
-
243
- #### End-to-end encryption requires some custom setup
244
-
245
- Currently (pre-1.0), you must set up HTTPS yourself in nginx using an ebextension.
246
- Use whatever certificate you like to do so, even a self-signed certificate is fine.
247
- Use the public key from this certificate as the `--public-key` option to `beans configure`.
248
-
249
- #### Environment variables are not access-controlled
250
-
251
- Environment variables are stored in plain-text in S3.
252
- Anyone with access to the Elastic Beanstalk bucket (for instance, the Elastic Beanstalk instance profile) can read the environment variables.
253
-
254
- #### Rate limiting
255
-
256
- Running several beans tasks concurrently can cause Elastic Beanstalk rate-limiting on the AWS account.
257
-
258
- #### SIGINT causes a stack trace
259
-
260
- Sorry `¯\_(ツ)_/¯`
261
-
262
- #### Solution stack is hard-coded
263
-
264
- If you do not use a custom image, the solution stack will start as a hard-coded value.
265
- It will also be up to you to update it.
266
-
267
- #### Uses default Elastic Beanstalk IAM settings and S3 bucket
268
-
269
- Elastic Beans looks for [the default Elastic Beanstalk IAM instance profile and service role][iam].
270
- As the linked document explains, the easiest way to create them is to create a sample application in the AWS console.
271
-
272
- Creating the sample application should also create the default Elastic Beanstalk S3 bucket, which has a name of the form `elasticbeanstalk-REGION-ACCOUNT_ID`.
273
- Elastic Beans will use this bucket to store application versions and environment variables.
274
-
275
- [iam]: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-roles.html
276
-
277
- #### Worker environment health check requires some custom setup
278
-
279
- Elastic Beanstalk worker environments (aws-sqsd) must use a non-SSL health check.
280
- Your Rails application must implement this as a middleware (or lower in the stack) before Rails enforces SSL.
281
-
282
- #### Worker environment visibility timeout is hard-coded
283
-
284
- 1800 seconds is the longest it can be.
234
+ Elastic Beans is in pre-release and still has some rough edges that need to be worked out.
235
+ See [the wiki page](https://github.com/onemedical/elastic_beans/wiki/Known-Issues).
285
236
 
286
237
  ## Installation
287
238
 
@@ -42,6 +42,9 @@ module ElasticBeans
42
42
  raise MissingStackError.new(stack_name: stack_name)
43
43
  rescue ::Aws::CloudFormation::Errors::AccessDenied
44
44
  raise AccessDeniedCloudFormationError.new(stack_name: stack_name)
45
+ rescue ::Aws::CloudFormation::Errors::Throttling
46
+ sleep 5
47
+ retry
45
48
  end
46
49
 
47
50
  class MissingStackError < ElasticBeans::Error
@@ -16,24 +16,20 @@ class ElasticBeans::CLI < Thor
16
16
  long_desc ElasticBeans::Command::Configure::LONG_DESC
17
17
  option :application, aliases: %w(-a), required: true, desc: APPLICATION_DESC
18
18
  option :network, aliases: %w(-n), required: true, desc: "The name of the CloudFormation stack that contains networking settings"
19
- option :database_url, aliases: %w(-d), desc: "The DATABASE_URL for the Rails application"
20
19
  option :image_id, aliases: %w(-i), desc: "A custom AMI to use instead of the default Ruby Elastic Beanstalk AMI"
21
20
  option :instance_type, aliases: %w(-t), desc: "A default instance type to use for all environments instead of c4.large"
22
21
  option :internal, type: :boolean, desc: "Configure the webserver to only be available for internal VPC access"
23
22
  option :keypair, aliases: %w(-k), desc: "Required on first run. The EC2 keypair to use for Elastic Beanstalk instances"
24
23
  option :public_key, aliases: %w(-p), desc: "For end-to-end encryption. The public key of the SSL certificate the ELB will verify to communicate with your Rails app"
25
- option :secret_key_base, aliases: %w(-b), desc: "The SECRET_KEY_BASE for the Rails application"
26
24
  option :ssl_certificate_arn, aliases: %w(-s), desc: "The ARN of the SSL server certificate stored in IAM to attach to the ELB"
27
25
  def configure
28
26
  @verbose = options[:verbose]
29
27
  ElasticBeans::Command::Configure.new(
30
- database_url: options[:database_url],
31
28
  image_id: options[:image_id],
32
29
  instance_type: options[:instance_type],
33
30
  internal: options[:internal],
34
31
  keypair: options[:keypair],
35
32
  public_key: options[:public_key],
36
- secret_key_base: options[:secret_key_base],
37
33
  ssl_certificate_arn: options[:ssl_certificate_arn],
38
34
  application: application(name: options[:application]),
39
35
  network: network(stack_name: options[:network]),
@@ -16,13 +16,11 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
16
16
  LONG_DESC
17
17
 
18
18
  def initialize(
19
- database_url:,
20
19
  image_id:,
21
20
  instance_type:,
22
21
  internal:,
23
22
  keypair:,
24
23
  public_key:,
25
- secret_key_base:,
26
24
  ssl_certificate_arn:,
27
25
  application:,
28
26
  network:,
@@ -30,13 +28,11 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
30
28
  iam:,
31
29
  ui:
32
30
  )
33
- @database_url = database_url
34
31
  @image_id = image_id
35
32
  @instance_type = instance_type
36
33
  @internal = internal
37
34
  @keypair = keypair
38
35
  @public_key = public_key
39
- @secret_key_base = secret_key_base
40
36
  @ssl_certificate_arn = ssl_certificate_arn
41
37
  @application = application
42
38
  @network = network
@@ -64,8 +60,6 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
64
60
  )
65
61
  base_config.upsert(
66
62
  network: network,
67
- database_url: database_url,
68
- secret_key_base: secret_key_base,
69
63
  image_id: image_id,
70
64
  instance_type: instance_type,
71
65
  keypair: keypair,
@@ -80,8 +74,6 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
80
74
  )
81
75
  webserver_config.upsert(
82
76
  network: network,
83
- database_url: database_url,
84
- secret_key_base: secret_key_base,
85
77
  image_id: image_id,
86
78
  instance_type: instance_type,
87
79
  internal: internal,
@@ -106,8 +98,6 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
106
98
  )
107
99
  exec_config.upsert(
108
100
  network: network,
109
- database_url: database_url,
110
- secret_key_base: secret_key_base,
111
101
  image_id: image_id,
112
102
  instance_type: instance_type,
113
103
  keypair: keypair,
@@ -129,8 +119,6 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
129
119
  )
130
120
  scheduler_config.upsert(
131
121
  network: network,
132
- database_url: database_url,
133
- secret_key_base: secret_key_base,
134
122
  image_id: image_id,
135
123
  instance_type: instance_type,
136
124
  keypair: keypair,
@@ -154,8 +142,6 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
154
142
  )
155
143
  worker_config.upsert(
156
144
  network: network,
157
- database_url: database_url,
158
- secret_key_base: secret_key_base,
159
145
  image_id: image_id,
160
146
  instance_type: instance_type,
161
147
  keypair: keypair,
@@ -178,14 +164,12 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
178
164
 
179
165
  attr_reader(
180
166
  :application,
181
- :database_url,
182
167
  :image_id,
183
168
  :instance_type,
184
169
  :internal,
185
170
  :keypair,
186
171
  :network,
187
172
  :public_key,
188
- :secret_key_base,
189
173
  :ssl_certificate_arn,
190
174
  :elastic_beanstalk,
191
175
  :iam,
@@ -109,6 +109,7 @@ Requires AWS credentials to be set in the environment, i.e. AWS_ACCESS_KEY_ID an
109
109
  rescue ElasticBeans::SSH::BastionAuthenticationError => e
110
110
  raise BastionAuthenticationError.new(cause: e)
111
111
  ensure
112
+ ui.info("\nCleaning up, please do not interrupt!")
112
113
  application.kill_command(freeze_command)
113
114
  application.deregister_command(command)
114
115
  end
@@ -13,11 +13,9 @@ module ElasticBeans
13
13
  protected
14
14
 
15
15
  # Constructs the common configuration for all environments.
16
- # +network+, +database_url+, +secret_key_base+, +keypair+, and +iam+ are all required on first run.
16
+ # +network+, +keypair+, and +iam+ are all required on first run.
17
17
  def build_option_settings(
18
18
  network: nil,
19
- database_url: nil,
20
- secret_key_base: nil,
21
19
  keypair: nil,
22
20
  iam: nil,
23
21
  image_id: nil,
@@ -34,12 +32,8 @@ module ElasticBeans
34
32
  end
35
33
 
36
34
  keypair_setting = template_option_setting(template: template, namespace: "aws:autoscaling:launchconfiguration", option_name: "EC2KeyName", override: keypair)
37
- database_url_setting = template_option_setting(template: template, namespace: "aws:elasticbeanstalk:application:environment", option_name: "DATABASE_URL", override: database_url)
38
- secret_key_base_setting = template_option_setting(template: template, namespace: "aws:elasticbeanstalk:application:environment", option_name: "SECRET_KEY_BASE", override: secret_key_base)
39
- if database_url_setting[:value].nil? || secret_key_base_setting[:value].nil? || keypair_setting[:value].nil?
35
+ if keypair_setting[:value].nil?
40
36
  raise MissingOptionsError.new(
41
- database_url: database_url_setting[:value],
42
- secret_key_base: secret_key_base_setting[:value],
43
37
  keypair: keypair_setting[:value],
44
38
  )
45
39
  end
@@ -66,8 +60,6 @@ module ElasticBeans
66
60
  template_option_setting(template: template, namespace: "aws:ec2:vpc", option_name: "VPCId", override: vpc_id(network)),
67
61
  instance_profile_setting,
68
62
  keypair_setting,
69
- database_url_setting,
70
- secret_key_base_setting,
71
63
  ]
72
64
  if image_id
73
65
  settings << template_option_setting(template: template, namespace: "aws:autoscaling:launchconfiguration", option_name: "ImageId", override: image_id)
@@ -127,9 +119,7 @@ module ElasticBeans
127
119
  # :nodoc: all
128
120
  # @!visibility private
129
121
  class MissingOptionsError < ElasticBeans::Error
130
- def initialize(database_url:, secret_key_base:, keypair:)
131
- @database_url = database_url
132
- @secret_key_base = secret_key_base
122
+ def initialize(keypair:)
133
123
  @keypair = keypair
134
124
  end
135
125
 
@@ -137,15 +127,9 @@ module ElasticBeans
137
127
  require "elastic_beans/cli"
138
128
  require "elastic_beans/cli/string_shell"
139
129
  msg = "Some required options are missing and must be set when configuring an application:\n\n"
140
- if @database_url.nil?
141
- msg << "--database-url DATABASE_URL must point to a valid database, and is required for running a Rails application\n"
142
- end
143
130
  if @keypair.nil?
144
131
  msg << "--keypair KEYPAIR must be a valid EC2 key pair, and will be used on Elastic Beanstalk instances\n"
145
132
  end
146
- if @secret_key_base.nil?
147
- msg << "--secret-key-base SECRET_KEY_BASE can be any value, and is required for running a Rails application\n"
148
- end
149
133
  msg << <<-MESSAGE
150
134
 
151
135
  Please re-run `#{command_as_string "configure"}` with these options.
@@ -1,3 +1,3 @@
1
1
  module ElasticBeans
2
- VERSION = "0.11.0.alpha2"
2
+ VERSION = "0.11.0.alpha3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_beans
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0.alpha2
4
+ version: 0.11.0.alpha3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Stegman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-15 00:00:00.000000000 Z
11
+ date: 2017-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk