【问题标题】:Local (outside EC2) testing with Fog/Carrierwave and IAM instance profiles?使用 Fog/Carrierwave 和 IAM 实例配置文件进行本地(EC2 外部)测试?
【发布时间】:2015-03-04 17:56:37
【问题描述】:

我知道我可以通过传递 use_iam_profile => true 来配置雾以使用 IAM 实例配置文件(我通过雾/载波上传到 S3)。我还没有弄清楚如何在 EC2 实例之外测试我的代码,比如在我的本地机器上。有没有人们正在使用的策略?

【问题讨论】:

    标签: ruby amazon-s3 carrierwave fog


    【解决方案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
    

    注意事项:

    1. symbolize_keys 调用是必要的,因为默认情况下我 以字符串为键的散列结束,Fog 正在寻找 符号。
    2. 是的,我正在检查应用程序 ID 和密码,但你没有 不得不;您可以改为使用环境变量来执行此操作。 这里是个人选择,我以后可能会更改。
    3. 这可以作为 预计在本地,但我还没有在 EC2 中尝试过。由于在每个 Rails 环境CarrierWave::Uploader::Base.fog_credentials 哈希完全符合我的预期,它应该可以正常工作 当我到达那里时。

    最终结果是,在所有环境中,AppConfig.fog['credentials'] 散列得到相同的 :region:provider。在开发中,它还包含 ID 和秘密。在生产中,它不包含 ID 或秘密,而是得到 :use_iam_profile =&gt; true

    【讨论】:

    • 我很好奇这个解决方案是否适用于每个用户的不同配置文件,并且当您处理临时访问令牌时,您将通过 Cognito 服务获得。否则,我将发现 ;-)
    猜你喜欢
    • 2016-10-01
    • 2018-01-10
    • 2021-03-26
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多