JAWS-UG コンテナ支部 #15 イベントレポート

# はじめに
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今日はこれにきました！<br>JAWS-UG コンテナ支部 #15 <a href="https://t.co/FTwTlTw9op">https://t.co/FTwTlTw9op</a> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167015815494819840?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
ブログ枠で参加したので、Qiitaで概要をまとめていきたいと思います！！


# タイムテーブル
||||
| ---|---|--- |
| 時間 | 内容 | 登壇者 |
| 18:30 | 受付開始 | - |
| 19:00 - 19:05 | 会場、UG 案内など |  |
| 19:05 - 19:25 | AWS コンテナサービスアップデート | トリ / Amazon Web Services Japan |
| 19:25 - 19:55 | Amazon ECSの開発環境を動的に管理するツールを作ってみました | プログラミングヤクザ / サイバーエージェント |
| 19:55 - 20:00 | 休憩 | --- |
| 20:00 - 20:30 | Fargate運用物語 ～ 本当にコンテナで幸せになりますか？ ～ | 曽根 壮大 / オミカレ |
| 20:30 - 21:00 | How Fast can your Fargate Scale? | Pahud Hsieh / Amazon Web Services |
| 21:00 | 終了・撤収 ||

# セッション
## 1. AWS コンテナサービスアップデート by トリ　Twitter: @toricls
2019年の AWS コンテナ関連サービスアップデートをササササッと振り返り

- ECS EKS デプロイコントローラーの発表(これでプチカナリアリリースなどがユーザーカスタマイズで可能)
- [Amazon ECS で新しいローカルのテストツールが利用可能](https://aws.amazon.com/jp/about-aws/whats-new/2019/03/new-local-testing-tools-now-available-for-amazon-ecs/)
- [AWS Fargate および Amazon ECS が ECS サービスの外部デプロイメントコントローラーをサポート](https://aws.amazon.com/jp/about-aws/whats-new/2019/03/aws-fargate-and-amazon-ecs-support-external-deployment-controlle/)
- [Amazon EKS が Amazon CloudWatch への Kubernetes コントロールプレーンログの配信を開始](https://aws.amazon.com/jp/about-aws/whats-new/2019/04/amazon-eks-now-delivers-kubernetes-control-plane-logs-to-amazon-/)
- [Amazon ECS が awsvpc ネットワークモードの ENI の密度の上限を改善](https://aws.amazon.com/jp/about-aws/whats-new/2019/06/Amazon-ECS-Improves-ENI-Density-Limits-for-awsvpc-Networking-Mode/)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">コンテナワークロードのためのメトリクス・ログモニタリングサービス、CloudWatch Container Insights の Public Preview を発表しました！！ <a href="https://twitter.com/hashtag/KubeCon?src=hash&amp;ref_src=twsrc%5Etfw">#KubeCon</a><br><br>続) <a href="https://t.co/pRCZtHexcp">pic.twitter.com/pRCZtHexcp</a></p>&mdash; ポジティブな Tori (@toricls) <a href="https://twitter.com/toricls/status/1130505697651765250?ref_src=twsrc%5Etfw">May 20, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
これ、最近パブリックプレビューしてめちゃくちゃありがたい、、(ECS)
https://qiita.com/fukubaka0825/items/a6f5f528771fb63a3192
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">こう聞いていくとほんと目まぐるしくECS、EKS進化してる<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167017123073257473?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">シークレットとかコンテナ依存関係がないECSなんてもう考えられないもんな。。<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167018378734628865?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">「これからはawsvpcネットワークモード、ガンガンつかっちゃいなYO！！」<br><br>Yo! Yo!<br><br>/ &quot;ECSにおけるインスタンスのENI制限が大幅に改善されました！！ ｜ DevelopersIO&quot; <a href="https://t.co/gE5SSJhClM">https://t.co/gE5SSJhClM</a></p>&mdash; ポジティブな Tori (@toricls) <a href="https://twitter.com/toricls/status/1136932970332246016?ref_src=twsrc%5Etfw">June 7, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Fluentdも頼むよ。。。 &gt;Fargate logging<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167020105726709761?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">最近はお仕事でECS使ってるのでだいたい追いかけられてたな<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167020796771880960?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- toriさんのリリースツイートで一番伸びたのが↓　笑
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">これです<a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a> <a href="https://t.co/skktRiWFsw">https://t.co/skktRiWFsw</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167020974509674496?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 2. Amazon ECSの開発環境を動的に管理するツールを作ってみました by プログラミングヤクザ　Twitter: @prog893
- （プログラミングヤクザって勝手につけられたらしい。。）
- PRごとに専用のECS環境を動的に作成、削除できるツールを紹介 EDENというツール
 - REST風APIとCLIツールの二つ
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">手動から自動化へ devxx方式の自動化を考える<br>- CloudFormation/Terraform/CDK<br>- IaaCのソース自体がGit管理で、自動コミットとか自動apply　怖い<br>- のでやめて、自前で増やしたり減らしたりする<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167023547639689217?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a> <a href="https://t.co/m9M0H1G75c">pic.twitter.com/m9M0H1G75c</a></p>&mdash; Shota Tsuge (@shotaTsuge) <a href="https://twitter.com/shotaTsuge/status/1167023753294798850?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
- タップル誕生にEDENを導入
 - 作成は3秒　削除は2秒 　LoadBalancerを作ってないから
 - 自動デプロイでlead timeが短縮できる
 - Terraformのdev00以外のdevが消せる
- 今後のロードマップやOSS化について、サイバーエージェントのインフラ周りのツールのOSS化プロジェクトについて紹介
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Baikonur Project　サイバーエージェントのOSS Project<br>Terraform Moduleでチェックしよう<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167025979908182016?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/zngFXGBljF">https://t.co/zngFXGBljF</a><br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167026247634837504?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Q「環境のコピーの具体的な方法は？」A「リファレンス環境を都度describeして、可変パラメータ部分を上書きしてAPIを叩く。ここではterraformとかは使わない」 <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; 濱田孝治（ハマコー） (@hamako9999) <a href="https://twitter.com/hamako9999/status/1167027831215292416?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">本日の資料です〜<a href="https://t.co/gwjgaTKL5o">https://t.co/gwjgaTKL5o</a><a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; さわやかな プログラミングヤクザ (@prog893) <a href="https://twitter.com/prog893/status/1167028249227980800?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 3. Fargate運用物語 ～ 本当にコンテナで幸せになりますか？ ～ by 曽根 壮大(そね たけとも) Twitter: @soudai1025
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">JAWS-UG コンテナ支部 #15 での登壇資料です <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a><a href="https://t.co/RSG0j6s4xA">https://t.co/RSG0j6s4xA</a></p>&mdash; そーだい@初代ALF (@soudai1025) <a href="https://twitter.com/soudai1025/status/1163826412463087616?ref_src=twsrc%5Etfw">August 20, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
### Fargateにしてみた
- 大前提はEC2で困っていること 困ってないならコンテナ、ECS、Fargate必要ない
- オミカレというサービスをやっていて、Fargateで動いている　https://party-calendar.net/
- EC2よりもFargateを使いたい
 - 根拠なき使用は悪 つらみを積み重ねるだけ
- よくあるEC2で辛かったこと
 - AMIやAnsibleの管理
 - 手元の環境
- Ansibleで冪等性担保
 - どんどんオートスケール時の起動が遅くなる
  - AMIのゴールデンディスクも併用する
  - そうするとRoleの管理が非常に煩雑になる。。。。
- そもそも冪等性は幻想
- 複雑になったAnsibleのメンテは大変
 - 最初にちゃんと設計していることは稀
 - スタートアップだと特にそう思う
 - 頻繁に環境に手を入れるならコンテナの方が向いている 
 - バチっと決まっているならAnsibleはとても便利
- VagrantとAnsibleでシンプルなLAMPを維持するのは楽だった
-　ただ肥大していくと、乱立するVM。。。
- だんだん開発環境と本番環境が乖離してくる。。
- デプロイツールは昔はエースエンジニアがオレオレで作っていた
  - deployをシンプルにしよう
  - **dockerfileメンテ、コンテナはシンプルにCDできる！！！最高**
 
### Fargateで辛かったこと
- 最初の環境構築　知見がなくて失敗。。
 - 既存とVPCを容易に分けてしまった
 - 作りながら学ぶ状態
 - パフォーマンスの計測が甘かった
 - ネットワークのdebugが大変
- トラブルシューティング
 - デバッグしようとするといない。。
- ログ
- モニタリング
 - 永続的に個別でとりたい、、チューニングむずい

### Fargateにしてよかったこと
- 開発環境と本番環境の乖離が起きない
- デプロイがシンプルになる
- 本番にあるコンテナは全て同じ
- ロールバックが簡単
 - ECRの履歴で戻せる
- コンテナの外に閉じているしホストもないので、EC2より守りやすい
- Stagingや開発環境の複製が簡単
- パートナーにも環境を提供しやすい
- CI/CDの環境構築がより簡単になる

### コンテナの勘所
- コンテナの勘所を抑えないと運用は難しい
　- ログとかモニタリングが非常に難しい
- それ、レンタルサーバでできるよってことよくある
- テスト書く前にコンテナ化するな
- 自分たちの解決したい問題のスコープを大事にする
- コンテナ技術を使うなら仕組みかが重要(状態を持たないからこそ、仕組みかできる)

### まとめ
- 適材適所で自分のユースケースにあった部分をコンテナ化する
- 技術で課題解決する
- 運用のことは考えよう
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">デバックしようとするといないのめっちゃわかる。。<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167035663994109952?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## 4. How Fast can your Fargate Scale? by Pahud Hsieh　Twitter: @pahudnet
**AWS Fargate でスパイキーなトラフィックに対して10秒以内にオートスケーリングをトリガーする話**

- Fargateが好きなのはServerless Containerだから
- しかし、どれくらい早くFargateはScaleしてくれる？？
- 普通のスケールであれば1~3分くらいはかかる Monitor Detenctionだけで
    -  iamgeが小さければ小さいほど リージョンがかみ合っていれば それ以降は時間がかからない
    -  このMonitor Detectionの時間を短縮する
    -  CloudWatchを使わない
- Step functionがループでイテレーションを回して、監視しているっぽい
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">オラオラスケールアウトするマンの図 <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a> <a href="https://t.co/rSf2SX9FAw">pic.twitter.com/rSf2SX9FAw</a></p>&mdash; ポジティブな Tori (@toricls) <a href="https://twitter.com/toricls/status/1167040861827297280?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
- CDKで２、３行で各リソースが用意される
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">たったこれだけで Fargate タスクが起動して ALB まで用意されるの楽ですよね <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a> <a href="https://t.co/rTz4JL7gaH">pic.twitter.com/rTz4JL7gaH</a></p>&mdash; ポジティブな Tori (@toricls) <a href="https://twitter.com/toricls/status/1167042862552240128?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
- publicに今回のサンプルのソースなどを挙げる予定なので、チェックを!
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">本人のサンプルコードここにあった <a href="https://t.co/2dXFkkwFZO">https://t.co/2dXFkkwFZO</a> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a> <a href="https://t.co/wrYbcaPmCl">https://t.co/wrYbcaPmCl</a></p>&mdash; Ryo Nakamaru (@pottava) <a href="https://twitter.com/pottava/status/1167043645934956544?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">私もCDKとGoで作るSlack botの本を、CDKの導入部分から書くので是非チェックを<br> <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a> <a href="https://twitter.com/hashtag/%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B87?src=hash&amp;ref_src=twsrc%5Etfw">#技術書典7</a></p>&mdash; nari@技術書典7📖 GoとAWSで作る本格slackbot (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1167043391739199489?ref_src=twsrc%5Etfw">August 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>