Slide 1

Slide 1 text

やらなきゃ損!ECS Fargateのコスト削減の手引 株式会社ヌーラボ サービス開発部 Backlog課 Yuichi Watanabe Copyright Nulab Inc. All Rights Reserved. 第1回 AWSコスト削減 天下一武道会

Slide 2

Slide 2 text

渡邉 祐一 Yuichi Watanabe ・ ・ ・ 福岡在住 BacklogのGitホスティング周りの開発・運用を担当 趣味は小さなツールやライブラリ等のOSS開発 ・https://github.com/vvatanabe Copyright Nulab Inc. All Rights Reserved. 株式会社ヌーラボ Recently

Slide 3

Slide 3 text

■ “進んでるね!”で、チームは進む。 みんなで使う簡単、便利な プロジェクト・タスク管理ツール。 タスク管理や Wiki など情報共有に関する豊富な機能がオ ールインワン 直感的に操作が可能なインターフェース SaaS版 / インストール版の2つの形態で提供 ■ ■ 担当者・期限を明確に チームのタスクを、担当者や期限を明確にして課題 を予定通りに完了させましょう。課題の更新は Backlogやメールで受け取れます。 ガントチャートで可視化 プロジェクト計画をガントチャートで可視化します 。メンバーの進捗を把握することで、作業の遅延に いち早く気づけます。 Wikiでドキュメント管理 Backlog Wikiは個人メモ、会議の議事録、作業マニュ アル、仕様書などチームメンバーに向けた情報を文 書で管理します。リンク共有やPDF出力にも対応し ています。 出先からも楽々!モバイルアプリ 無料で使えるBacklogモバイルアプリ(iOS / Android サポート)を利用すれば、外出先でもプロジェクト の進捗を確認したり、課題の追加やコメントを投稿 できます。

Slide 4

Slide 4 text

コードやコミット履歴をプロジェクト・課題に紐づけて管理できる「Git」機能 プライベートリポジトリを設定 ソースコードをプロジェクトと紐づけて管理できるた め、作業内容を簡単にチームに共有できます。 プルリクエストにコメント ソースコードを指定して、ブランチ間の差分にコメン トをしてペアプログラミングをしているチームメンバ ーにお知らせしましょう。 ソースコードレビュー チームでソースコードレビューができます。ファイル 間の差分は色別で表示されます。誰がどこに変更を加 えたか明確にすることで、どれをマージすべきか即座 に判断できます。 コミット履歴を確認 ブランチごとにコミット履歴を確認できます。ファイ ルブラウザから履歴を閲覧するとファイルに関連する 履歴のみを閲覧できます。

Slide 5

Slide 5 text

コスト削減の対象となるサブシステム ・Gitホスティング機能はECS Fargate上で稼働する、小さな独立した 複数のサービスを中心に構築されている。 ・星アイコンはECS Fargateで稼働しているサービスを示す。 ・サービス間の通信プロトコルはgRPC。 ・本セッションでは、図のECS Fargateで稼働しているサービスのコ スト削減について紹介する。 BacklogのGitホスティング機能のサブシステムの概観 AWS Cloud [EKS] WEB [EKS] API [ECS] Git PROXY [ECS] Git HTTPS [ECS] Replication Worker [ECS] Git SSH [SQS] [S3] [EC2] GIT [EBS] Ripository (Primary) [EC2] GIT [EBS] Ripository (Replica) ※ コンポーネント間のLBなどは省略 gRPC

Slide 6

Slide 6 text

やらなきゃ損なコスト削減のロードマップ 【手軽に節約】プラットフォームをARM64へ移行 【余剰を節約】コンピューターリソースの最適化 【年払で節約】Compute Savings Plansの適用 1 2 3

Slide 7

Slide 7 text

【手軽に節約】 プラットフォームをARM64へ移行 Copyright Nulab Inc. All Rights Reserved.

Slide 8

Slide 8 text

【手軽に節約】プラットフォームをARM64へ移行 Region: ap-northeast-1 vCPU単位(1時間) vRAM GB単位(1時間) Linux/x86 0.05056USD 0.00553USD Linux/ARM 0.04045USD 0.00442USD 割引率 19.9%↓ 20.0%↓ ※ 2024/01/28時点 Refs: https://aws.amazon.com/jp/fargate/pricing/ 移行するだけでお得に ・サブシステムの構成に手を入れずに、少ない労力で大きな成果を得たい。 ・x86からARMへを移行するだけで費用が20%安くなる。 ・特にx86に依存する要素がない限り、使わない手はない! ・余談)昨年リリースしたAI関連の新機能もECS Fargate上で稼働しおり、最初からARMを選択した。 "requiresCompatibilities": [ "FARGATE" ], "runtimePlatform": { "operatingSystemFamily": "LINUX", "cpuArchitecture": "ARM64" }, Taskdefinition

Slide 9

Slide 9 text

【手軽に節約】プラットフォームをARM64へ移行 Buildxでマルチアーキテクチャビルド ・本番環境ではARMを使用しているが、ローカルマシンではx86な開発者もいる。 ・ARMとx86の両方のコンテナイメージを労力をかけずにサポートしたい。 ・docker buildxが提供する機能の1つ、「マルチアーキテクチャビルド」を使う。 ・異なるCPUアーキテクチャ用のイメージを同時にビルドする。 ・x86で稼働しているJenkinsでdocker buildxを使ってARMとx86のコンテナイメージをビルドしてECRに登録する。 Amazon ECR ECS Fargete(ARM) X86 CPU docker buildx ARM X86 ARM X86 Developers(ARM) Developers(X86) ARM ARM X86 $ docker buildx create --name my-multi-arch-builder $ docker buildx build --builder my-multi-arch-builder \ --platform linux/amd64,linux/arm64 --push \ --progress plain -t $(IMAGE_NAME):$(IMAGE_TAG) -f ./Dockerfile . docker buildxコマンドの例:

Slide 10

Slide 10 text

【手軽に節約】プラットフォームをARM64へ移行 マルチアーキテクチャビルドの時間を短縮する ・問題点:x86上でbuildxを使ってARMのコンテナイメージをビルドするのにめちゃくちゃ時間がかかる。 ・原因:時間がかかっているのはアプリケーションのバイナリをビルドする処理。buildxはマルチアーキテクチャのビルドをサポート するためにQEMU(Quick Emulator)を利用している。QEMUがエミュレーションに基づいて動作するため時間がかかる。 ・解決策:(Goの場合)QEMUを介さずGoのクロスコンパイルでARMのバイナリをビルドする。 改善後 改善前 FROM --platform=$BUILDPLATFORM golang:1.21 ARG TARGETARCH WORKDIR /go/src/example COPY go.mod . COPY go.sum . RUN go mod download COPY . . RUN GOOS=linux GOARCH=${TARGETARCH} go build -o /go/bin/myApp ./... FROM gcr.io/distroless/static-debian11 COPY --from=0 /go/bin/myApp /go/bin/myApp ENTRYPOINT ["/go/bin/myApp"] $BUILDPLATFORMはDocker BuildKitが提供する 環境変数で、ビルド実行中のプラットフォーム (例:linux/amd64)を指す。 TARGETARCHは、ターゲットのアーキテクチャ(例: amd64, arm64)を指定するための引数 GOARCH環境変数を使用してターゲットの アーキテクチャ(TARGETARCHで指定) を設定し、アプリケーションをビルド

Slide 11

Slide 11 text

【余剰を節約】 コンピューターリソースの最適化 Copyright Nulab Inc. All Rights Reserved.

Slide 12

Slide 12 text

パフォーマンスとコストの最適化 【余剰を節約】コンピューターリソースの最適化 問題: ECS Fargateで稼働している一部のサービス(基本的にデータのバケツリレ ーしか行っていない)において、ピーク時にメモリがスパイクする傾向があ った。 暫定対策: スパイクしてもギリギリOOMにならない程度にメモリを増やして凌いでい た。(お金で殴る) 調査内容: ロードテストを実施して、Goのpprofコマンドを使ってヒープのプロファイ ラを取得。gRPCクライアントのストリームで使用されているバッファ領域 が、コネクション数に比例して上昇していた。 例. gRPCクライアントのメモリ使用量を抑える スパイク!

Slide 13

Slide 13 text

パフォーマンスとコストの最適化 【余剰を節約】コンピューターリソースの最適化 原因: ・gRPCクライアント(grpc-go)の実装でウインドウサイズの設定が 1024 * 64 - 1(64k-1)を閾値に動作が変わる。 ・64k-1未満の場合 => http2のウインドウサイズが動的に変更される。64k-1以上の場合 => ウインドウサイズは動的に変更されない。 ・特にhttp2におけるPingのRTTが低いほどウインドウサイズが増加していく。 ・対象の全ECSのサービスは、同リージョン内で通信しており距離が近い(RTTが低い)のでウィンドウサイズが増加しやすい。 ・リージョンを跨ぐような大陸間通信の場合は、ウインドウサイズの動的拡張の恩恵を得られる。 ・詳細:https://grpc.io/blog/grpc-go-perf-improvements/#bdp-estimation-and-dynamic-flow-control-window 対応策: ・gRPCクライアントのウインドウサイズを64k-1以上に設定する。 結果: ・メモリ使用量が安定化して、ピーク時のスパイクがなくなる。 ・応答時間も伸びることなく影響なし。 例. gRPCクライアントのメモリ使用量を抑える 圧倒的平穏

Slide 14

Slide 14 text

【年払で節約】 Compute Savings Plansの適用 Copyright Nulab Inc. All Rights Reserved.

Slide 15

Slide 15 text

・Savings Plansは、1年または 3年の期間で、一貫したコンピューティング使用量 (USD/時間で測定) を契約する代わりに、 Amazon EC2、AWS Lambda、AWS Fargateの使用料金が割引される柔軟な料金モデル。 ・Savings Plansには3つのタイプがある。 ・Compute Savings Plans ・最大66%のコスト削減を目指す非常に柔軟なプラン。 ・EC2インスタンス、Fargate、Lambdaに関わらず使用され、インスタンスの種類、サイズ、リージョン、OSなどに拘束 されずに利用できる。 ・EC2 Instance Savings Plans ・最大72%のコスト削減を提供する、より特定のプラン。 ・特定のリージョン内のインスタンスファミリーに対して適用され、インスタンスのサイズ、OS、テナンシーに関係なく 利用できる。 ・SageMaker Savings Plan ・Amazon SageMaker MLインスタンスを最大64%節約できる新しい柔軟な料金モデル。 【年払で節約】Compute Savings Plansの適用 年単位でまとめて契約してお得に

Slide 16

Slide 16 text

【年払で節約】Compute Savings Plansの適用 オプションによる料金比較 Region: ap-northeast-1, CPU: ARM ※ 2024/01/28時点 Refs: https://aws.amazon.com/jp/savingsplans/compute-pricing/ vCPU単位(1時間) vRAM GB単位(1時間) 割引率(vCPU, vRam) On-Demand 0.04045USD 0.00442USD - Savings Plans(1年, 前払いなし ) 0.03185USD 0.00348USD 21%↓, 21%↓ Savings Plans(1年, 一部前払い ) 0.03034USD 0.00332USD 25%↓, 25%↓ Savings Plans(1年, 全額前払い ) 0.02973USD 0.00325USD 27%↓, 26%↓ Savings Plans(3年, 前払いなし ) 0.02184USD 0.00239USD 46%↓, 46%↓ Savings Plans(3年, 一部前払い ) 0.02022USD 0.00221USD 50%↓, 50%↓ Savings Plans(3年, 全額前払い ) 0.01982USD 0.00217USD 51%↓, 51%↓ ・Compute Savings Plansの(1年, 全額前払い )を契約。Fargate利用料金を27%削減することに成功。 ・現時点での使用量(vCPU, vRAM)で契約して、年単位で増減を見直す。

Slide 17

Slide 17 text

まとめ〜 削減結果 〜 Copyright Nulab Inc. All Rights Reserved.

Slide 18

Slide 18 text

まとめ 〜 削減結果 〜 コストエクスプローラーで見るコストの推移 Savings Plansの適用状況 ・ECS Fargate上で稼働している4種類のサービスに対して、それぞれARMへの 移行とリソースの最適化を実施した。 ・Savings Plansの適用状況は、Savings Plans使用状況グラフ で確認する。 ※ 請求とコスト管理 > Savings Plans > 使用状況レポート さらに!ここから Savings Plansを適用して27%削減 66%削減! 【手軽に節約】プラットフォームをARM64へ移行 ↘ 【余剰を節約】コンピューターリソースの最適化 ↙ 【年払で節約】Compute Savings Plansの適用 ↘ _人人人人人人人人人人人人_ > 約70%のコスト削減!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ 100%適用されていることを確認 日々コストが確実に削減されて いく様子が伺え達成感に!