Локальное (за пределами EC2) тестирование с использованием профилей экземпляров Fog/Carrierwave и IAM?
Я понимаю, что могу настроить fog для использования профилей экземпляров IAM (я загружаю на S3 через fog/carrierwave), передавая use_iam_profile => true. Что я еще не понял, так это как тестировать мой код вне экземпляра EC2, как на моей локальной машине. Есть ли стратегия для этого, которую люди используют?
1 ответ
Я не знаю, как другие могут это делать, но это стратегия, которую я придумал. У меня есть config.yml, который выглядит так:
default: &default
aws:
s3:
bucket: 'my-production-bucket'
fog: &fog
credentials: &credentials
provider: 'AWS'
region: 'us-east-1'
development: &development
<<: *default
aws:
s3:
bucket: 'my-dev-bucket'
fog:
<<: *fog
credentials:
<<: *credentials
aws_access_key_id: 'ID_WITH_DEV_BUCKET_ACCESS_ONLY'
aws_secret_access_key: 'CORRESPONDING_SECRET'
test:
<<: *development
production:
<<: *default
fog:
<<: *fog
credentials:
<<: *credentials
use_iam_profile: true
Я также использую этот трюк в app_config.rb для загрузки моего файла config.yml (не требуется для этого решения, но это сделает следующую часть более понятной для вас):
require 'ostruct'
require 'yaml'
all_config = YAML.load_file(Rails.root.join('config', 'config.yml')) || {}
env_config = all_config[Rails.env] || {}
AppConfig = OpenStruct.new(env_config)
Затем в моем файле config/initializers/carrier_wave.rb:
CarrierWave.configure do |config|
config.fog_credentials = AppConfig.fog['credentials'].symbolize_keys
config.fog_directory = AppConfig.aws['s3']['bucket']
end
Заметки:
symbolize_keys
вызов там необходим, потому что по умолчанию я получаю хеш со строками в качестве ключей, а Fog ищет символы.- Да, я проверяю идентификатор приложения и секрет, но вам не нужно; Вы могли бы сделать это с переменными среды вместо этого. Личный выбор здесь, и я могу изменить его позже.
- Это работает, как и ожидалось, локально, но я еще не пробовал в EC2. Так как в каждой среде Rails
CarrierWave::Uploader::Base.fog_credentials
хэш получается именно так, как я ожидаю, он должен работать очень хорошо, когда я туда доберусь.
Конечным результатом является то, что во всех средах AppConfig.fog['credentials']
хэш получает то же самое :region
а также :provider
, В разработке, он также содержит идентификатор и секрет. В производстве он не содержит идентификатор или секрет, но вместо этого получает :use_iam_profile => true