Slide 1

Slide 1 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. クラウドネイティブ化への第⼀歩 〜 前へ進むための新しい取り組み 〜 エキサイト株式会社 宮⻄隼⼈

Slide 2

Slide 2 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved.

Slide 3

Slide 3 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. ⾃⼰紹介 1989年 ⼭⼝県⽣まれ ⽂学部 => SIer => エキサイト 好きな⾔語 TypeScript / PHP / Python / C++ / C# 好きなAWSサービス CloudFormation / ECS / ELB 宮⻄ 隼⼈ @_ht_mn_

Slide 4

Slide 4 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. ⽬次 ● マイグレーション前夜 ○ 当時抱えていた課題は何か︖ ● クラウドネイティブ化とは︖ ● 課題を解決するためにやったこと ○ コンテナ化とCI/CD整備の結果 ● おわりに ○ さらに前へ進むために

Slide 5

Slide 5 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. マイグレーション前夜 (たぶんこれだけで1時間は話せますが)

Slide 6

Slide 6 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. オンプレミスの状況を振り返る 現状構成の洗い出し ● VM数 100以上 ● APIエンドポイント総数 400以上 ● GitHubリポジトリ数 70以上 ● OracleとMySQL * 2 DBオブジェクト総数 1500以上 ● 忘れ去られた外部連携仕様 多数 まぁまぁのボリュームだけど ● タイムリミットは1年と2ヶ⽉ ● 普段の業務も並⾏しながら作業をする ● メインで担当するのは2⼈だけ

Slide 7

Slide 7 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 「贅沢は敵だ」 限られたリソースの中で欲張りはじめる ● 移⾏にかかる作業コストは最⼩限にしたい => 最⼩限のコストで、最速の完了を⽬指さなければ ● 移⾏後の運⽤コストも最⼩限にしたい => 後で地獄を⾒ないためにも、今から頑張っておきたい ● 将来的な拡張性も担保したい => わかるけど、ちょっと欲張り ● AWSコストを削減したい => 欲張りすぎ

Slide 8

Slide 8 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. どうやって解決していくか 移⾏戦略毎に分類 考え得るいくつかの解決策 ● 頑張ってリソースを投⼊する => 根本的な解決ではない︖ ● クラウドのメリットを活かしたアーキテクチャに変更する => クラウドのメリットとは︖クラウドネイティブ化︖ リタイア リホスト リプラットフォーム リアーキテクチャ 不要なアプリケーションは削除 / 廃 ⽌する。 既存のアプリケーションをそのまま 移⾏する。 ⼀部をクラウドに最適化して移⾏す る。 例えば、オンプレのOracleからRDS for Oracleへの移行など。 クラウドネイティブの機能を使⽤で きるように、アプリケーションの再 設計してリビルドする。

Slide 9

Slide 9 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. クラウドのメリットを活かす︖ クラウドネイティブなアプリケーション︖

Slide 10

Slide 10 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 「クラウドネイティブ」の定義 Cloud Native Computing Foundation(CNCF)による定義は︖

Slide 11

Slide 11 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. クラウドネイティブ技術は、パブリッククラウド、プライベートクラウ ド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、 スケーラブルなアプリケーションを構築および実⾏するための能⼒を組 織にもたらします。 このアプローチの代表例に、コンテナ、サービスメ ッシュ、マイクロサービス、イミュータブルインフラストラクチャ、お よび宣⾔型APIがあります。 これらの⼿法により、回復性、管理⼒、および可観測性のある疎結合シ ステムが実現します。 これらを堅牢な⾃動化と組み合わせることで、エ ンジニアはインパクトのある変更を最⼩限の労⼒で頻繁かつ予測どおり に⾏うことができます。 https://github.com/cncf/toc/blob/main/DEFINITION.md

Slide 12

Slide 12 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. ⼀部抜粋 スケーラブルなアプリケーションを構築および実⾏ 例えば・・・負荷の状況に合わせて⾃動でスケーリングできる 回復性、管理⼒、および可観測性のある疎結合システムが実現 例えば・・・障害発⽣時の即時復旧、⾃動回復ができる インパクトのある変更を最⼩限の労⼒で頻繁かつ予測どおりに⾏う 例えば・・・安全に、簡単に、迅速にデプロイできる

Slide 13

Slide 13 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. クラウドネイティブ化の主な要素 ① コンテナ化 ② CI/CD ③ オーケストレーションと アプリケーション定義 ④ 可観測性と分析 https://github.com/cncf/trailmap

Slide 14

Slide 14 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. とりあえずやってみよう 「考えるよりも先に体が動いていた」

Slide 15

Slide 15 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. あしたのために(その1) 「コンテナ化」

Slide 16

Slide 16 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 困っていたこと - EC2の運⽤コスト EC2の運⽤がつらい ● EBS(ストレージ)の容量枯渇 ● 各種エージェントの突然死 ○ デプロイ失敗など副作⽤が発⽣ ● 構成管理していない古いインスタンス ○ 怖くて変更を加えられない ○ 環境毎に構成が異なるという状況が発⽣

Slide 17

Slide 17 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 困っていたこと - OS管理が⾯倒 サーバOSやミドルウェアの更新作業 ミドルウェアの更新や脆弱性の対応に時間が掛かりがち ⼀度変更してしまうと、元に戻すのが⼤変になってしまう

Slide 18

Slide 18 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. AWSがもたらしてくれたもの AWS責任共有モデル 管理すべき対象は 減ったけど https://aws.amazon.com/jp/compliance/shared-responsibility-model/

Slide 19

Slide 19 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. けど、もっと楽をしたい(欲張り) AWS責任共有モデル ここの負担も 減らしていきたい https://aws.amazon.com/jp/compliance/shared-responsibility-model/

Slide 20

Slide 20 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. ECS on Fargateで解決 Amazon ECS 完全マネージドなオーケストレーションサービス コンテナのデプロイ、管理、スケールをECSに全て任せる AWS Fargate コンテナ向けサーバレスコンピューティング サーバやクラスタ管理をせず、アプリケーション開発に専念 ECS on Fargateなら、やりたいことが実現できそうだ︕

Slide 21

Slide 21 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 結果 ポータビリティが向上 LinuxでもWindowsでもMacでも、環境は問わない 問題発⽣時の迅速な復旧が可能に スケールアップ/ダウン、スケールイン/アウトも⼿軽に インフラに依存しない構成 アプリケーションのデプロイと同じ感覚でインフラリソースをデプロイ

Slide 22

Slide 22 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. あしたのために(その2) 「CI/CD」

Slide 23

Slide 23 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 困っていたこと - 無駄が多い テストを書いてもテストをしない(怪奇現象) テストを書いた⼈が、書いたときに実⾏して終わり => 書いた本⼈にすら忘れられるので、誰もメンテしなくなる デプロイが⾯倒臭い 1. main ブランチにマージして、 2. デプロイサーバにSSHログインして、 3. rsyncコマンドやシェルスクリプトを実⾏ => ⼿順書が必須、作業者への各種権限付与も必須

Slide 24

Slide 24 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. GitHub Actionsで⼀⽯⼆⿃ テストもデプロイの設定も アプリケーションのリポジトリで管理 AWS公式アクションを活⽤ 安⼼と信頼の公式アクション Blue/Greenにも対応(CodeDeployを利⽤)

Slide 25

Slide 25 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. Blue/Greenデプロイについて(おさらい) ① デプロイ前の状態 => お客様も管理者も、Blue Targetのア プリケーションにアクセス ② Green Targetに最新のアプリケーショ ンをデプロイ => Test ListenerのターゲットをGreen Targetに切り替え ③ Green Targetの正常性を確認後 => Production Listenerのターゲットを Green Targetに切り替え

Slide 26

Slide 26 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. GitHub Actionsがより安全に使える︖ OIDC連携で、IAMユーザが不要に︕︖ ※10⽉現在はまだβ版 https://github.com/github/roadmap/issues/249

Slide 27

Slide 27 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 結果 デプロイまでのスピードが向上 mainブランチにマージすれば9割終了 (Blue/Greenのターゲット切替え作業のみ⼿動) 誰でも簡単にデプロイできる 必要なのはGitHubアカウントだけ 余計な権限付与をしなくてもOK

Slide 28

Slide 28 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. あさってのために 道はまだまだ続いている

Slide 29

Slide 29 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. 困っていたこと - ログの調査・分析 ⽞⼈にしかできないログ分析 ● オンプレVMにSSHでログイン ○ HA構成の場合は各VMにログイン ○ screenやtmuxなどターミナルマルチプレクサを駆使 ● findして、xargsして、sedして、awkして・・・ ○ シェル芸は必須科⽬ ○ 職⼈芸のようなワンライナー地獄

Slide 30

Slide 30 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. FireLensとFluent Bitの利活⽤ App => FireLens => Fluent Bit サイドカーのFluent Bitコンテナに、アプリケーションからログを転送 アプリケーション側は、標準出⼒することだけを意識すれば良い

Slide 31

Slide 31 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. Firehoseでデータを収集 誰でもデータを分析できる環境へ Fluent BitはKinesis Data Firehoseにデータを集約させる FirehoseはAOSSやS3に転送し、適切で⼿段でデータ分析をおこなう

Slide 32

Slide 32 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. おわりに

Slide 33

Slide 33 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. なぜ前へ進むのか ● 前へ進まないと⾒えない景⾊がある ○ コンテナの本番運⽤ ○ サーバレス ○ CI/CD ● リスクは⼤きいけど、ベネフィットも⼤きい ○ 本来の⽬的はビジネスを成⻑させること ○ 社会の変化に、システムも追随する必要がある ● 臆せず、前へ進もう

Slide 34

Slide 34 text

Copyright © 2021 Excite Japan Co.,Ltd. All Rights Reserved. Thank you!