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

## まえがき
[JAWS-UG コンテナ支部 #15](https://jawsug-container.connpass.com/event/143245/) にブログ枠で参加したので、レポートを書きます。


## 懐かしのツイートと振り返るAWSコンテナサービスアップデート - 2019年上半期編 - 
### 資料
https://speakerdeck.com/toricls/how-memorable-those-aws-container-services-updates-and-tweets-are
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">本日の資料をアップしました！ <a href="https://twitter.com/hashtag/jawsug_ct?src=hash&amp;ref_src=twsrc%5Etfw">#jawsug_ct</a><br><br>/ &quot;懐かしのツイートと振り返るAWSコンテナサービスアップデート - 2019年上半期編 - Speaker&quot; Deck <a href="https://t.co/RakN4D30N1">https://t.co/RakN4D30N1</a></p>&mdash; ポジティブな Tori (@toricls) <a href="https://twitter.com/toricls/status/1167101783858012160?ref_src=twsrc%5Etfw">2019年8月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### 発表者
Yasuhiro Tori Hara @toricls from AWS Japan

### 感想
このところAWSのニュースはあらかたチェックしていたので、いい再確認になりました。
個人的にはスライドに出てきたニュースの中では

- [AWSコンテナサービス ロードマップ](https://github.com/aws/containers-roadmap/projects/1)
    - AWSコンテナ系サービスに関しての要望をissueで挙げられたり、対応予定を確認したりできる。
- [Amazon ECS サービスで複数のロードバランサーターゲットグループのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2019/07/amazon-ecs-services-now-support-multiple-load-balancer-target-groups/)
    - このアップデートが出来る前は違うLBに紐付けるためだけに同じ内容のサービス作ったりしてましたが、このアップデートによって不要になりました。超便利。
- [Amazon ECR でイミュータブルなイメージタグのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2019/07/amazon-ecr-now-supports-immutable-image-tags/)
    - これチェックしてなかったけど地味に便利ですね。多くの場合タグは一意になるもの(ブランチとかコミットハッシュとか日時とか)を自動で生成して付与するようなデプロイ設計になると思いますが、一度タグつけた内容があとから改変されることがなくなるのは安心ですね。


## Amazon ECSの開発環境を動的に管理するツールを作ってみました by prog893
### 資料
<iframe src="//www.slideshare.net/slideshow/embed_code/key/LgSGrDOMkCZS6S" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/TamerlanTorgayev/jawsug-15-amazon-ecs" title="JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました" target="_blank">JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました</a> </strong> from <strong><a href="https://www.slideshare.net/TamerlanTorgayev" target="_blank">Tamirlan Torgayev</a></strong> </div>
https://www.slideshare.net/TamerlanTorgayev/jawsug-15-amazon-ecs/TamerlanTorgayev/jawsug-15-amazon-ecs

### 発表者
Tamirlan Torgayev @prog893 from CyberAgent

### 内容の要約
- 課題：開発中にECS上での確認作業を行う際、開発者が多いほど開発環境を構築せねばならず、その際リソースの費用や利用タイミングの調整に面倒が発生していた
- 解決のため、CIの一環としてECS Taskを起動できるツール[EDEN](https://github.com/baikonur-oss?utf8=%E2%9C%93&q=eden)を開発した
- 雑にまとめると、指定した正環境のECS Taskをコピーして同じ構成のECSサービスを起動するツール
- もともとOSS化する予定だったが、この発表あったのでサクッとOSS化した

### 感想
- ECSの開発環境として、開発者が多くなるにつれてAWSでの挙動を確認するための開発環境が増えていき、「DevXX環境がほしいです」「DevXX環境はこのPRの確認のために使わせてください」のような前時代的なやりとりが発生してしまうのは大変あるあるでした。
- そして下記の点はとても良いと思いました👍
    - ソリューションを考えて実装して、実際開発現場で利用されてるところ
    - 実装への割り切り(ALBは新規作成しない、ECS以外のリソースへの破壊的変更はスコープ外とする)
    - Mobile/Webアプリ両方で隠しコマンドで接続先を切り替えられるような協力体制を作ったところ
    - OSS化への速度


## Fargate運用物語 ～ 本当にコンテナで幸せになりますか？ ～
### 資料
<script async class="speakerdeck-embed" data-id="30c28da4df764713a1a57d889e0c7cfd" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
https://speakerdeck.com/soudai/fargate-story

### 発表者
曽根壮大 @soudai1025 from オミカレ

### 内容要約
- 経緯
    - EC2をやめてコンテナ化したい
        - 構成管理が辛い
            - クリーンなEC2とAnsibleで構築すると起動が遅くなる
            - かといってゴールデンAMI方式だと、AMI作り直しが頻発して辛い
            - Ansibleは良いツールだが、スピード感を保ちながら冪等を守るのは難しい
            - 構成管理をシンプルにするためにDockerが使いたい
        - 開発環境が辛い
            - シンプルな構成のサーバならVMで十分
            - 開発環境の肥大化・多ロール化に伴いサービスに必要なVMが増えてきた
                - 起動が遅い
                - 構成差分の発生
        - デプロイが辛い
            - 8年前の自作デプロイツール
                - 出戻りしたら不思議なコードが追加されていた
                - 誰もメンテできず属人化
- Fargate導入での知見
    - 辛かった点
        - AWS/コンテナ/Docker/コンテナオーケストレーションどれも詳しくなかった
            - Fargate用のVPC切ったせいでネットワーク設計から苦労
            - パフォーマンス計測が甘かった
                - ピーク時オートスケーリングでコンテナの起動が間に合わずコンテナがどんどん減っていく
            - デバッグで、何のどこをみてもわからず苦戦
                - 死んだコンテナが消えていてデバッグできない
        - 費用が高い、特にCPU
        - ロギングが不自由
            - 結果サイドカーが増えていく
    - 良かった点
        - 課題点
            - 構成管理改善
            - 開発環境改善
            - デプロイ改善
        - それ以外の利点
            - セキュリティ観点
                - ホストEC2のセキュリティの面倒を見なくて良い
                - コンテナを直に外に晒していないので守りやすい
                - ミドルウェアのアップグレードもしやすい
            - デプロイの切り戻し
                - アプリケーションに手を入れず過去のイメージを再デプロイするだけでよい
    - 取り組みによる学び
        - 一足飛びに導入したせいで混乱が発生した
            - 開発環境からなど段階的にやってもよかった
        - 困っている問題を解決する技術を採用しよう
            - EC2で困ってなければEC2でいいじゃん、PaaS,SaaSなども検討しましたか？
            - コンテナ化でテスト楽になるけどそもそもテスト書いてますか？

### 感想
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">インフラの成長はビジネスの成長と両輪なのでまずはビジネスの成長です。そのために必要なことはこの先5年分くらいはやったと思ってます（例えばDBリファクタリングとかもそう</p>&mdash; そーだい@初代ALF (@soudai1025) <a href="https://twitter.com/soudai1025/status/1167039901923074053?ref_src=twsrc%5Etfw">2019年8月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- インフラの技術的負債って後回しになりがち、ちゃんと返すタイミングを見極めて返し切ったのがすごいと思いました
- タップルとオミカレの事例並ぶの面白かった
- オミカレ全体の構成もしりたかった、構成図ググってもパッと出てこず……
- これからECSに切り替えていくのも簡単にできそうですね

## How Fast can your Fargate Scale?
### 資料
<blockquote class="twitter-tweet" data-lang="ja"><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">2019年8月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><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">2019年8月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


### 発表者
Pahud Hsieh from AWS Taiwan

### 内容要約
- FargateのAutoScaleを10秒程度で行うには？
    - FargateにビルトインされているAutoScaleだとCloudWatchがトリガーするまでに1〜3分かかってしまう
    - nginxのstub_status出力をLambda StepFunctionsでポーリングしておき、アクセスが増えたらFargateのサービスのタスク数を増加させるAPIを叩くような仕組みを実現
    - 実際に10秒程度でAutoScalingした

### 感想
- 身も蓋もないんですが、AWSのAutoScalingの仕組みがもっと良くなれば自作しなくていいのではないかと思うんですよね。
    - この実装が今の最適解であることや、改善される可能性が低そうなのもわかります。
- StepFunctions
    - 見たことなかったけどVisual workflowとかも見られてめっちゃいいですね
- CDK面白そう
    - `new Cluster`するだけでFargate用のCluster作れるの偉い
    - アプリエンジニアがインフラ面倒をみるパターンは良さそうだと１思いました。
    - やったことないですが、Step FunctionをTerraformで書くのかなりつらそう……
<blockquote class="twitter-tweet" data-lang="ja"><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">2019年8月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## イベント全体の感想
- コンテナサービス系の事例紹介、大きなイベントだと詳しく喋ってくれなかったりするので、深く聞けて楽しかったです。また行きたい。
- Chimeで遠方からも参加できるようになってとってもいいですね。