Module: AwsSsmEnv

Defined in:
lib/aws-ssm-env.rb,
lib/aws-ssm-env/loader.rb,
lib/aws-ssm-env/fetcher.rb,
lib/aws-ssm-env/version.rb,
lib/aws-ssm-env/fetchers/path.rb,
lib/aws-ssm-env/naming_strategy.rb,
lib/aws-ssm-env/fetchers/factory.rb,
lib/aws-ssm-env/fetchers/begins_with.rb,
lib/aws-ssm-env/naming_strategies/factory.rb,
lib/aws-ssm-env/naming_strategies/basename.rb,
lib/aws-ssm-env/naming_strategies/snakecase.rb

Overview

Since:

  • 0.1.0

Defined Under Namespace

Classes: BasenameNamingStrategy, BeginsWithFetcher, FetchResult, Fetcher, FetcherFactory, Loader, NamingStrategy, NamingStrategyFactory, PathFetcher, SnakeCaseNamingStrategy

Constant Summary collapse

VERSION =

Since:

  • 0.1.0

'0.1.3'.freeze

Class Method Summary collapse

Class Method Details

.load(**args) ⇒ Object

メイン処理。EC2 Parameter Storeからパラメータを取得して環境変数にインジェクションする。

AwsSsmEnv::Loader#load の委譲メソッド。

Parameters:

  • この処理で利用するすべての引数をまとめて渡す。

Options Hash (**args):

  • decryption (Boolean)

    SecureStringのパラメータを復号化するかどうかを表すフラグ。 trueを指定した場合は取得したSecureStringパラメータの値は復号化されている。 falseの場合は暗号化されたまた環境変数値として設定される。 なお、このためのgemなのでデフォルトはtrue(復号化する)。

  • overwrite (Boolean)

    すでに設定されている環境変数を上書きするかどうかを指定する。 trueを指定した場合、環境変数が設定されていても取得したパラメータ値で上書きする。 falseを指定した場合はすでに設定されている環境変数を上書きしない。 デフォルトはfalse(上書きしない)。 なお、AwsSsmEnv#load!を実行した場合、このフラグは自動的にtrueになる。

  • :client (Aws::SSM::Client)

    Aws::SSM::Clientのインスタンスを指定する。 すでに生成済みのインスタンスがある場合にそれを設定するためのオプション。 生成済みのインスタンスがない場合はssm_client_argsを利用する。

  • :ssm_client_args (Hash)

    Aws::SSM::Clientのコンストラクタに渡すハッシュを指定する。 指定しなかった場合は引数なしでAws::SSM::Client.newが呼ばれる。 環境変数やEC2インスタンスプロファイルによる認証情報を利用する場合は不要。

  • :fetch (Symbol, AwsSsmEnv::Fetcher, Object)

    パラメータ取得方法を指定する。 指定可能な値は:path, :begins_withまたはAwsSsmEnv::Fetcherを実装したクラスのインスタンス、eachメソッドを 持ったクラスのインスタンスのいずれか。 何も指定されていない場合は:pathとして扱われるが、後述のbegins_withが指定されていた場合は自動的に:begins_withとなる。

    :pathを指定した場合はパラメータ階層をパス指定で取得するAwsSsmEnv::PathFetcherが利用される。 この場合は後述のpath引数が必須となる。また、後述のrecursive引数を利用する。 この方法でパラメータを取得する場合は指定するパスに対してssm:GetParametersByPathの権限が必要。 以下、IAMポリシーの例を示す。 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": "ssm:GetParametersByPath", "Resource": "arn:aws:ssm:YOUR_REGION:YOUR_ACCOUNT_ID:parameter/your_path" } ] }

    :begins_withを指定した場合はパラメータ名が指定した文字列から開始するパラメータを取得するAwsSsmEnv::BeginsWithFetcherが利用される。 この場合は後述のbegins_with引数が必須となる。 この方法でパラメータを取得する場合は指定するパスに対してssm:DescribeParametersおよびssm:GetParametersの権限が必要。 以下、IAMポリシーの例を示す。 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "arn:aws:ssm:YOUR_REGION:YOUR_ACCOUNT_ID:parameter" }, { "Sid": "", "Effect": "Allow", "Action": "ssm:GetParameters", "Resource": "arn:aws:ssm:YOUR_REGION:YOUR_ACCOUNT_ID:parameter/your_path/*" } ] }

    fetchAwsSsmEnv::Fetcherを実装したクラスのインスタンス、もしくはeachメソッドを持つ インスタンスを指定した場合はそのインスタンスをそのまま利用する。

  • :naming (Symbol, AwsSsmEnv::NamingStrategy, Object)

    環境変数名を導出方法を指定する。 指定可能な値は:basename, :snakecaseまたはAwsSsmEnv::NamingStrategyを実装したクラスのインスタンス、parse_nameメソッドを持ったクラスのインスタンスのいずれか。 デフォルトは:basename

    namingを指定しなかった場合、もしくは:basenameを指定した場合はパラメータ階層の最後の階層を変数名とするAwsSsmEnv::BasenameNamingStrategyが利用される。 この場合、例えば/myapp/production/DB_PASSWORDというパラメータ名であればENV['DB_PASSWORD']にパラメータ値がインジェクションされる。

    :snakecaseを指定した場合はパラメータ名のスラッシュ区切りをアンダースコア区切りにした結果を大文字に変換して環境変数名とするAwsSsmEnv::SnakeCaseNamingStrategyが利用される。 この場合、例えば/myapp/production/DB_PASSWORDというパラメータ名であればENV['MYAPP_PRODUCTION_DB_PASSWORD']にパラメータ値がインジェクションされる。 後述のremoved_prefix引数で除外する先頭文字列を指定することができる。 また、後述のdelimiterオプションでアンダースコアに変換する文字を指定できる。 以下の例では/myapp/production/db/passwordというパラメータがENV['DB_PASSWORD']にインジェクションされる。

    AwsSsmEnv.load(naming: :snakecase, removed_prefix: '/myapp/production')

    AwsSsmEnv::NamingStrategyを実装したクラスのインスタンス、もしくはparse_nameメソッドを持つ インスタンスを指定した場合はそのインスタンスをそのまま利用する。

  • :path (String)

    fetchに何も指定していない場合、もしくは:pathを指定した場合は必須となる。 パラメータを取得するパス階層を指定する。 下の例では/myapp/web/production直下のパラメータが取得される。

    AwsSsmEnv.load(path: '/myapp/web/production')

  • :recursive (Boolean)

    fetchに何も指定していない場合、もしくは:pathを指定した場合に利用する。 指定したパス階層以下のパラメータをすべて取得する。 下の例では/myapp/web/production以下すべてのパラメータが取得される。

    AwsSsmEnv.load(path: '/myapp/web/production', recursive: true)

  • :begins_with (String, Array<String>)

    fetch:begins_withを指定した場合は必須となる。 取得するパラメータ名のプレフィクスを指定する。配列で複数指定することも可能(OR条件となる)。 下の例ではmyapp.web.productionで始まる名前のパラメータが取得される。

    下の例では 'myapp.web.production' で始まる名前のパラメータが取得される。 irb> AwsSsmEnv.load(path: 'myapp.web.production')

  • :removed_prefix (String)

    naming:snakecaseを指定した場合に利用される。 環境変数名から除外するパラメータ名のプレフィクスを指定する。 :removed_prefixが指定されておらず、:begins_withもしくは:pathが指定されていた場合はそれを利用する。

  • :delimiter (String, Regexp)

    naming:snakecaseを指定した場合に利用される。 アンダースコアに変換する文字列もしくは正規表現を指定する。 デフォルトはスラッシュ(/)。

  • fetch_size (Integer)

    一度のAWS API実行で取得するパラメータ数を指定する。 :path指定の場合は最大値は10でデフォルトも10:begins_with指定の場合は最大値は50でデフォルトも50である。通常このパラメータを指定することはない。

See Also:

Since:

  • 0.1.0



151
152
153
# File 'lib/aws-ssm-env.rb', line 151

def load(**args)
  AwsSsmEnv::Loader.load(**args)
end

.load!(**args) ⇒ Object

overwriteオプションを付与した AwsSsmEnv::Loader#load の委譲メソッド。

See Also:

Since:

  • 0.1.0



157
158
159
# File 'lib/aws-ssm-env.rb', line 157

def load!(**args)
  AwsSsmEnv::Loader.load(**args.merge(overwrite: true))
end