概要
- インフラ勉強会3/10レミオロメンのECSであったECSのハンズオンを、Fargateも使ってやってみる
やってみる
Amazon ECSについて
クラスターについて
- クラスターのイメージ図
- 勉強会で出たイメージの説明
- Cluster: サッカーチーム
- Service: 監督
- Task: ポジション
- Container: 選手
- 選手をどこかのポジションに割り当てて、監督が指示を出すサッカーチーム
タスク定義を作る
- タスク定義の作成
- Fargate選択
タスクとコンテナの定義の設定
- タスク定義名を入力
- タスクロールはデフォルトの: ecsTaskExecutionRoleを指定
- ネットワークモードは
awsvpc
固定っぽい
Fargateタスクの設定
- タスク実行ロール: ecstaskExecutionRole
- タスクサイズは最小を選択
- タスクメモリ: 0.5GB
- タスクCPU: 0.25vCPU
コンテナを追加
- タスク定義内でコンテナを追加できる
- スタンダートで作る
- コンテナ名を入力
- イメージ
- dockerのhello-world的なイメージを使う
- dockercloud/hello-world
- メモリ: 128MB
- ポートマッピング: 80
- コンテナはコンテナインスタンス上のポートにアクセスしてトラフィックを送受信できるようになる
- ホストと異なるポートマッピングを指定するには
bridgeネットワークモード
を使う必要がある。 - Fargate 起動タイプを使用している場合、awsvpc ネットワークモードが必要です。(つまりホストと異なるポートマッピングはFargateだとできない)
- 詳細な設定は今回はやらない
- 作成ボタン押下!
- タスク定義作られた
- 最初はrevision:1
クラスターを作る
サービスの作成
サービスの設定
- 起動タイプ: Fargate
- タスク定義: 上記で作成したやつ
- クラスター: 上記で作成したやつ
- サービス名を入力
- タスクの数: 1
- タスクをいくつ実行するか。今回は特に並列とかしないので1
- 最小ヘルス率/最大率
- タスクを複数起動する時、サービスとしてどれくらい維持するか
- タスク2台で、最小ヘルス率50だと、タスクが最低1つ起動している状態となる。
- 50/100で設定
タスクの配置
- クラスター内のインスタンスにタスクを配置する方法を選択する
- AZバランススプレッド
- AZバランスビンパック
- ビンパック
- 最小数のインスタンスにメモリ単位でタスクをパックします。
- ホストごとに1つのタスク
- インスタンスごとにタスクを 1 つのみ配置します。
- カスタム
- 自分で定義
ネットワーク構成
- Fargateはawsvpcモード必須なので、VPC/サブネット/セキュリティグループの設定が必要らしい
- 今回ネットワークに関してはデフォルトのやつをそのまま使う
- クラスターVPC: デフォルトのやつ
- サブネット: デフォルトのやつ
- セキュリティグループ
- HTTP:80のみ
- パブリックIPの自動割当: ENABLED
- ALBなどは置かずにコンテナインスタンスに直アクセスしたいため
ヘルスチェック
- ELBを使ってヘルスチェックをする場合の設定
- 今回はコンテナインスタンスに直アクセスするためにELBは設定しない
Auto Scale
- サービスのAuto Scalingの設定
- AutoScalingGroupのように、タスクの最小数/必要数/最大数を指定する
- サービスのAuto Scaleをするためのロール(ecsAutoscaleRole)が必要っぽい
自動タスクスケーリングポリシー
- スケーリングポリシータイプ: ターゲットの追跡
- ターゲットの追跡: ターゲット値を設定し、その値に近づくようにタスクが調整されるっぽい
- ステップスケーリング: トリガーによってスケールアウト/インを設定するっぽい
確認
画面確認
- 起動したタスクから、Public IPを確認
- ブラウザでアクセスしてみる
My hostname
で表示されるIDはコンテナIDらしい
備考
Fargateを使ったときの所感
- EC2の管理がなくなった!
- (サーバはあるんだけどユーザからは)サーバレス!サーバレス!サーバレス!(に見える)
- コンテナインスタンスのインスタンスタイプを指定しなくて良い
- AMIの指定もないので、常に最新のAMIであがってくれる?
- コンテナインスタンスのタスク配置も、テンプレート選べば楽
- あとはEFSでボリュームの共通化もできれば完璧では・・・?
注意
- Fargateを使ったほうがチョットネダンタカイ
- 管理工数との見合いかと思う
最後
- クラスター削除しておしまい
- タスク定義を削除するときは、タスクグループでなくタスクを消す(タスクを選択して、revisionごとに消す)