58991


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 に

[code]

    SetEnv AWS_PROFILE default
    
[/code]

というのをかいて service httpd restart してみたんですが  
Fuel PHP 内で

[code]

    Log::debug(print_r($_ENV, true));
    
[/code]

の出力は空配列になります

fuel_root/public/.htaccess に書いてみてもやはり空のままです

<https://uehatsu.info/tech/archives/2015/04/how-to-setenv-systemctl-on-
centos7.html>  
こういう記事を見つけたので  
vi /etc/sysconfig/httpd に

[code]

    export AWS_PROFILE=staging
    
[/code]

とかいて service httpd restart してみましたがやはりだめでした  
(export なしでもだめで念の為つけてもだめでした）

apache の環境変数と Fuel の実行プロセスが持つ環境変数はまた別なのでしょうか…

それとも fuel 側で環境変数の値は $_ENV でみるものではないんでしょうか

# 追記

PS コマンドでプロセスを見るとこんな感じになってて root 起動の親プロセスが１つあって  
それから派生した apache ユーザの子プロセスがいくつかたっています

[code]

    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
    
[/code]

ps コマンドに環境変数を表示する eww というオプションがあるみたいで  
<https://codeday.me/jp/qa/20190817/1466690.html>

[code]

    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
    
[/code]

となっていて親プロセスの環境変数には確かに設定があるみたいなのですが  
子プロセスには引き継がれていないみたいなのです…  
もうどうしようもない感じでしょうか…

# 追記

PHP 側で $_ENV は空だったんですが  
getenv('AWS_PROFILE') には staging という値が入っていました  
また $_SERVER には

[code]

    [REDIRECT_AWS_PROFILE] => staging
    
[/code]

というキー名に REDIRECT というのがついて入っていました

ただ aws-sdk は依然としてキーを参照してくれません  
/root/.aws  
/home/apache/.aws  
両方に設定をおいてあるんですが…

とりあえず Fuel 上で環境変数を読むということはできたので質問は〆させていただきます

httpd.conf  
fuel_root/public/.htaccess  
/etc/sysconfig/httpd  
のどれを変更したことで実現できたのかはわからないです


CC BY-SA 4.0
2019-09-11T04:39:06.353
58978
2019-09-11T09:34:03.887
2019-09-11T07:59:50.577
question
apache amazon-s3 fuelphp
Apache + Fuel PHP に環境変数を渡す方法


/etc/sysconfig/httpd  
に export 付きで宣言することで fuel 内でも読めるようです  
export なしではダメでした

[code]

    export AWS_ACCESS_KEY_ID=xxxx
    export AWS_SECRET_ACCESS_KEY=xxxx
    
[/code]

をかいておくと fuel 内で credentials を空にした状態でS3アクセスができました


CC BY-SA 4.0
2019-09-11T09:34:03.887
58991
2019-09-11T09:34:03.887
58978
answer