Help us understand the problem. What is going on with this article?

使ってますか? パラメータストア

More than 1 year has passed since last update.

使ってますか? パラメータストア

by wizpra-koyasu
1 / 14

こんにちは

Emotion Techの子安です。

最近使っているもの: Docker / Rails / Python / Digdag

Emotion_Tech_logo_yoko.small.png


今日のお話

AWS System Manager パラメータストアは、シンプルながらコンテナでもファンクションでも活用できるサービスです。そんなパラメータストアの概要と、手間味噌ですが少し便利に使うためのライブラリについてお話しします。


ある日の○○支部の懇親会

私: 「環境変数をタスク定義ごとに展開するのが面倒くさいですよねー」
中の人: 「パラメータストア使ったらどうですか」
私: 「ふむふむ! (意訳: 何だっけそれ??)」


パラメータストアとは

一言で言えば、設定値を保管してくれる場所。

詳細はこちらに → AWS Systems Manager パラメータストアとは


パラメータの階層化

システム構成に合わせて階層化可能。

イメージ:

/FooSystem
    `-- /Production
            `-- /AppRole
                   `-- /DB_HOST='dbhost.prod.xxxx'
                   `-- /DB_USER='dbuser'
                   (...)
    `-- /Development
            `-- /AppRole
                   `-- /DB_HOST='dbhost.dev.xxxx'
                   `-- /DB_USER='dbuser'
                   (...)

階層化されたパラメータの利用

aws ssm get-parameters-by-path --path /FooSystem/Production/AppRole
{
    "Parameters": [
        {
            "Name": "/FooSystem/Production/AppRole/DB_HOST",
            "Type": "String",
            "Value": "dbhost.prod.xxxx",
            "Version": 1
        },
        {
            "Name": "/FooSystem/Production/AppRole/DB_USER",
            "Type": "String",
            "Value": "dbuser",
            "Version": 1
        },
        { "...": "..." }
    ]
}

ここまでのまとめ

パラメータストアを使うと、

各コンポーネントが自身の役割を特定できる情報を知っていれば、その他の設定情報をコンポーネント自身で取得できる。

先ほどの例だと、 $SYSTEM_NAME, $ENV_NAME, $ROLE_NAME といった情報を与えておけば、パラメータストアから具体的なDB接続情報を取得することができる。


Pythonライブラリ aws-paramstore-py

pipでインストールできるライブラリを作った。

詳細はこちらに → aws-paramstore-py


実現したいことは何か

awscliやSDKの戻り値には、いろんな情報が含まれている。(特にパラメータ名も階層のトップからフルパスで入っている)

実際的なユースケースとしては、 コンポーネントが利用するパラメータを、環境やらロールやらを意識しなくても取得できる と嬉しい。

$SYSTEM_NAME --\
                   --------------    /--> $DB_HOST
$ENV_NAME ------->| パラメータストア |--
                   --------------    \--> $DB_USER
$ROLE_NAME ----/

aws-paramstore-pyの使い方

インストール:

pip install aws-paramstore-py
import aws_paramstore_py as paramstore

params = paramstore.get('FooSystem', 'Production', 'AppRole')

# { 'DB_HOST': 'dbhost.prod.xxxx',
#   'DB_USER': 'dbuser' }

Bashでも

eval "$(aws-pspy 'FooSystem' 'Production' 'AppRole' --bash-export)"

# export DB_HOST='dbhost.prod.xxxx'
# export DB_USER='dbuser'

まとめ

AWS System Manager パラメータストアを利用すると、(コンテナ・ファンクション問わず) 各コンポーネントが、自分自身の設定値を能動的に取得できる ようになる。

aws-paramstore-py も是非お試しを。フィードバック歓迎!!


ご清聴ありがとうございました。

emotion-tech
顧客の声を起点とした経営課題の解決、サービス品質の向上を行うサービス、「EmotionTech」の開発・運営
https://www.emotion-tech.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした