Repro Tech Meetup #1 Docker #reprotech
個⼈サービスをFargateに移⾏したよRepro Tech Meetup #1 Docker畑中 悠作
View Slide
About me• Yusaku Hatanaka (@hatappi)• Speee, Inc• Ruby, Go, TypeScript, etc.• Roppongi.rb organizer• Vimmer (vimと同じ年)• 煎り⼤⾖が好き
IUUQTTQFBLFSEFDLDPNIBUBQQJSBJMTQMVTUZQFTDSJQUQMVTSFBDUQMVTIZQFSOPWBEFTIJNFSVTTSSBJIVRails Developers Meetup 2018 Day 3 Extreme
時間は有限!!
出来るだけメンテするものは減らしていきたい
Fargateとは?• ECSにて下回りのインスタンス群の管理を⾃分で管理しなくても良くなる• 新しいサービスというよりはECSのEC2と並ぶ新しい起動タイプという捉え⽅がよいかも
下回りのインスタンス群の管理を ⾃分で管理しなくても良くなる
EC2 => FargateIUUQTBXTBNB[PODPNKQCMPHTOFXTBXTGBSHBUFBQSPEVDUPWFSWJFX
今までのECS• Amazon ECSに対応したAMIでインスタンスをAuto Scaling グループなどで⽴てる必要があった• AMIも⾃前で⽤意する場合はECS Agentやdocker daemonなどを⽤意する必要がある• AMIを固定で使⽤している場合はECSAgentのUpdateなどを⼀定のメンテコストがかかる• その上でECSのクラスターやタスクを管理していくIUUQTBXTBNB[PODPNKQCMPHTOFXTBXTGBSHBUFBQSPEVDUPWFSWJFX
FargateIUUQTBXTBNB[PODPNKQCMPHTOFXTBXTGBSHBUFBQSPEVDUPWFSWJFX• ユーザーが意識して管理するのはタスクの管理• クラスター管理や使⽤時の最適化も必要ない• ⾃分の使いたいメモリ、vCPUの組み合わせを指定するだけ後はタスク管理に注⼒できる• Fargate⾃体はECSに組み込まれているので新しくAPIを覚えていくみたいな必要はない
⽇本にもきた!!!!
移⾏⼿順• ローカルで動くようにDocker化していく• 今回はNginx, Rails, Hypernovaの3つ• docker-composeで⼀発で⽴ち上がるようにする• ECSでクラスターを作成して新規作成したALBに紐付ける形で動作検証を⾏う• Routes53で既存のALBとリプレイスを⾏う
Docker化• Packer (https://www.packer.io/)• AMIやDocker Imageなどのマシンイメージを⽣成・管理するCLI• EC2で運⽤していた際にAnsibleで実現された資産があったのでそれを使⽤• 作成したイメージはECRへPUSH
デプロイは何で⾏ったか?• eagletmt/hako• Dockerコンテナをデプロイするためのツール• YAML, Jsonnetで記載• 以前ソースを全部読んだことがあり使い勝⼿が分かっていたので採⽤
移⾏出来た
移⾏してどうだったか• ホストの管理をしなくても良くなったのでアプリケーションに集中できる• DockerImage化することでローカルなどでも同じ環境で作業が出来るようになった• 何回もデプロイする時にDockerのImageサイズが⼤きいとpullが毎回遅い• EC2の時はホスト側でキャッシュされていた
監視周り• サービス単位ではCPU, メモリ使⽤率などがCloudWatchで取得が出来る• 実⾏しているコンテナ(Rails, Nginx, Hypernova)単位でメトリクスを取りたい
監視周り• Datadog (https://www.datadoghq.com/)• IntegrationによってCloudWatchで取得できるメトリクスを収集できる• コンテナ単位はタスクメタデータを介して取得することが出来る• お⾦はかかるIUUQTBXTBNB[PODPNKQBCPVUBXTXIBUTOFXBXTGBSHBUFQMBUGPSNWFSTJPO
まとめ• Docker化してFargateにのせることでインスタンスの⾯倒を⾒なくても済みアプリケーションの開発に集中できるようになった• Nginxはリダイレクト⽤途がメインだったので必要ないかも• ALBでリダイレクトが出来るようになった