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
jq を駆使して aws cli の運用を最適化
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Sho
October 29, 2024
Programming
190
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
jq を駆使して aws cli の運用を最適化
#midosuji_tech
Sho
October 29, 2024
More Decks by Sho
See All by Sho
Java ランタイムからカスタムランタイムに行き着くまで
ririru0325
1
530
チームでリファクタリングを進めるために
ririru0325
0
130
AWS歴6年のSaaS企業が直面する低凝集マイクロサービスの課題とその解決アプローチ
ririru0325
0
38
エムオーテックスの現場_-_SaaSプロダクトのアーキテクチャ変革と技術負債解消の道のり
ririru0325
0
75
できたこと・やっていきたいこと
ririru0325
0
62
サーバーレス SaaS における運用監視の負荷軽減のためのアプローチ
ririru0325
0
430
サーバーレスアプリケーションの観測を適正化し、運用負荷を減らしていってる話
ririru0325
0
77
Lambdaのこと
ririru0325
0
110
Other Decks in Programming
See All in Programming
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
270
自作OSでスライド発表する
uyuki234
0
2.9k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.5k
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
200
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
200
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.6k
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.6k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
620
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
380
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
スマートグラスで並列バイブコーディング
hyshu
0
270
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
120
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
430
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
A better future with KSS
kneath
240
18k
30 Presentation Tips
portentint
PRO
1
330
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
GitHub's CSS Performance
jonrohan
1033
470k
Design in an AI World
tapps
1
250
Test your architecture with Archunit
thirion
1
2.3k
So, you think you're a good person
axbom
PRO
2
2.1k
Facilitating Awesome Meetings
lara
57
7k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Transcript
jq を駆使して aws cli の運用を 最適化
自己紹介 • 名前:桑名 翔 • 所属:エムオーテックス株式会社 • 年齢:28 • 資格:
X(旧Twitter)
今日の話 • jqの概要 • aws cliの概要 • jqの使い方 • 一緒に使いたいコマンド紹介
• 明日みんなに使ってほしいサンプル
jqとは • jq is a lightweight and flexible command-line JSON
processor. ◦ 翻訳: jqは軽量で柔軟なコマンドラインJSONプロセッサーです。 ◦ 引用: https://jqlang.github.io/jq/ • A jq program is a "filter": it takes an input, and produces an output. ◦ 翻訳: jqプログラムは「フィルター」であり、入力を受け取り、出力を生成する。 ◦ 引用: https://jqlang.github.io/jq/manual/
aws cliとは • AWS コマンドラインインターフェイス (AWS CLI) は、AWS のサービ スを管理するための統合ツールです。
◦ 引用: https://aws.amazon.com/jp/cli/ • aws s3 ls • aws dynamodb list-tables • など
jqの使い方 { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } aws dynamodb scan --table-name orders_table ¥ > items.json aws cliによるリソースの操作や情報の取得は 料金が発生することが多いので、実行結果は 保存することをお勧めします
jqの使い方 { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } 特定の要素を抽出 cat items.json | jq '.Items[].order_id.S' "1001" "1002" "1003" 実行結果
jqの使い方 { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } 条件に基づくフィルタリング cat items.json | jq '.Items[] | select(.status.S == "shipped")' { "order_id": { "S": "1001" }, "customer": { "M": { "name": { "S": "Alice" } } }, "status": { "S": "shipped" } } 実行結果
jqの使い方 { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } csvの作成 cat items.json | jq -r '.Items[] | [.order_id.S, .customer.M.name.S, .status.S] | @csv' "1001","Alice","shipped" "1002","Bob","processing" "1003","Charlie","delivered" 実行結果
一緒に使いたいコマンド紹介
sed { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } JSONデータから抽出した文字列の一部を置換する cat items.json | jq -r '.Items[].customer.M.name.S' | sed 's/Alice/Alicia/' Alicia Bob Charlie 実行結果
awk { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } JSONデータから抽出した名前の長さを計算する cat items.json | jq -r '.Items[].customer.M.name.S' | awk '{ print $0, length($0) }' Alice 5 Bob 3 Charlie 7 実行結果
sort { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } JSONデータから抽出した名前をアルファベット順にソートする cat items.json | jq -r '.Items[].customer.M.name.S' | sort Alice Bob Charlie 実行結果
uniq { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } JSONデータから抽出した名前の重複を取り除く cat items.json | jq -r '.Items[].customer.M.name.S' | sort | uniq Alice Bob Charlie 実行結果
wc { "Items": [ { "order_id": {"S": "1001"}, "customer": {"M":
{"name": {"S": "Alice"}}}, "status": {"S": "shipped"} }, { "order_id": {"S": "1002"}, "customer": {"M": {"name": {"S": "Bob"}}}, "status": {"S": "processing"} }, { "order_id": {"S": "1003"}, "customer": {"M": {"name": {"S": "Charlie"}}}, "status": {"S": "delivered"} } ] } JSONデータから抽出した顧客の名前の数をカウントする cat items.json | jq -r '.Items[].customer.M.name.S' | sort | uniq | wc -l 3 実行結果
明日みんなに使ってほしいサンプル
• ターゲット ◦ Lambdaをデプロイしたことがあるアナタ ◦ 新しいロググループを作ったアナタ 明日みんなに使ってほしいサンプル
• ターゲット ◦ Lambdaをデプロイしたことがあるアナタ ◦ 新しいロググループを作ったアナタ 明日みんなに使ってほしいサンプル ログの保持期間、設定しましたか?
明日みんなに使ってほしいサンプル えっ、してない??
明日みんなに使ってほしいサンプル 大丈夫、いい抽出方法がありますよ
• CloudWatch Logs の 保持期間が設定されていないグループの一覧を抽出する • まずは aws cli コマンド
◦ aws logs describe-log-groups 明日みんなに使ってほしいサンプル { "logGroups": [ { "logGroupName": "/aws/lambda/us-east-1.test2", "creationTime": 1598840774656, "metricFilterCount": 0, "arn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:/EC2/Session/:*", "storedBytes": 58315421, "logGroupClass": "STANDARD", "logGroupArn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:/EC2/Session/" }, ︙ { "logGroupName": "/aws-glue/crawlers", "creationTime": 1567491367253, "metricFilterCount": 0, "arn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:/aws-glue/crawlers:*", "storedBytes": 10970538, "logGroupClass": "STANDARD", "logGroupArn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:/aws- glue/crawlers" } ] }
• CloudWatch Logs の 保持期間が設定されていないグループの一覧を出す方法 • aws logs describe-log-groups |
jq -r '.logGroups | map(select(.retentionInDays == null or .retentionInDays == "")) | sort_by(.storedBytes) | .[] | [.logGroupName, .logGroupClass, .retentionInDays, .storedBytes] | @csv' 明日みんなに使ってほしいサンプル "/aws/codebuild/xxxxx", "STANDARD", , 86 "/aws/lambda/yyyyy", "STANDARD", , 106 "/aws/OpenSearchService/domains/zzzzz/search-logs", "STANDARD", , 239 ︙ "/aws/lambda/aaaaa", "STANDARD", , 510708032 "/aws/lambda/bbbbb", "STANDARD", , 521204122 "/aws/lambda/ccccc", "STANDARD", , 532498400
ご清聴ありがとうございました!