こんにちは、ちゃりおです。
現在、「.env」の管理がいけていなくて、なんとかしたい気持ちがあります。
SSM パラメータストアが良さそうだったので、さわってみました。
パラメータストアとは
AWS Systems Manager パラメータストア は、設定データ管理と機密管理のための安全な階層型ストレージを提供します。パスワード、データベース文字列、ライセンスコードなどのデータをパラメータ値として保存することができます。値はプレーンテキストまたは暗号化されたデータとして保存できます。次に、パラメータの作成時に指定した一意の名前を使用して値を参照できます。スケーラビリティ、可用性、耐久性に優れた パラメータストア は、AWS クラウドによってサポートされています。
設定データを管理できるサービスです。
無料で使えます。
公式ドキュメント AWS Systems Manager パラメータストア
ハンズオン
パラメータストアに値を保存・取得をやってみます。
「AWS SDK for PHP」を使います。
aws cliでもできるのですが、「AWS SDK for PHP」使ったことなかったので勉強がてらやってみます。
今回はローカルでやります。
前提条件
- ssmを操作可能なIAMユーザがあること(ec2でやる場合は、適切なIAMロールを割り当てる)
- php,composerがインストールされていること
- aws cliがインストールされていること
環境変数にアクセスキー等必要な情報を設定する
ec2などでIAMロール使う場合は、この手順は不要です。
ローカルでやるので、アクセスキーとかを環境変数に設定します。
$ export AWS_ACCESS_KEY_ID=xxxxxxxxxx
$ export AWS_SECRET_ACCESS_KEY=xxxxxx
$ export AWS_SESSION_TOKEN=xxxxxxxxxx(必要があれば)
AWS SDK for phpをインストールする
composerで「AWS SDK for php」をインストールします。
composer require aws/aws-sdk-php
公式ドキュメント AWS SDK for PHP バージョン 3 のインストール
パラメータストアに値を設定
パラメータストアに値を設定します。
下記のコマンドで、
「/MyService/Test/MaxConnections」に「100」
「/MyService/Test/my-password」に「p#sW*rd33」を設定しています。
$ aws ssm put-parameter --name "/MyService/Test/MaxConnections" --value 100 --allowed-pattern "\d{1,4}" --type String
$ aws ssm put-parameter --name "/MyService/Test/my-password" --value "p#sW*rd33" --allowed-pattern ".{8,20}" --type SecureString
階層構造は、「サービス名/環境/パラメータ」のようにしておくのが良さそうです。
(環境ごとに変えたいと思うので)
AWS SDK for phpで値を取得してみる
「/MyService/Test/」配下のパラメータを取得して、「.env」に出力するスクリプトを作ってみました。
この程度のことやるなら、シェルスクリプトで良さそうです。
出力結果 .env
MaxConnections=100
my-password=p#sW*rd33
まとめ
パラメータストアを触ってみました。
今回のように、「.env」に吐き出すと
サーバにログインできるユーザからは見れてしまいます。
しかし、「.env」に吐き出さないような形にできても
aws cli叩けばみえてしまうしなとも思います。
この辺が悩み中です。