継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS の利用料最適化の知識と実践力をつけるなら『Amazon Web Services コスト最適化入門』がオススメ!

タダです.

AWS を使っていると利用料金を気にしながら使っていくと思います.コストを最適化していくためにどんなサービスやツールを使ってコストを最適化していくかを学びたいと思って「Amazon Web Services コスト最適化入門」を購入しました.本書ではコストに関する知識と実践を両軸で学べてとても勉強になったので学べることと所感と一緒に本書を紹介します.

技術書典応援祭のページ techbookfest.org

Booth booth.pm

目次

本書の章立ては次の通りです.本編として145Pの内容です.

  • 第1章 Amazon EC2
  • 第2章 Amazon EBS/EFS
  • 第3章 Amazon VPC/データ転送
  • 第4章 Amazon S3
  • 第5章 AWS Simple Monthly Calculator
  • 第6章 AWS Pricing Calculator
  • 第7章 AWS Cost Explorer
  • 第8章 AWS Cost and Usage Report
  • 第9章 AWS Budgets
  • 第10章 コスト配分タグ
  • 第11章 AWS Trusted Advisor
  • 第12章 AWS Compute Optimizer
  • 第13章 AWS Well-Architected フレームワーク
  • Appendix Redashのインストール・設定

本書で学べること

本書を通じて学べることを以下に列挙します.

  • EC2,EBS,EFS,S3,VPC,ネットワーク転送といった利用料がかかっている要素
  • Simple Caluculator,Pricing Caluculatorを使って利用料金の見積もり方法
  • Cost Explorer,Cost and Usage Report を使って利用料金の可視化と分析を行う方法
  • AWS Budgets,コスト配分タグを使った予算管理方法
  • Trusted Advisor,Compute Optimizer を使って最適化方法
  • Well-Architected Frameworkの質問ごとのコスト最適化のナレッジ

読了後の所感

全体通して料金体系,専用のツールやサービスを概要と手を動かして進行するため実践的な学習ができます.中でも個人的に勉強になったことが3つあります.① Saving Plans,リザーブインスタンス適用例がケースごとに説明されており,理解しやすかったです.また,②ランニングコストの可視化と分析のためのクエリ例が載っていたのも実践的なナレッジで勉強になりました.そして,③ Well-Architected Framework のコスト最適化に必要な要素をプラクティスで学べました.

本書で扱わなかったテーマとして RDS のコスト最適化もあるかと思います.Aurora や RDS でハイスペックのインスタンスを使っているとコストがバカにならないので,EC2 同様にコスト最適化の方法を見てみたいなと思いました.また,直近で Chatbot も GA されてコストアラートを Chatbot に連携する例もみてみたいなと思います.

sadayoshi-tada.hatenablog.com

なお,AWS 公式ブログでもコスト削減の観点を解説した記事がでているので合わせて見ていきたいです.

aws.amazon.com

aws.amazon.com

aws.amazon.com

また,クックパッド社のコスト最適化の取り組みも公開されていたので事例として要チェックです.

techlife.cookpad.com

まとめ

Amazon Web Services コスト最適化入門」で学べること,所感を整理しました.サービスの基盤を AWS として使っている場合にサービスで得られる利益よりも利用料がかかっているような事態が発生するとマネタイズしづらいですが,本書で学んだ知識とツールを使って見直し,最適化を推進する人やコストの勘所を知りたい人にオススメの内容です.

また,感想ツイートをしたところ@ohsawa0515さんからメンションをいただきました(ありがとうございます!).今後,商業誌で本書が出版予定だそうなので気になる方は購入検討されてみてはいかがでしょうか?

【脳筋Tech】減量経過を Amazon Forcast に取り込んで体重の推移を予測してみよう💪!

タダです.

僕は3年前から趣味で筋トレをはじめ去年ボディビルの大会に出始めました.今年も大会に出たいと思いましたが,昨今のコロナウイルスの影響で健康を気にして出ないことにしました...大会自体も開催を取りやめるところが多く,ジムにも行けず(大手のゴールドジムは破産申請を出すほどの影響が出ている)悶々と家や公園でトレーニングする日ばかりになっている人も多いのではないでしょうか?

www.businessinsider.com

脳筋の自分はそんな時でも新しい刺激を求めてしまうのですが,自分の持っているもので何か筋トレにかけてできることがないかと思い,今回のネタを思いつきました! シリーズ化して記事を通してフィットネス,体を鍛えること,ボディビルに興味をもってもらえる人が増えたら嬉しいなと思います.それでは本編行ってみましょう!

2年間筋トレを続けて変わったこと sadayoshi-tada.hatenablog.com

ボディビルディングにつきまとう減量

ボディビルディングの大会は自身の筋肉の良さや作ってきた肉体をポージングでアピールする競技なんですが,筋肉美を際立たせるには脂肪を削ぎ落として血管やら筋繊維がはっきり視覚的に見えるコンディションに持っていく必要があります.そのために,ボディビルダーは大会までは脂肪を削ぎ落とす「減量」を行います.減量の進捗は体重や体脂肪率の数値と見た目で測るのですが,今回の記事はこの体重をネタにします.

ちなみに,自分の去年一番コンディションが良かった King of Kingという団体の大会に参加した時の写真が↓のものです.

f:id:sadayoshi_tada:20200510165801j:plain

仕上がり体重が59kgで体脂肪率は5%以下だったと思います.この頃は腹筋6LDKかつ腹筋板チョコバレンタインでした🍫 なんのこと言っているかわからない方はリンク先の本か Youtube で「ボディビル 掛け声」で検索してください.

ボディビルのかけ声辞典

ボディビルのかけ声辞典

  • 発売日: 2018/07/11
  • メディア: 単行本

Amazon Forcast で減量経過を予測してみる

横道にそれましたが,減量期の体重の過去データを MyFitnessPal というアプリで記録しているので,過去のデータから未来の体重予測をして減量期の進捗を可視化できるようにしたら面白いと思い,Amazon Forcast に着目しました.Amazon Forcast はフルマネージドの機械学習サービスで,過去のデータと予測に影響を与える変数を渡すと予測を自動で行ってくれます.そして,機械学習の経験は不要なことが特徴です.

サービス概要 aws.amazon.com

過去記事 sadayoshi-tada.hatenablog.com

過去の体重から未来の体重を予測させてみる

Amazon Forcast に去年の8月中の一ヶ月分の体重データを渡して9月以降の体重の推移を予測して,実測値との適合度合いを確認してみました.Amazon Forcast にフォーマットに沿った CSV データを S3 にアップロードすればデータセットの取り込み,分析と予測,結果を表示してくれます.Amazon Forcast でサポートされているデータは次のものになります.今回は CUSTOM ドメインになります.

・RETAIL ドメイン – 小売の需要予測

・INVENTORY_PLANNING ドメインサプライチェーンとインベントリの計画

・EC2 CAPACITY ドメインAmazon Elastic Compute Cloud (Amazon EC2) キャパシティの予測

・WORK_FORCE ドメイン – 従業員の計画

・WEB_TRAFFIC ドメイン – 今後のウェブトラフィックの見積もり

・METRICS ドメイン – 収益およびキャッシュフローなどの予測メトリクス

・CUSTOM ドメイン – その他すべての時系列予測のタイプ

docs.aws.amazon.com

データセットの詳細

CUSTOM ドメインのデータフォーマットは次の項目になります.

  • item_id (文字列)
  • timestamp (タイムスタンプ) : 体重を測った日
  • target_value (浮動小数点整数) : 実際の体重

8月の体重推移のデータとして下記のデータを用意して Amazon Forcast に取り込んでドキュメントの手順で解析してみました.

item_id,timestamp,target_value
weight,2019-08-01,67.5
weight,2019-08-02,66.5
weight,2019-08-03,66.4
weight,2019-08-04,66.7
weight,2019-08-05,66
weight,2019-08-06,65.3

データセットAmazon Forcast に渡して予測する

その予測結果が以下のものです.グラフの値が細かいため下記に転記したものが箇条書きのものです.データが少ないため 9/10 までの予測しかできませんでしたが,実際の体重と予測値がマッチしていました.実際の値と予測値があっていると思わずテンションが上がります!

  • 去年の9/10の実際の体重:64.7kg
  • Amazon Forcast が出した値(確率10%):64.7kg
  • Amazon Forcast が出した値(確率50%):65.3kg
  • Amazon Forcast が出した値(確率90%):65.9kg

f:id:sadayoshi_tada:20200510215230p:plain

まとめ

Amazon Forcast を使って過去の体重推移を予測しました.自前で実装するとなると相当な時間と学習コストが必要なところ,CSVデータと Amazon Forcast の設定ができれば予測を行うことができます.今後も脳筋なネタと技術を組み合わせた「脳筋Tech💪」ネタを投稿していきますのでよければチェックしてくだサイドチェスト!(言ってみたかった)

待望の GA! AWS Chatbot を使って AWS をもっと使いこなそう!!

タダです.

ChatOps サービスの AWS Chatbot が一般利用開始されました.Amazon Chime や Slack へ他サービスからの通知メッセージを Lambda 等で処理する手間が不要でメッセージが最適化されているため楽だなとベータ期間中に感じました.この記事で Chatbot がどんな通知を受け取れるかを整理します.そして,もう1つの特徴である Slack からのコマンド実行も紹介して Chatbot を利用検討されている人の参考になれば嬉しいです.

aws.amazon.com

Chatbot と他のサービスとの連携

Chatbot はドキュメントに記載のように SNS をターゲットにして他サービスのイベントや通知を Amazon Chime もしくは Slack で受け取れるようになります.

通知のイメージ aws.amazon.com

コスト管理

AWS のコスト管理で AWS Budgets のアラートも Chatbot への連携できます.メールで見るよりも Slack 等で見るようにすると楽でしょう.AWS Budgets 連携イメージとして公式ブログに載っていますが,予算に対する利用状況をアラート通知してくれます.

docs.aws.amazon.com

開発ツール の通知

CloudFormation の通知はスタックの実行ステータスを作成が開始した時と完了した時で通知してくれます.画像はスタックの作成が成功した時のものです.この他に CodeCommit/CodeBuild/CodeDeploy/CodePipeline の通知も送信可能です. f:id:sadayoshi_tada:20200506140303p:plain

CloudWatch アラーム

CloudWatch アラームの通知も可能なので AWS リソースの監視アラートを通知してみました.画像は EC2 の CPU 使用率が60%を超えた場合のアラートですが,メトリクスの画像で状況も示してくれていてわかりやすいです.

f:id:sadayoshi_tada:20200507020809p:plain

CloudWatch イベントでの設定

CloudWatch イベントルールで設定した対応する他サービスの通知も Chatbot に統合可能です.

Config からの通知

AWS Config の変更履歴に関するイベントも通知できます.リソースの変更があった時スピーディーな感知ができるようになりそうです.

f:id:sadayoshi_tada:20200506233220p:plain

GuardDuty からの通知

GuardDuty のセキュリティ脅威イベントも通知できます.

f:id:sadayoshi_tada:20200506233238p:plain

PHD からの通知

Personal Health Dashboard の通知は以前記事でも紹介しましたが,影響を受けるリソースを通知してくれます.

f:id:sadayoshi_tada:20200308160500p:plain

sadayoshi-tada.hatenablog.com

SecurityHub からの通知

SecurityHub からのセキュリティチェック結果を通知したのが画像のものです.

f:id:sadayoshi_tada:20200506233258p:plain

Systems Manager からの通知

Systems Manager のイベントも通知を統合できます.画像は RunCommand の実行結果を通知した例です.

f:id:sadayoshi_tada:20200506235459p:plain f:id:sadayoshi_tada:20200506235510p:plain

Slack から AWS CLI コマンドを実行

Chatbot は通知を受け取るだけでなく Slack から AWS CLI コマンドを実行できます.Chatbot にアタッチした IAM ロールにコマンド実行に必要なポリシーを適用します.今回はドキュメントに記載のある参照の権限を付与しました.

docs.aws.amazon.com

{
   "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iam:*",
                "kms:*",
                "sts:*",
                "cognito-idp:GetSigningCertificate",
                "ec2:GetPasswordData",
                "ecr:GetAuthorizationToken",
                "gamelift:RequestUploadCredentials",
                "gamelift:GetInstanceAccess",
                "lightsail:DownloadDefaultKeyPair",
                "lightsail:GetInstanceAccessDetail",
                "lightsail:GetKeyPair",
                "lightsail:GetKeyPairs",
                "redshift:GetClusterCredentials",
                "s3:GetBucketPolicy",
                "storagegateway:DescribeChapCredentials"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

複数アカウントで設定されている場合,@aws set default-accountで切り替えてから実行していきます. f:id:sadayoshi_tada:20200507025939p:plain

試しに CloudWatch のアラーム一覧を@aws cloudwatch describe-alarmsで出力できます. f:id:sadayoshi_tada:20200507025947p:plain

他にも Lambda を実行したり,CloudWatch Logs の確認もドキュメントで紹介されていますので,運用中のシステムでアラートが出たのを確認して Slack から状況を確認するというアプローチも今後できますので活用していきたいと思います.

まとめ

Chatbot の通知できるサービスを整理しました.Slack を業務で使っている事例も多く聞くため業務との親和性も高い Chatbot を活用してチャットから AWS をさらに使いこなしていきましょう!

Datadog の監視をハンズオン形式で学べる『Datadog で始めるモニタリング基盤』

タダです.

業務で Datadog を使う機会が出てきたので,技術書典応援祭で見つけた「Datadog で始めるモニタリング基盤」を手に取らせていただきました.本書を読み終えて所感と一緒に本書を紹介させてもらいます.

技術書典応援祭のページ techbookfest.org

Booth booth.pm

概要

本書は全48ページで次の章立てになっています.

  • 第1章 なぜ監視をするのか
  • 第2章 本書で登場する技術についての説明
  • 第3章 外形監視
  • 第4章 サーバー監視
  • 第5章 アプリケーション監視
  • 第6章 ログ監視

本書を通じて勉強になったこと

本書で個人的な勉強になったポイントを列挙します.

サーバーレスの監視実践

Datadog でサンプルアプリケーションを使った URL 監視,AWS リソースの監視,アプリケーションの監視,ログ監視設定を実践ができます.サンプルアプリケーションは CloudFront と S3,ALB,Fargateを組み合わせた環境になっており,いわゆるサーバーレス構成になっています.自分自身 EC2 の監視で Datadog Agent を入れて監視を行ったことがあったのですがコンテナ環境の監視やアプリケーションの監視を実践する機会がなかったので経験できて良かったです.

github.com

Datadog 特有の設定や仕様を知れる

Datadog の通知文の変数やマネージドサービスの監視メトリクスの情報収集の仕様などが触れられているため,Datadog の監視を始める人にとって最短で押さえるべき知識をつけられます.特に通知は監視の肝ですが,独自の変数が使って行うため慣れが必要だと感じてます.本書で全ての変数を押さえられませんが,手を動かして通知文の設定できて勉強になります.

docs.datadoghq.com

Datadog のナレッジが得られる

Datadog APM をどうやって運用していくか,Datadog で問い合わせしたい場合の方法といった Datadog のナレッジも本書から得ることができます.Datadog を使い始めたての人や気づきを得たい人にオススメの内容だと思いました.

まとめ

Datadog で始めるモニタリング基盤」は実践的な設定を通して Datadog をこれから始める予定や始めたての人にとって有益な内容だと感じました.特に AWS の監視を Datadog で行おうとしている人や Datadog で監視を始めたがスピーディーに学びたい人にオススメです.

関連情報

公式ドキュメント docs.datadoghq.com

公式ブログ www.datadoghq.com

サービスステータス status.datadoghq.com

【Athena の躓きシリーズ】CloudTrail の構造体データが入った配列に対する Athena のクエリ

タダです.

業務で Athena を使って S3 のデータを分析・解析することはよくあると思うのですが,CloudTrail の中でも構造体のデータを扱いたい時に欲しいデータの取り出しで詰まったのでこの記事でその対処をまとめます.

CloudTrail 用テーブル作成

予めログを取っているアカウントで 下記のドキュメントを参考に CloudTrail ログのテーブル作成を作りました.

docs.aws.amazon.com

テーブルを作成後,SELECT * FROM "テーブル名" limit 10;で以下のようなレコードが取れます.

"eventversion","useridentity","eventtime","eventsource","eventname","awsregion","sourceipaddress","useragent","errorcode","errormessage","requestparameters","responseelements","additionaleventdata","requestid","eventid","resources","eventtype","apiversion","readonly","recipientaccountid","serviceeventdetails","sharedeventid","vpcendpointid"
"1.05","{type=AWSService, principalid=null, arn=null, accountid=null, invokedby=cloudtrail.amazonaws.com, accesskeyid=null, username=null, sessioncontext=null}","2019-06-05T13:25:20Z","sts.amazonaws.com","AssumeRole","eu-west-1","cloudtrail.amazonaws.com","cloudtrail.amazonaws.com",,,"{""roleArn"":""arn:aws:iam::XXXXXXXXXXX:role/CloudTrail_CloudWatchLogs_Role"",""roleSessionName"":""CLOUDWATCH_LOGS_DELIVERY_SESSION""}","{""credentials"":{""accessKeyId"":""XXXX"",""expiration"":""Jun 5, 2019 2:25:20 PM"",""sessionToken"":""XXXX/XXX/XXXX/XXXX/XXXX/XXXX""},""assumedRoleUser"":{""assumedRoleId"":""XXXX"",""arn"":""arn:aws:sts::XXXXXXXXXXX:assumed-role/CloudTrail_CloudWatchLogs_Role/CLOUDWATCH_LOGS_DELIVERY_SESSION""}}",,"XXXX","XXXX","[{arn=arn:aws:iam::XXXXXXXXXXX:role/CloudTrail_CloudWatchLogs_Role, accountid=XXXXXXXXXXX, type=AWS::IAM::Role}]","AwsApiCall",,,"XXXXXXXXXXX",,"XXXX"

構造体のデータを取得する方法

今回取りたいのは,resourcesに入っているデータです.resourcesは「resources ARRAY<STRUCT<ARN:STRING,accountId:STRING,ype:STRING>>」で定義している構造体が入っている配列データ構造になっています.resourcesに対してクエリを投げた結果帰ってくるレコードは [{arn=arn:aws:iam::XXXX:role/CloudTrail_CloudWatchLogs_Role, accountid=XXXX, type=AWS::IAM::Role}]と言った具合です.

構造体データに対するクエリ例

結論としては次のようなクエリでデータを取れました.

SELECT
 resource.[取りたい情報]
FROM "テーブル名"
CROSS JOIN UNNEST(resources) AS t (resource)
LIMIT 10;

例えば,ARN 情報を取りたい場合は次のようなクエリになります.クエリの結果として帰ってくるのが arn:aws:iam::XXXX:role/CloudTrail_CloudWatchLogs_Role と言った情報です.

SELECT
 resource.arn
FROM "テーブル名"
CROSS JOIN UNNEST(resources) AS t (resource)
LIMIT 10;

ポイントになるのはCROSS JOINUNNEST句です.2つを組み合わせることで配列のデータを展開した行レコードを作っています.展開後のレコードから必要な情報を抽出しています. docs.aws.amazon.com

まとめ

CloudTrail の構造体データを Athena で扱う対処についてまとめました.Athena で溜まったデータの活かし方をもっと学んでいきたいと思います.