Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow development to use localstack over AWS #1961

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,9 @@ XE_API_PASSWORD=pass
XE_API_URL=url
XE_API_USERNAME=user
[email protected]
## LOCALSTACK SETUP
# Uncomment the following lines to use localstack
# AWS_ENDPOINT=http://s3.localhost.localstack.cloud:4566
# AWS_REGION=eu-west-2
# AWS_SECRET_ACCESS_KEY=test
# AWS_ACCESS_KEY_ID=test
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,12 @@ TARIFF_SYNC_USERNAME
GREEN_LANES_UPDATE_EMAIL
```

## Localstack

This project uses [localstack](https://github.com/localstack/localstack) to simulate AWS services locally should you choose to. To use localstack, you will need to install it and run it locally. You can find instructions on how to do this [here](https://github.com/localstack/localstack#installation).

Once you have installed localstack, you will need to configure it to use the correct AWS region and credentials. This can be done by uncommenting the relevant lines in the `.env.development` file and setting the appropriate values.

## Licence

Trade Tariff is licenced under the [MIT licence](https://github.com/trade-tariff/trade-tariff-backend/blob/main/LICENCE.txt)
7 changes: 6 additions & 1 deletion config/initializers/persistence_bucket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@
running_in_aws = ENV['ECS_AGENT_URI'].present?
credentials_loaded = ENV['AWS_PROFILE'].present? || (ENV['AWS_SECRET_ACCESS_KEY'].present? && ENV['AWS_ACCESS_KEY_ID'].present?)

s3_bucket = if Rails.env.test?
s3_bucket = if Rails.env.development? && ENV.key?('AWS_ENDPOINT')
unless Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).bucket(s3_bucket_name).exists?
Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).create_bucket({ bucket: s3_bucket_name })
end
Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).bucket(s3_bucket_name)
elsif Rails.env.test?
Aws::S3::Resource.new(stub_responses: true).bucket(s3_bucket_name)
elsif s3_bucket_name && (credentials_loaded || running_in_aws)
Aws::S3::Resource.new.bucket(s3_bucket_name)
Expand Down
7 changes: 6 additions & 1 deletion config/initializers/reporting_bucket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
local_credentials_loaded = ENV['AWS_PROFILE'].present? || (ENV['AWS_SECRET_ACCESS_KEY'].present? && ENV['AWS_ACCESS_KEY_ID'])
credentials_loaded = ecs_credentials_loaded || local_credentials_loaded

s3_bucket = if Rails.env.test?
s3_bucket = if Rails.env.development? && ENV.key?('AWS_ENDPOINT')
unless Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).bucket(s3_bucket_name).exists?
Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).create_bucket({ bucket: s3_bucket_name })
end
Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).bucket(s3_bucket_name)
elsif Rails.env.test?
Aws::S3::Resource.new(stub_responses: true).bucket(s3_bucket_name)
elsif s3_bucket_name && credentials_loaded
Aws::S3::Resource.new.bucket(s3_bucket_name)
Expand Down
17 changes: 11 additions & 6 deletions config/initializers/spelling_corrector_bucket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@
running_in_aws = ENV['ECS_AGENT_URI'].present?
credentials_loaded = ENV['AWS_PROFILE'].present? || (ENV['AWS_SECRET_ACCESS_KEY'].present? && ENV['AWS_ACCESS_KEY_ID'])

if Rails.env.test?
s3_bucket = Aws::S3::Resource.new(stub_responses: true).bucket(s3_bucket_name)
elsif s3_bucket_name
if running_in_aws || credentials_loaded
if s3_bucket_name.present?
if Rails.env.development? && ENV.key?('AWS_ENDPOINT')
unless Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).bucket(s3_bucket_name).exists?
Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).create_bucket({ bucket: s3_bucket_name })
end
Aws::S3::Resource.new(endpoint: ENV['AWS_ENDPOINT']).bucket(s3_bucket_name)
elsif Rails.env.test?
s3_bucket = Aws::S3::Resource.new(stub_responses: true).bucket(s3_bucket_name)
elsif running_in_aws || credentials_loaded
s3_bucket = Aws::S3::Resource.new.bucket(s3_bucket_name)
else
Rails.logger.warn 'AWS credentials missing, or not running on AWS.'
end
end

Rails.application.config.spelling_corrector_s3_bucket = s3_bucket
Rails.application.config.spelling_corrector_s3_bucket = s3_bucket
end