LoginSignup
11
10

More than 1 year has passed since last update.

ECS(Fargate)でLaravelの環境変数の設定方法

Last updated at Posted at 2021-03-07

AWS ECSでLaravelのコンテナを動かす場合、DB接続情報などの環境変数を設定する方法を考えました。
結論から言うとFargateのタスク定義の環境変数に設定する方法が一番いいのでは?と考えました。

環境変数の設定方法

Laravelでは.envに環境変数を記述します。ECSで公開する場合、本番環境用の.evnファイルをDockerイメージに入れてビルドするという記事が多いように思います。
この方法だと少し面倒で.envファイルを2種類用意しなければなりません。
また、Volumesを使ってEFSなどを参照する方法もあるかと思いますがどちらにしろ.envファイルが2種類必要になります。

環境変数の参照方法

Laravelで環境変数を取得する場合env()関数を使用します。

databese.php
        ...
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            ...

このenv()関数ではOSの環境変数も取得することができます。
例のdatabase.phpのDB_HOSTが、もし.envに無くOSの環境変数にDB_HOSTがあればその値を参照します。

ローカルのDockerで試してみる

  1. .envファイルからDB_HOSTを削除します。
  2. DockerのenvironmentでDB_HOSTを設定します。
docker-compose
  php:
    container_name: myWork-php
    ...
    environment:
      DB_HOST: myWork-db
    ...

  db:
    image: mysql:5.7
    container_name: myWork-db

これでDockerを起動した場合、コンテナの環境変数にはDB_HOSTがセットされ、Laravelはそれを参照するようになります。

# env | grep DB_HOST
DB_HOST=myWork-db

Fargateでも環境変数を設定できる

ECSのタスク定義はdockerと同じことができるので、コンテナの環境変数をセットすることができます。

image.png

環境変数はSSMのパラメータリストから取得することができるので、よりセキュアで疎結合な設定が可能です。

まとめ

以上によりローカルの開発環境の.envファイルをそのまま本番環境でも使用できるようになります。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10