ECSをEC2クラスタからfargateに移行するやり方

sakura
sakura2019
今年も桜がちった。写真てアップで撮るより周りの風景も入れたほうが面白いよね。 だけどいろいろ写ってると特定されちゃうよねえ🌸

今回はphpAPIをECSのEC2クラスタモードで動かしていたんだけど、 それをfargateに移行するという話🐶

もともと使っていたecsのパラメータの設定とdockr-compose.ymlは以下。 nginxとphp-fpmを立てている

💁こいつをfargate化していく💁

パラメータファイル

version: 1
task_definition:
  ecs_network_mode: bridge
  task_size:
    mem_limit: 0.5 GB
  services:
    php-fpm:
      essential: true
      mem_reservation: 256m
    nginx:
      essential: true
      mem_reservation: 128m

docker-compose.yml

version: '2'
services:
  nginx:
    image: hogehoge/nginx
    ports:
      - ":80"
    depends_on:
      - php-fpm
    links:
      - php-fpm
    volumes_from:
      - php-fpm
  php-fpm:
    image: hogehoge/php-fpm

そしてサービスを更新するときのコマンドはこれ↓

 ecs-cli compose \
      --file docker-compose.yml \
      --ecs-params [ECSのパラメータファイル] \
      --project-name [プロジェクトネーム] \
      service \
      --cluster [クラスタネーム] \
      --region ap-northeast-1 \
      up \
      --launch-type EC2 \
      --deployment-min-healthy-percent 50 \
      --target-group-arn [ターゲットグループARN] \
      --container-name nginx \
      --container-port 80 \
      --timeout 10

そして。。無事fargate化されたのが、これだ

1 2 3 ✍️

ecsパラメータファイル

version: 1
task_definition:
  ecs_network_mode: awsvpc  👈 ネットワークモードがawsvpcに変える
  task_execution_role: [タスク実行ロールARN] 👈task_execution_roleなるものが必要になる
  task_size:
    mem_limit: 1 GB
    cpu_limit: 0.25 vCPU 👈CPUリミット指定
  services:
    php-fpm:
      essential: true
      mem_reservation: 512m
    nginx:
      essential: true
      mem_reservation: 256m
run_params:
  network_configuration:
    awsvpc_configuration:
      subnets: [サブネットID]
      security_groups:
        - [セキュリティグループID]
      assign_public_ip: DISABLED

docker-compose.yml

version: '2'
services:
  nginx:
    image: hogehoge/nginx
    ports:
      - "80:80"  👈 awsvpcモードだとhost側のportも明示的に指定してやる必要がある.
    depends_on:
      - php-fpm
    volumes_from:
      - php-fpm
  php-fpm:
    image: hogehoge/php-fpm

実行コマンド

ecs-cli compose \
      --file docker-compose.yml \
      --file ecs-compose.yml \
      --ecs-params [パラメータファイル] \
      --project-name [プロジェクトネーム] \
      service \
      --cluster [クラスタネーム] \
      --region ap-northeast-1 \
      up \
      --launch-type FARGATE \ # FARGATEに
      --deployment-min-healthy-percent 50 \
      --target-group-arn [ターゲットグループARN] \
      --container-name nginx \
      --container-port 80 \
      --timeout 10

❗気をつけるポイント

タスク実行ロールを作る必要がある

Amazon ECS タスク実行 IAM ロール - Amazon Elastic Container Service

Amazon ECS コンテナエージェントはユーザーに代わって Amazon ECS API アクションを呼び出すため、エージェントがユーザーに属していることをサービスに伝えるために、IAM ポリシーおよびロールが必要です。

awsvpcモードになるとlink機能が使えなくなる代わりに他のコンテナにlocalhostでアクセスできる。(portを指定してアクセス)

これがけっこうハマりどころ

fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass 127.0.0.1:9000; 👈これが正解(nginxコンテナからポート9000でphp-fpmコンテナにアクセスできる)
       # fastcgi_pass php-fpm;       👈 これはだめ(dockerのlink機能を使ってしまっている)!
       fastcgi_index index.php;
       include fastcgi_params;

ガンバ🙋

nuro光の開通で困ったこと おすすめのテクニック

結論から言うとまだ開通できていません

 

たしか申し込んだのは2月の頭だったのでもう一ヶ月以上たつ

そもそも開通までに時間がかかることは公式サイトでもも明記されているので文句はないけど色々めんどくさかったので記録

 

 

宅内工事

まずはじめに宅内工事の日程調整がsmsで飛んできた。かんたんに調整できて感動していた。

 

宅内工事当日、作業員の方が来たがマンション一階のMDFの鍵が空いていないということで

次までに開けといてくださいと速攻で帰ってしまった。すごく時間に追われている感じだった。感情も希薄な感じがした。

 

管理会社に連絡を取った。MDFの鍵は宅内工事の日程を事前に教えてくれれば開けておきますとのことだったのでnuro光に電話して次の予約を取ろうとしたのだが…

 

つながらないっ

 

一時間ぐらい電話を繋ぎっぱなしで待ってるのだけど、糞音割れした音楽が延々と流れているだけ!電話のサンプリング周波数って低いんだからそれに合わせて曲を選んでほしい!!!

 

ここで、so-netのサポートページでLINEによる質問窓口があるのを発見した。

すでにso-netの契約番号等を持っていたのでそちらで質問を投げた。

 

そうするとこちらの窓口では予約はできないが、後日担当からかけ直す手配をしてくれた👯やったね!

 

その後宅内工事では作業員の方が3人ぐらい来て1時間ぐらいで完了。

 

あとは宅外工事だけなのだけど…

nuro光から電話があり追加の工事が必要なので許可を取りたいから管理会社の連絡先を教えてくれとのこと

 

しかし、バスの中で連絡先を持ってなかったので

後でかけ直すといって切ってしまった…

これが間違いだった!

nuro光とやり取りするときは必ず時間をおいてかけ直してもらうことが重要!!なぜならこちらから連絡を取るのことは不可能に近いから

 

そうして何日も音割れミュージックを聞くことになってしまった

 

朝イチでかけたらつながったけどね

 

MDFにスペースがないから、ボックスをつけたいんだってさ

 

いいですか何度も言いますが

nuro光とやり取りするときは必ず向こうから連絡をとってくれるようにしてもらいましょう。

 

続く