ECS開発環境の時刻を変えたい

背景

開発環境の時刻を変えたい時があります。 「その時刻になった時の振る舞いを確認したい」 「ある時間帯をターゲットにした開発を行いたい」 などです。 そういった開発の時だけ夜間に来る、というのは現実的ではないので、手軽に開発環境の時刻を変える方法があると便利です。

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の箇所で

  1. 環境変数 TIMEZONE の値を Asia/Tokyo にする
  2. 環境変数 TIMEZONE自体を消す( この環境変数が無かった場合は Asia/Tokyo を設定するようにしています )

2つの方法があります。どちらでも同じ結果になり、デメリットは発生しないので、どちらでも良いです。 強いていうと、 2 の方が綺麗になるので良いかと思います。

変更後、[ 更新 ]->[ 作成 ]を押し、新しいタスク定義を作成します。

タスク定義を更新後、該当のサービスの再起動を行います。

User
CloudFront
ALB
EC2
RDS