Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS Summit Tokyo 2023
Search
Safie
April 21, 2023
Technology
0
2.5k
AWS Summit Tokyo 2023
18 万台のカメラが接続する
Safie のモダナイゼーションへの取り組み
Safie
April 21, 2023
Tweet
Share
More Decks by Safie
See All by Safie
2024年技育祭【秋】セーフィー登壇資料
safie
0
630
MLP Can Be A Good Transformer Learner
safie
1
1.5k
Safie Viewer for iOS の 技術的負債との付き合い方
safie
0
600
Developers Boost2023_Safie
safie
0
360
AWS IoT@Loft#9
safie
0
2.6k
ng-japan2019_Safie Sponsored LT Session
safie
0
410
Other Decks in Technology
See All in Technology
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
330
なぜCodeceptJSを選んだか
goataka
0
160
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
560
20241220_S3 tablesの使い方を検証してみた
handy
4
570
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
270
開発生産性向上! 育成を「改善」と捉えるエンジニア育成戦略
shoota
2
370
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.8k
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
810
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
250
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
130
非機能品質を作り込むための実践アーキテクチャ
knih
5
1.4k
Featured
See All Featured
Building Applications with DynamoDB
mza
91
6.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Unsuck your backbone
ammeep
669
57k
Six Lessons from altMBA
skipperchong
27
3.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Scaling GitHub
holman
458
140k
Code Review Best Practice
trishagee
65
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Transcript
© 2023, Amazon Web Services, Inc. or its affiliates. All
rights reserved.
© 2023, Amazon Web Services, Inc. or its affiliates. All
rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. 18 万台のカメラが接続する Safie のモダナイゼーションへの取り組み 佐伯 航 C U S - 5 1 セーフィー株式会社 開発本部 第1開発部 インフラグループ
自己紹介 ◼名前 • 佐伯 航(さいき こう) ◼所属 • セーフィー株式会社 開発本部
第1開発部 インフラグループ テックリード ◼略歴 • 監視オペレーターからサポートエンジニア、ネットワークエンジニアを経て AWS エンジニアに。2021年7月にセーフィーに入社。 2 ©️ Safie Inc. |
アジェンダ ◼会社紹介 ◼Safie のアーキテクチャ概要 ◼モダナイゼーションへの取り組み ◼今後の取り組み ◼まとめ 3 ©️ Safie
Inc. |
会社紹介 4 ©️ Safie Inc. |
会社概要 5 ©️ Safie Inc. | 企業情報 会社名 セーフィー株式会社 代表者名
佐渡島 隆平 所在地 東京都品川区西五反田 設立年月 2014年10月 従業員数 353名(2023年1月現在) 上場概要 2021年9月29日 東京証券取引所グロース市場へ上場 製品・サービスの概要 事業内容 クラウド録画型映像プラットフォーム 「Safie(セーフィー)」開発・運営
Safie の紹介 6 ©️ Safie Inc. | 6 ◼ クラウド経由で複数のカメラを管理/制御
◼ ライブ映像や録画映像をどこからでも視聴可 ◼ アカウントベースでカメラや映像へのアクセ ス権をコントロール クラウド
カメラ台数とマーケットシェア 7 ©️ Safie Inc. |
導入企業 8 ©️ Safie Inc. |
9 ©️ Safie Inc. | Safie のアーキテクチャ概要
Safie のアーキテクチャ概要 10 ©️ Safie Inc. | ※他にもコンポーネントが存在しますが省略しています Virtual private
cloud (VPC) Amazon Aurora MySQL Amazon Aurora MySQL Amazon Aurora MySQL Amazon Aurora MySQL
Safie のアーキテクチャ概要 ◼水平スケールするために一定のカメラ台数をカバーできるリソースをサブ ネット単位でゾーンという概念で分割 ◼カメラと通信するカメラサーバーもスケールアウトする • 2023 年 3 月時点でカメラサーバーは全ゾーン合計で
1400 台 11 ©️ Safie Inc. |
課題 ◼サービスの成長に比例して手作業で繰り返し行われる作業、いわゆるトイ ルが増えつつある状況だった • トイルが増え続けるとサービスの信頼性向上に繋がる根本的な改善に人的リソースを 割くことが難しくなり、更にトイルが増え続ける…といった負の連鎖に陥りそうな気 配を感じた ◼トイル以外にもセキュリティリスクの低減についても取り組む必要がある と感じた 12
©️ Safie Inc. |
13 ©️ Safie Inc. | モダナイゼーションへの取り組み
チームで行った改善一覧(抜粋) ◼コンテナ移行(AWS Fargate への移行) ※現在も移行中 ◼IAM ユーザーの利用をクロスアカウントアクセスに移行 ◼Amazon EBSボリュームタイプ(gp2 ->
gp3)の変更 ◼NAT Gateway 冗長化 ◼Amazon EC2 Auto Scaling Group, AWS CodeDeploy の導入 ◼AWS Systems Manager Session Manager 導入 ◼Amazon RDS のデータ共有に AWS Lake Formation を採用 ◼AWS WAF Classic から AWS WAF V2 へ移行 ◼AWS Cost Categories によるコスト可視化 ◼一部の SSL/TLS 証明書を ACM へ移行 ◼AWS Config の標準設定を定め Terraform モジュール化 14 ©️ Safie Inc. |
◼コンテナ移行(AWS Fargate への移行) ※現在も移行中 ◼IAM ユーザーの利用をクロスアカウントアクセス方式に移行 ◼Amazon EBSボリュームタイプ(gp2 -> gp3)の変更
◼NAT Gateway 冗長化 ◼Amazon EC2 Auto Scaling Group, AWS CodeDeploy の導入 ◼AWS Systems Manager Session Manager 導入 ◼Amazon RDS のデータ共有に AWS Lake Formation を採用 ◼AWS WAF Classic から AWS WAF V2 へ移行 ◼AWS Cost Categories によるコスト可視化 ◼一部の SSL/TLS 証明書を ACM へ移行 ◼AWS Config の標準設定を定め Terraform モジュール化 15 ©️ Safie Inc. | チームで行った改善一覧(抜粋)
16 ©️ Safie Inc. | IAM ユーザーの利用をクロスアカウン トアクセスに移行
背景と課題 ◼権限の分離や請求情報の明確化のため複数の AWS アカウントを利用 ◼IAM ユーザーが各 AWS アカウントに作成されていた • 複数の
AWS アカウントにアクセスするユーザーは複数の IAM ユーザーを管理 ◼エンジニアは強い権限を持った IAM ユーザーでアクセスキーを発行し作 業しており、漏洩した場合のリスクが高い状態だった 17 ©️ Safie Inc. |
改善内容 ◼IAM 管理用の AWS アカウントを作成 • パスワード、アクセスキー、 MFA デバイスの自己管理権限および sts:AssumeRole
のみ可能な権限を付与した IAM グループを作成 • すべての IAM ユーザーは上記 IAM グループに所属する ◼IAM 管理用 AWS アカウントから作業対象の AWS アカウントの IAM ロールに スイッチロール(AssumeRole)する • 役割ごとに IAM ロールを作成し、信頼関係ポリシーで各 IAM ユーザーを許可 - MFA は必須とするが、利便性を考慮し最大セッション期間は 12 時間に変更 ⁃ AWS CloudTrail イベントでユーザーを識別できるようロールセッション名に IAM ユー ザー名を使用するよう強制 18 ©️ Safie Inc. |
改善内容 ◼IAM ポリシーの例は AWS ドキュメントに記載あり 19 ©️ Safie Inc. |
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_examples_iam_credentials_console.html より引用
改善内容 ◼信頼関係ポリシーの例 20 ©️ Safie Inc. |
ポイント ◼AWS CLI などの CLI ツールを利用するユーザー向けに一時クレデンシャ ルの取得方法をドキュメントに書くことでスムーズに移行することができ た • direnv
と AWS CLI や aws-vault を組み合わせて一時クレデンシャルを取得し環境 変数へセットするサンプルコードを記載 21 ©️ Safie Inc. |
効果 ◼強い権限を持ったアクセスキーを発行する必要がなくなり、漏洩を未然に 防ぐことができた ◼複数の IAM ユーザーを管理する煩雑さの解消 22 ©️ Safie Inc.
|
23 ©️ Safie Inc. | Amazon EC2 Auto Scaling Group,
AWS CodeDeploy の導入
◼AWS Fargate 移行も進めている中ではあるが Amazon EC2 で動作する アプリケーションが多く、Ansible でデプロイ作業を行っていた • Web
API などのアプリケーションは頻繁に変更が入るためデプロイに時間を取ら れ、開発者体験も低下 ◼OS パッケージ更新に伴う Amazon EC2 インスタンスの入れ替えも手動 対応しており、運用コストが高かった 24 ©️ Safie Inc. | 背景と課題
改善内容 ◼Auto Scaling Group 管理へ移行と AWS CodeDeploy による CD を導入
◼GitHub Actions でワークフローを作成 • Amazon S3 に AppSpec ファイルを含んだアーティファクトをアップロードし、 create-deployment を実行 • デフォルトブランチへのマージでステージング環境へデプロイ実行 • リリース作成時にプロダクション環境へデプロイ実行 25 ©️ Safie Inc. |
◼デプロイが成功したリビジョンが存在しない場合 AWS CodeDeploy によ るデプロイは実行されない • Auto Scaling Group で
Amazon EC2 インスタンス起動後、Elastic Load Balancing ヘルスチェック失敗によって Amazon EC2 インスタンスが Terminate されてしま う ◼サービスのリクエストがルーティングされないテスト用のターゲットグ ループなどを作成し、事前に AWS CodeDeploy でのデプロイを成功させ ておく • Amazon EC2 インスタンス起動後にタイミングを見計らって手動で AWS CodeDeploy でのデプロイを実行する 26 ©️ Safie Inc. | ポイント
◼開発効率の向上 ◼運用コストの低減 • Elastic Load Balancing ヘルスチェック失敗時における Amazon EC2 インスタンス
再作成の自動化 • AMI 更新時におけるインスタンス入れ替えも Auto Scaling Group のインスタンスリ フレシュ機能で自動化できた 27 ©️ Safie Inc. | 効果
28 ©️ Safie Inc. | AWS Systems Manager Session Manager
導入
◼セキュリティの向上 • インバウンド SSH の許可が不要になる ◼Bastion サーバーの OS ユーザーと公開鍵の管理コスト低減 •
シェルアクセスの可否は IAM の権限で制御 ◼監査目的のロギング向上 • オペレーションログを Amazon S3 に自動保存可能 • セッション履歴が AWS CloudTrail に記録される 29 ©️ Safie Inc. | モチベーション
◼オペレーションログ取得のため以下の AWS Systems Manager ドキュメ ントは利用を禁止 • AWS-StartSSHSession • AWS-StartPortForwardingSessionToSocket
• AWS-StartPortForwardingSessionToRemoteHost • AWS-StartPortForwardingSession ⁃ (ただし、当社の監査要件によるものなので利用できたほうが便利です) ◼ファイル転送のために Amazon S3 を作成、AWS CLI を全ての Amazon EC2 インスタンスにインストール、インスタンスプロファイルで AWS Systems Manager, Amazon S3 の権限を付与 30 ©️ Safie Inc. | ポイント
31 ©️ Safie Inc. | Amazon RDS のデータ共有に AWS Lake
Formation を採用
◼サービスレベル向上を目的に分析のためにデータ分析基盤へ Amazon RDS(Amazon Aurora) のデータを共有 • サービスが稼働する AWS アカウントとデータ分析基盤の AWS
アカウントは異なる ◼Jenkins(実体はシェルスクリプト)で以下の処理を行っていた • Amazon Aurora クラスターのクローンを作成 • センシティブな情報をマスキング、不要テーブルの削除 • クローンからスナップショットを作成 • データ分析基盤 AWS アカウントへスナップショットを共有 • スナップショットから Amazon S3 エクスポートを実行し、Amazon S3 にデータを 格納 32 ©️ Safie Inc. | 背景
◼Amazon Aurora クラスターごとにクローンを作成するため単純に時間が かかる • サービスで使用している Amazon Aurora クラスターは 19
クラスター( 2023年3 月時点) ◼データ分析基盤で分析、可視化したい項目が増えるたびに共有するテーブ ルを追加(シェルスクリプトの変更)が必要であり、属人化していた 33 ©️ Safie Inc. | 課題
34 ©️ Safie Inc. | ◼AWS Step Functions と AWS
Lake Formation を使った構成に変更 ◼自動スナップショット取得をトリガーに AWS Step Functions を実行 ◼AWS Step Functions の処理 • Amazon S3 エクスポートの実行 • Amazon S3 エクスポートで作成されたオブジェクトを AWS Glue クローラーがク ロールするパスへコピー • AWS Glue クローラーの実行 改善内容
35 ©️ Safie Inc. | ◼AWS Lake Formation は AWS
Glue データカタログを他の AWS アカウ ントに共有することが可能 • AWS Glue 単体でもクロスアカウントアクセスは可能だが、AWS Lake Formation ではタグベースのアクセス制御(TBAC)が可能であり、データベース、テーブル、カ ラムなどの粒度でアクセス制御が可能 改善内容 AWS Step Functions workflow ① Amazon S3 エクスポート実行 ② Amazon S3 オブジェクトをコピー AWS Lake Formation AWS Lake Formation AWS Glue
36 ©️ Safie Inc. | ◼仕組み上ニアリアルタイムな分析が要件の場合はマッチしないが、 Amazon S3 エクスポート ->
オブジェクトコピー -> AWS Glue クロー ラーの実行にかかる時間は1時間程度 • Amazon S3 エクスポートの同時実行数制限(デフォルト: 5)は上限緩和可能 ◼AWS Step Functions, AWS Lake Formation は Terraform で管理して おり、属人化もある程度解消できた 効果
37 ©️ Safie Inc. | 今後の取り組み
今後の取り組み ◼トイルの撲滅活動を継続する • まだまだレガシーな部分や整理が必要な部分が多い • 今後も Amazon EC2 インスタンスは増える傾向にある ◼コンテナ移行も推進する
• アプリケーションの特性によって Amazon EC2 インスタンスを選択する場合もあり ◼AWS Control Tower などを利用したマルチアカウント統制についても検 討したい 38 ©️ Safie Inc. |
39 ©️ Safie Inc. | まとめ
まとめ 40 ©️ Safie Inc. | ◼サービスが成長しつづけるタイミングでは、初期に構築した構成を維持す るのみではなく継続的な改善に取り組むことが大事 • サービスで提供している環境を変更することに抵抗を感じるかもしれないが、
長期的な目線でメリット、デメリットを比較し検討する
© 2023, Amazon Web Services, Inc. or its affiliates. All
rights reserved. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved.