使用 Fog/Carrierwave 和 IAM 实例配置文件进行本地(EC2 外部)测试?
Local (outside EC2) testing with Fog/Carrierwave and IAM instance profiles?
我知道我可以通过传递 use_iam_profile => true 来配置 fog 以使用 IAM 实例配置文件(我通过 fog/carrierwave 上传到 S3)。我还没有弄清楚如何在 EC2 实例之外测试我的代码,就像在我的本地机器上一样。是否有人们正在使用的策略?
我不知道其他人是怎么做到的,但这是我想出的策略。我有一个看起来像这样的 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 正在寻找
符号。
- 是的,我正在签入应用 ID 和密码,但你没有
不得不;您可以改用环境变量来执行此操作。
个人选择,以后可能会改
- 这作为
预计在本地,但我还没有在 EC2 中尝试过。由于在每个
Rails 环境
CarrierWave::Uploader::Base.fog_credentials
哈希结果完全符合我的预期,它应该可以正常工作
当我到达那里时。
最终结果是,在所有环境中,AppConfig.fog['credentials']
哈希得到相同的 :region
和 :provider
。在开发中,它还包含 ID 和 secret。在生产中它不包含 ID 或秘密,而是获取 :use_iam_profile => true
我知道我可以通过传递 use_iam_profile => true 来配置 fog 以使用 IAM 实例配置文件(我通过 fog/carrierwave 上传到 S3)。我还没有弄清楚如何在 EC2 实例之外测试我的代码,就像在我的本地机器上一样。是否有人们正在使用的策略?
我不知道其他人是怎么做到的,但这是我想出的策略。我有一个看起来像这样的 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 正在寻找 符号。 - 是的,我正在签入应用 ID 和密码,但你没有 不得不;您可以改用环境变量来执行此操作。 个人选择,以后可能会改
- 这作为
预计在本地,但我还没有在 EC2 中尝试过。由于在每个
Rails 环境
CarrierWave::Uploader::Base.fog_credentials
哈希结果完全符合我的预期,它应该可以正常工作 当我到达那里时。
最终结果是,在所有环境中,AppConfig.fog['credentials']
哈希得到相同的 :region
和 :provider
。在开发中,它还包含 ID 和 secret。在生产中它不包含 ID 或秘密,而是获取 :use_iam_profile => true