module LogStash::PluginMixins::AwsConfig

Constants

US_EAST_1

Public Class Methods

included(base) click to toggle source

This method is called when someone includes this module

# File lib/logstash/plugin_mixins/aws_config.rb, line 9
def self.included(base)
  # Add these methods to the 'base' given.
  base.extend(self)
  base.setup_aws_config
end

Public Instance Methods

aws_options_hash() click to toggle source
# File lib/logstash/plugin_mixins/aws_config.rb, line 54
def aws_options_hash
  if @access_key_id.is_a?(NilClass) ^ @secret_access_key.is_a?(NilClass)
    @logger.warn("Likely config error: Only one of access_key_id or secret_access_key was provided but not both.")
  end

  if ((!@access_key_id || !@secret_access_key)) && @aws_credentials_file
    access_creds = YAML.load_file(@aws_credentials_file)

    @access_key_id = access_creds[:access_key_id]
    @secret_access_key = access_creds[:secret_access_key]
  end

  opts = {}

  if (@access_key_id && @secret_access_key)
    opts[:access_key_id] = @access_key_id
    opts[:secret_access_key] = @secret_access_key
  end

  opts[:use_ssl] = @use_ssl

  if (@proxy_uri)
    opts[:proxy_uri] = @proxy_uri
  end

  # The AWS SDK for Ruby doesn't know how to make an endpoint hostname from a region
  # for example us-west-1 -> foosvc.us-west-1.amazonaws.com
  # So our plugins need to know how to generate their endpoints from a region
  # Furthermore, they need to know the symbol required to set that value in the AWS SDK
  # Classes using this module must implement aws_service_endpoint(region:string)
  # which must return a hash with one key, the aws sdk for ruby config symbol of the service
  # endpoint, which has a string value of the service endpoint hostname
  # for example, CloudWatch, { :cloud_watch_endpoint => "monitoring.#{region}.amazonaws.com" }
  # For a list, see https://github.com/aws/aws-sdk-ruby/blob/master/lib/aws/core/configuration.rb
  opts.merge!(self.aws_service_endpoint(@region))
  
  return opts
end
setup_aws_config() click to toggle source
# File lib/logstash/plugin_mixins/aws_config.rb, line 18
def setup_aws_config
  # The AWS Region
  config :region, :validate => [US_EAST_1, "us-west-1", "us-west-2",
                                "eu-west-1", "ap-southeast-1", "ap-southeast-2",
                                "ap-northeast-1", "sa-east-1", "us-gov-west-1"], :default => US_EAST_1

  # This plugin uses the AWS SDK and supports several ways to get credentials, which will be tried in this order...
  # 1. Static configuration, using `access_key_id` and `secret_access_key` params in logstash plugin config
  # 2. External credentials file specified by `aws_credentials_file`
  # 3. Environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`
  # 4. Environment variables `AMAZON_ACCESS_KEY_ID` and `AMAZON_SECRET_ACCESS_KEY`
  # 5. IAM Instance Profile (available when running inside EC2)
  config :access_key_id, :validate => :string

  # The AWS Secret Access Key
  config :secret_access_key, :validate => :string

  # Should we require (true) or disable (false) using SSL for communicating with the AWS API
  # The AWS SDK for Ruby defaults to SSL so we preserve that
  config :use_ssl, :validate => :boolean, :default => true

  # URI to proxy server if required
  config :proxy_uri, :validate => :string

  # Path to YAML file containing a hash of AWS credentials.
  # This file will only be loaded if `access_key_id` and
  # `secret_access_key` aren't set. The contents of the
  # file should look like this:
  #
  #     :access_key_id: "12345"
  #     :secret_access_key: "54321"
  #
  config :aws_credentials_file, :validate => :string
end