Apache + Fuel PHP に環境変数を渡す方法
Fuel PHP の API サーバーを最近 EC2 に引っ越しして
aws-sdk の credentials を削除して EC2 Role を見に行くようにしたのですが
当然ですが非EC2 の docker 上の開発環境で動かなくなりました
(いままでは config にキーを書いて読み込んでいたんですがセキュリティ要件でソースにキーをおくのがNGになったため)
単に php スクリプトであれば AWS_PROFILE を設定すれば
自動的に AWS_PROFILE に設定した .aws/ 内をみにいってくれるんですが
docker 上の apache + php で動いている fuel-php 上で
credentials なしで aws-sdk を実行する方法はありますか?
開発環境なので設定ファイル変更もリスタートしたりするのも自由にやってOKなんですが
AWS_PROFILE をセットして service httpd restart をしても認識してくれません
httpd 自体は apache というユーザで動いてるみたいなのですが
/home/apache の下に .aws を作る必要があるのでしょうか
作ったとしても AWS_PROFILE をどうやって認識させればいいでしょうか
nginx + unicorn + rails では起動ユーザの bashrc にかいておけば ENV にも入ってるし rails 内で認識してくれたんですが apache + fuel-php のようなデーモンプロセスで aws-sdk をソースコード外の credential 情報から使う方法が知りたいです
追記
httpd.conf に
SetEnv AWS_PROFILE default
というのをかいて service httpd restart してみたんですが
Fuel PHP 内で
Log::debug(print_r($_ENV, true));
の出力は空配列になります
fuel_root/public/.htaccess に書いてみてもやはり空のままです
https://uehatsu.info/tech/archives/2015/04/how-to-setenv-systemctl-on-centos7.html
こういう記事を見つけたので
vi /etc/sysconfig/httpd に
export AWS_PROFILE=staging
とかいて service httpd restart してみましたがやはりだめでした
(export なしでもだめで念の為つけてもだめでした)
apache の環境変数と Fuel の実行プロセスが持つ環境変数はまた別なのでしょうか…
それとも fuel 側で環境変数の値は $_ENV でみるものではないんでしょうか
追記
PS コマンドでプロセスを見るとこんな感じになってて root 起動の親プロセスが1つあって
それから派生した apache ユーザの子プロセスがいくつかたっています
root 96314 0 0 06:29 ? 00:00:00 /usr/sbin/httpd
apache 96323 96314 0 06:29 ? 00:00:00 /usr/sbin/httpd
apache 96324 96314 0 06:29 ? 00:00:00 /usr/sbin/httpd
apache 96325 96314 0 06:29 ? 00:00:00 /usr/sbin/httpd
apache 96327 96314 0 06:29 ? 00:00:00 /usr/sbin/httpd
apache 96328 96314 0 06:29 ? 00:00:00 /usr/sbin/httpd
ps コマンドに環境変数を表示する eww というオプションがあるみたいで
https://codeday.me/jp/qa/20190817/1466690.html
ps eww -C httpd
PID TTY STAT TIME COMMAND
96314 ? Ss 0:00 /usr/sbin/httpd TERM=xterm AWS_PROFILE=staging PATH=/sbin:/usr/sbin:/bin:/usr/bin PWD=/ LANG=C SHLVL=2 _=/usr/sbin/httpd
96323 ? S 0:00 /usr/sbin/httpd
96324 ? S 0:00 /usr/sbin/httpd
96325 ? S 0:00 /usr/sbin/httpd
96327 ? S 0:00 /usr/sbin/httpd
96328 ? S 0:00 /usr/sbin/httpd
となっていて親プロセスの環境変数には確かに設定があるみたいなのですが
子プロセスには引き継がれていないみたいなのです…
もうどうしようもない感じでしょうか…
追記
PHP 側で $_ENV は空だったんですが
getenv('AWS_PROFILE') には staging という値が入っていました
また $_SERVER には
[REDIRECT_AWS_PROFILE] => staging
というキー名に REDIRECT というのがついて入っていました
ただ aws-sdk は依然としてキーを参照してくれません
/root/.aws
/home/apache/.aws
両方に設定をおいてあるんですが…
とりあえず Fuel 上で環境変数を読むということはできたので質問は〆させていただきます
httpd.conf
fuel_root/public/.htaccess
/etc/sysconfig/httpd
のどれを変更したことで実現できたのかはわからないです