背景
開発環境の時刻を変えたい時があります。 「その時刻になった時の振る舞いを確認したい」 「ある時間帯をターゲットにした開発を行いたい」 などです。 そういった開発の時だけ夜間に来る、というのは現実的ではないので、手軽に開発環境の時刻を変える方法があると便利です。
EC2 Linuxサーバですとdateコマンドなどで時間を変更できます( https://qiita.com/na0AaooQ/items/af6b853faf32c58c21d3 ) ただECS Fargate環境だと( システム時刻の変更に管理者権限が必要なため )上記の方法が使えません。 このため環境変数で開発環境のロケールを変更できるようにしてみました。
- Dockerコンテナの起動、複数コンテナの連携方法などの設定などはタスク定義に行います。「タスク」という単位でサーバが起動します。
- サービスという概念もあり、タスクが含まれます( 同じタスクを3セット立ち上げたりします)。 サービスにはロードバランサーとの接続など「Dockerと接続する外界」といった設定項目が含まれます。
※ この方法で時刻をずらした場合、なにかデプロイされる度に、設定は初期化されます。 なにか新しいリビジョンのものがCI経由でデプロイされると、この環境変数の設定は初期化されます。
手順
- AWS Webコンソールにログイン
- AWS_Fargateで目的の環境のタスク定義をここから探す( env27とか、そういったものです )
- 最新のタスク定義をクリック
- [新しいリビジョンの作成 ]
- [コンテナの定義]のコンテナ[ nginx ]と[ php-fpm ]のなど変更をします。 `片方だけだとエラーがでるはずです。
- [環境]の[Key]に環境変数名 TIMEZONE を入力、 値として任意のタイムゾーン( 例えば
America/Argentina/Buenos_Aires
のようなもの )を入力します。 ※ この『America/****』の文字列はスラッシュを含む全てです。 この地域はもうすぐ朝が来てしまう
などで、他の地域を設定したい場合、 地図と時差を確認 して このIBMのページの文字列をコピペします。
インフラへの設定が反映されたかを確認するのは良い習慣です。確認する場合は、設定したコンテナをクリック、環境変数が設定されているかで確認できます。
- [ 作成 ]をクリック *これでできた新しいリビジョンのタスク定義で、サービスを再起動します
時刻のロケールを戻す
2つの方法があります。 このページの[手順]の[新しいリビジョンの作成]のクリック後、 上記同様、nginxとphp-fpmの2つのコンテナの環境変数を変更します。 [コンテナの定義]のコンテナ[ nginx ]と[ php-fpm ]のそれぞれに対して設定を行います。 [環境]の[Key]のTIMEZONEの箇所で
- 環境変数 TIMEZONE の値を
Asia/Tokyo
にする - 環境変数 TIMEZONE自体を消す( この環境変数が無かった場合は Asia/Tokyo を設定するようにしています )
2つの方法があります。どちらでも同じ結果になり、デメリットは発生しないので、どちらでも良いです。
強いていうと、 2
の方が綺麗になるので良いかと思います。
変更後、[ 更新 ]->[ 作成 ]を押し、新しいタスク定義を作成します。
タスク定義を更新後、該当のサービスの再起動を行います。