Skip to content

Instantly share code, notes, and snippets.

@yuua
Last active October 9, 2020 07:03
Show Gist options
  • Save yuua/2dd59da43af9454fcf62232ef5dee86d to your computer and use it in GitHub Desktop.
Save yuua/2dd59da43af9454fcf62232ef5dee86d to your computer and use it in GitHub Desktop.

ecsとは

  • aws上でcontainerを利用したインフラを構築できるフルマネージドコンテナオーケストレーションサービス
  • 実行環境は EC2fargate から選択可能 (EC2にはsshできますがfargate起動タイプはsshできません)
  • タスク単位でコンテナの管理が可能
  • 常時起動が必要なコンテナは「サービス」
  • イベントやスケジュールにより処理を開始するコンテナは「タスクスケジュール」

ecsを使う場合...

Log周りは工夫が必要

基本的には標準出力に出すようにする -> cloud watch logsで確認可能 ログ管理ツールなどに出力したい場合は FireLens などを使ってログのルーティングが可能 https://qiita.com/charon/items/65ac91caa9dc5aec8635

ecsにデプロイする

0.IAMロール(必要であれば)
1.ECSクラスタの作成
2.ALBの作成(httpリクエスト受ける等の場合)
3.ECSタスクの定義
4.ECSサービスの定義

ecs クラスタの作成

ecsを実行するためのもの(GKEなどのクラスタと同等) CloudWatch Container Insights を有効にするとCPU/メモリ使用率などがCloudWatchに登録されます(月額料金UPします)

ALBの作成

ALBはいつもどおりにポチポチ作成を... (サービス定義時に作成するのでALB作成後ターゲットグループとリスナは削除しておいてください) LB周りの参考に...https://qiita.com/NaokiIshimura/items/bf4c21500a5f542dff9a

タスクの定義

  • タスクはサーバ定義みたいなもの
  • タスクの定義ではコンテナの実行場所、利用リソース、実行するコンテナの指定などを定義する
  • 指定できるコンテナレジストリはdockerhub / ecr
  • 同一タスク内の通信に関してはローカルホストでの指定になる

同一タスク内にnginx の後ろにアプリケーションサーバを置く場合localhostでの接続になるので、ポートマッピングなどは指定しないでもアクセスできます

サービスの定義

  • サービスを実行することで常時稼働のタスクを実現
  • サービスでは先程指定したtaskを指定し起動させてください
  • サービスの作成が完了するとtaskが起動しnginxのトップが見れると思います
  • タスク数を 1 から 2にすると冗長化構成になります(AutoScaringの設定はサービスから設定可能)

補足

  • 定期的なタスクの実行

ecsによるスケジューリング / cloud watch eventでのタスク実行 / state machineによるstep実行なども可能 実行コマンドはdockerfile上のCMD もしくは スケジュール作成時のコマンドの上書きでどうぞ

  • ecrへのlogin
 aws ecr get-login-password --region ap-northeast-1 --profile あれば | docker login --username AWS --password-stdin アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com 

実例

先程の nginxのコンテナの後ろにアプリケーションサーバを設置してより本番にのアプリケーションに近いものを作ってみよう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment