Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Startup Day 2023 今日ここで! コスト削減ハンズオン / Cost-S...

hiroga
September 02, 2023

AWS Startup Day 2023 今日ここで! コスト削減ハンズオン / Cost-Saving Hands-On today!

AWS Startup Community - Startup Day 2023 のハンズオン資料です。
https://aws-startup-community.connpass.com/event/289498/

hiroga

September 02, 2023
Tweet

More Decks by hiroga

Other Decks in Technology

Transcript

  1. やること・やらないこと • やること ◦ 実験などで作成したゴミリソースの掃除 ◦ 主にアプリケーションを ECSを動かしている方向けの設定 • やらないこと

    ◦ Reserved InstanceやSavings Planといった、前払い系の施策は紹介しません ◦ Cost ExplorerやBilling Dashboardの見方は紹介しません ◦ Anomaly Detectionの設定やFinOpsといった、運用には踏み込みません
  2. 目次 1. 検査 a. AWS Trusted Advisor b. AWS Compute

    Optimizer c. EC2 Global View d. AWS Systems Manager Automation (AWSSupport-ListEC2Resources) 2. 適応 a. CloudTrail b. EC2の停止・削除 c. EIPの開放 d. ENIの削除 e. CPU・メモリ最適化(ECS) f. 休日・夜間の停止(ECS) g. Fargate Spot h. ECRのライフサイクルポリシー
  3. サービス マルチ アカウント マルチ リージョン 主な対象 備考 AWS Trusted Advisor

    ✅ ✅ 各種Reserved Instance, Savings Plan, 各種利用率が低いリソース Organization管理アカウ ントのサポートプランが Buisness以上 AWS Compute Optimizer ✅ ✅ EC2インスタンス, Auto Scalingグルー プ, EBSボリューム, Lambda, ECS Fargate 使用可能なリージョンに 制限あり(東京・大阪 OK) EC2 Global View ❌ ✅ EC2インスタンス, EBS, VPC関連リソー ス AWS Systems Manager Automation AWSSupport-ListEC2Re sources ❌ ✅ EC2インスタンス, ENI, ELB, AMI, EBS スナップショット, EBSボリューム 検査
  4. AWS Trusted Advisor • セキュリティやコストについての自動チェック • サポートプランによって範囲が異なる ◦ ベーシック($0/月)、デベロッパー($29/月):コアセキュリティチェックなど ◦

    ビジネス($100/月)以上:コスト最適化を含む全て • Trusted Advisor自体の利用は無料(のはず) • 主にReserved InstanceやSavings Planが勧められる
  5. AWS Compute Optimizer • AWSのCompute系リソースのコスト最適化のアドバイス ◦ EC2: インスタンスサイズ小さくできるよ! ◦ ECS

    Fargate: CPUやメモリサイズ削減できるよ! • EBSのボリュームサイズ、Lambdaのメモリサイズの適切さについては、Trusted Advisorに統合できる ◦ むしろEC2やECSの方が統合してほしいんですが ...? • 内部的にはCloudWatch Metricsを分析している • 基本無料 ◦ EC2とAuto Scaling Groupを対象に、分析期間を2週間から3ヶ月に延長できる有料機能 あり
  6. EC2 Global View • AWS リージョン全域で、インスタンス、VPC、サブネット、セキュリティグループ、ボ リュームなどの AWS リソースを閲覧できる •

    すべてのAWSリージョンで利用可能 • 全リージョンのデフォルトVPCリソースを削除するのにも便利 • ユーザーの権限で実行するので、実行にあたり ec2:... のpermissionが必要
  7. AWS Systems Manager Automation • Systems ManagerはオンプレとAWSのサーバー管理のツールセット • AWSのマネージドサービスも管理できるように進化 •

    EC2インスタンス機能のための機能群と、それ以外の機能群 • ドキュメントという機能があり、これはAnsibleのPlaybookのようなもの • 今回はドキュメント AWSSupport-ListEC2Resources を用いる
  8. サービス 保持期間 対象イベント 転送費用 保存費用 クエリ費用 CloudTrail イベント履歴 過去 90日間

    CloudTrailイベント (管理) $0 $0 $0 CloudTrail + S3 + Athena S3に準じる CloudTrailイベント(管理・データ ・Insight)から選択 1つ目の Trailは無料 S3に準じる $5/TB (=Athena) CloudTrail Lake 最大 7 年間 (2557 日) CloudTrailイベント(管理・データ・ Insight), AWS Configイベント, 外部イベントから選 択 $2.5/GB $0 $5/TB CloudTrailとCloudTrail Lake • すでにCloudTrailの証跡 (Trail) が作成されていれば、それを見る ◦ ex: Control Tower • CloudTrailの証跡を作成する予定がなければ、 CloudTrail Lakeを検討! 参考: [訂正記事] CloudTrail Lakeの保存料金はデータ取り込み時の一度だけでした!(毎月の保存料金は発生しません)
  9. 参考: CloudTrailイベントの違い • 管理イベント ◦ ex. S3 Bucketの作成、IAMリソースの作成 • データイベント

    ◦ ex. S3のGetObject、LambdaのInvokeFunction • Insightイベント ◦ 異常なアクティビティの検知 ◦ GuardDutyがEC2やIAMに強いのに対し、幅広いAWSリソースに対 応している強みがある
  10. CloudTrail + S3 + Athenaの構築 画像: S3 に保存した CloudTrail のログを

    Athena でクエリしてRoute 53 のレコードをいつ誰が作成したか調査してみた
  11. 4. (Athena) S3 Bucketを選択 Expected bucket owner について • 所有アカウントが異なるS3

    Bucketに 結果を出力する場合、Bucket名は手 打ちになります。タイポで知らないアカ ウントのBucketに保存しないように、 所有アカウントIDを別途入力できるよ うです。 暗号化について • AWSのAPI呼び出し時に秘匿すべき 情報を渡しているなら、暗号化すべき かも。
  12. • CloudTrail + S3 + AthenaとCloudTrail Lakeで型が異なる ◦ CloudTrail +

    S3 + Athena ◦ CloudTrail Lake • まずは SELECT * でデータの特徴を掴む • 型によって .(ドット)演算子、element_at、json_extractを使い分ける Athena / CloudTrail Lakeのクエリーのコツ
  13. プロパティ Athenaの型 Lakeの型 eventversion STRING string useridentity STRUCT STRUCT eventtime

    STRING timestamp eventsource STRING string eventname STRING string awsregion STRING string sourceipaddress STRING string useragent STRING string errorcode STRING string errormessage STRING string requestparameters STRING map<string,string> responseelements STRING map<string,string> additionaleventdata STRING map<string,string> requestid STRING string eventid STRING string readonly STRING boolean resources ARRAY array<structaccountid:string,type:string,arn:string,arnprefix:string> eventtype STRING string apiversion STRING string managementevent N/A boolean recipientaccountid STRING string sharedeventid STRING string annotation N/A string vpcendpointid STRING string serviceeventdetails STRING map<string,string> addendum N/A map<string,string> edgedevicedetails N/A map<string,string> insightdetails N/A map<string,string> eventcategory N/A string tlsdetails STRUCT structtlsversion:string,ciphersuite:string,clientprovidedhostheader:string sessioncredentialfromconsole N/A string eventjson N/A string eventjsonchecksum N/A string
  14. CPU・メモリ最適化(ECS) 考察 • 最低値はCPU: 256 (.25 vCPU)、メモリ: (512 MiB) •

    CDKのデフォルトは256/512 • 過去に「挙動が安定しなかった」「本番に大量リクエストがあ り、テンプレートごと修正した」のようなケースで取り敢えず 引き上げて忘れてることがよくある
  15. 休日・夜間の停止(ECS) • Application Auto ScalingでCRON式によるサービスの停止・再開が可能 • Application Auto ScalingにGUIはない •

    CLI, API, CDK, Terraformなど、お好きな手段で設定ください • APIとしてはタイムゾーンを設定できるが、2023-09-02 現在CDKからは設定するこ とができない ◦ 頑張ってUTCに変換する
  16. 休日・夜間の停止(ECS)設定例 { "ScalableTargets": [ { "ServiceNamespace": "ecs", "ResourceId": "service/******", "ScalableDimension":

    "ecs:service:DesiredCount", "MinCapacity": 0, "MaxCapacity": 0, "RoleARN": "arn:aws:iam::************:role/aws-service-role/ecs.applicati on-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoS caling_ECSService", "CreationTime": "2023-06-14T18:26:19.446000+09:00", "SuspendedState": { "DynamicScalingInSuspended": false, "DynamicScalingOutSuspended": false, "ScheduledScalingSuspended": false }, "ScalableTargetARN": "arn:aws:application-autoscaling:ap-northeast-1:******" }, { "ScheduledActions": [ { "ScheduledActionName": "claim-internal-ecs-start", "ScheduledActionARN": "arn:aws:autoscaling:ap-northeast-1:******", "ServiceNamespace": "ecs", "Schedule": "cron(00 22 ? * SUN-THU *)", "ResourceId": "service/******", "ScalableDimension": "ecs:service:DesiredCount", "ScalableTargetAction": { "MinCapacity": 1, "MaxCapacity": 2 }, "CreationTime": "2023-06-14T18:01:04.088000+09:00" },
  17. Fargate Spot • ECS版のスポットインスタンス • Savings Planは前払い、Fargate Spotは空きリソースの活用 • タスクが中断することがある

    • だいたいコストが3~4割に抑えられ る。 この期間は バグってたので 無視してください
  18. Fargate Spot CDK設定サンプル export const fargateCapacity = (envPrefix: EnvPrefixType): CapacityProviderStrategy

    => { if (envPrefix == DEV') { return { capacityProvider: 'FARGATE_SPOT', weight: 1, }; } else { return { capacityProvider: 'FARGATE', weight: 1, }; } };