Save 37% off PRO during our Black Friday Sale! »

CDKを用いたモダンなECSクラスタの構築と運用 / AWS Cloud Development Kit -CDK- Meetup

5e1d0f7877241ad4447c6611d9a51fd7?s=47 cohalz
July 18, 2019

CDKを用いたモダンなECSクラスタの構築と運用 / AWS Cloud Development Kit -CDK- Meetup

AWS Cloud Development Kit -CDK- Meetup
https://awsclouddevelopmentkitcdkmeetu.splashthat.com
の発表資料です
資料で言及したライブラリはこちら https://github.com/cohalz/cirrocumulus

5e1d0f7877241ad4447c6611d9a51fd7?s=128

cohalz

July 18, 2019
Tweet

Transcript

  1. CDKを用いたモダンな ECSクラスタの構築と運用 AWS Cloud Development Kit -CDK- Meetup id:cohalz

  2. 自己紹介 ・id:cohalz / @cohalz ・株式会社はてな 2018年新卒入社 ・システムプラットフォーム部 SRE

  3. よくCDKのコントリビュートしてます

  4. 話すこと 1. どうしてCDKを採用したか 2. ECSのライブラリを作る 3. CDKを使ったデプロイ手法 4. 開発時にやったこと

  5. 1. どうしてCDKを採用したか

  6. 社内のコンテナ事情について

  7. 社内のコンテナ事情について ・クラウド環境は主にAWS ・アプリケーションのコンテナ化を進めている ・既に一部のチームでECSの運用実績がある => ECSを採用していく予定

  8. どうやって知見を横展開するか?

  9. どうやって知見を横展開するか? ・サービスそれぞれで要求される特性が違う  ・サービスごとにECSクラスタを分けることになりそう ・今までCFnで管理をしていたけど,どう展開する?

  10. CloudFormationを横展開するのは大変 ・CFnテンプレートを配って都度書き換えていく? ・特にECSは関連コンポーネントが多くて大変

  11. CloudFormationに代わるもの ・横展開しやすいもの  ・IaCできるもの ・学習コストは下げたい

  12. ということでCDKを採用

  13. CDKの採用 ・独自の言語で書く必要がない ・パッケージ化して配布できる ・CFnテンプレートを出力可能  ・もし撤退したくなってもやりやすい

  14. CDKの強力なCLIツール ・IAM・SG周りの変更で警告を出せる  ・ECSはコンポーネントが多くなるので特に役立つ

  15. 2. ECSのライブラリを作る

  16. ECSのライブラリを作る ・公式のライブラリはあったが機能が足りない ・拡張してより使いやすいライブラリを作ることに

  17. ライブラリに組み込んだ機能 ・ecs.configを使いやすく書き換え ・ホスト名わかりやすくする ・ローリングアップデート対応 ・SSMエージェントの導入 ・スポットインスタンス対応 などなど

  18. その他の機能

  19. ECS運用の課題 ・インスタンスにファイルをデプロイしたいことがある  ・SSHキーや監視のエージェントなど ・定期的にパッケージのアップデートもしたい

  20. デプロイしたいタイミングって? ・クラスタを作ったとき ・ファイルを変更したとき ・オートスケーリングしたとき

  21. 解決案 ・ユーザデータ? ・cfn-initとcfn-signal? ・ChefやAnsibleなどのツール経由?

  22. (再掲)デプロイしたいタイミングって? ・クラスタを作ったとき ・ファイルを変更したとき ・オートスケーリングしたとき

  23. (再掲)デプロイしたいタイミングって? ・クラスタを作ったとき ・ファイルを変更したとき ・オートスケーリングしたとき => これらのツールでは対応が難しかった

  24. これもCDKで解決

  25. これもCDKで解決 ・CDKでデプロイできるものを作った ・ディレクトリとデプロイ先(タグ)を指定するだけで使える

  26. 裏側の構成 ・CDKからこういう構成が作られる

  27. CDKでファイルをS3にアップロード BucketDeploymentを使うとデプロイ時にアップロードできる

  28. S3のPUTイベントをCloudWatch Eventsに流す ・CloudTrail経由でイベントを取得

  29. イベント時にs3 syncする ・Systems Manager経由で各インスタンスからs3 sync

  30. 嬉しいところ ・SSMの関連付けはインスタンス起動時にも実行してくれる ・対象をタグで決めるのでインスタンスを意識しなくて済む ・利用者は別にこの構成を知らなくても使える

  31. シェルスクリプトを実行 ・s3 sync後に自動でシェルスクリプトを実行できる  ・パッケージアップデート  ・監視エージェントの追加

  32. OSSで公開してます https://github.com/cohalz/cirrocumulus

  33. 3. CDKを使ったデプロイ手法

  34. GitOpsの手法をECS+CDKで構築

  35. GitOps by ECS+CDK

  36. GitOps by ECS+CDKのポイント ・アプリケーションとCDKのリポジトリを分ける ・CDKコマンドはCodeBuildから実行  ・手元からは実行しない

  37. CodeBuildがAppイメージをECRにpush

  38. AppとCDKのリポジトリを分ける

  39. masterの変更をトリガーにCDKリポジトリにPR

  40. PR内容 ・最新のイメージを使うような変更をbotが作る

  41. PRとともにstaging環境が自動更新

  42. PRがマージされたら自動で本番環境が更新

  43. 嬉しかったこと ・アプリケーションとインフラのコードを分離 ・インフラの構成がGitリポジトリをマスターに ・CDKはCFnベースなので失敗してもロールバック可能

  44. これからの課題 ・cdk diffをどうやって確認するか? ・この仕組み自体はまだ手作り

  45. 4. 開発時にやったこと

  46. 開発時にやったこと ・テストにJestのスナップショットテストを使う ・アップデートやバグへの対応

  47. Jestのスナップショットテストを使う ・生成されるCFnが以前と変わっていないかをテスト ・テストの網羅性も高く,実装も簡単

  48. ライブラリアップデート時 ・Renovateと組み合わせてテスト通れば自動マージ

  49. アップデートやバグへの対応 ・Slackで #aws-cdk チャンネルを作って情報共有 ・複数チームで並行して試していたので知見が貯まっていく

  50. アップデートやバグへの対応 ・結構壊れるので積極的にバグ報告やPRをする

  51. バージョンを固定して使うことも ・最終的にはCFnなので,実際そこまで困らない ・今はGAになったので全部上げていってるタイミング

  52. まとめ ・CDKは仕組みをライブラリとして提供しやすい  ・CFnが慣れた言語で書ける以上のメリットがある ・IaCとそのデプロイツールとしても利用できて便利 ・まだまだ出たばかりなので知見共有は大事  ・社外事例待ってます!