Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
jq を駆使して aws cli の運用を最適化
Search
Sho
October 29, 2024
Programming
200
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
580
チームでリファクタリングを進めるために
ririru0325
0
160
AWS歴6年のSaaS企業が直面する低凝集マイクロサービスの課題とその解決アプローチ
ririru0325
0
47
エムオーテックスの現場_-_SaaSプロダクトのアーキテクチャ変革と技術負債解消の道のり
ririru0325
0
93
できたこと・やっていきたいこと
ririru0325
0
69
サーバーレス SaaS における運用監視の負荷軽減のためのアプローチ
ririru0325
0
450
サーバーレスアプリケーションの観測を適正化し、運用負荷を減らしていってる話
ririru0325
0
86
Lambdaのこと
ririru0325
0
110
Other Decks in Programming
See All in Programming
JIS keyboard support in Omarchy
lef237
0
150
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
270
Groovy as a human and AI friendly programming language
paulk
0
100
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
140
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
34k
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
610
ジョジョの世界をXRで再現する
mofurune
0
180
phperだってパンチカードでコーディングしたい
o0h
PRO
0
390
No More NoSuchMethodError
exoego
1
110
🇪🇸 React Alicante 2026 (Workshop)
ythecombinator
PRO
0
100
ChromeでローカルLLM
ryu1013
0
160
APNsからLive Activityを開始する話
yumnumm
0
170
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
A better future with KSS
kneath
240
18k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
The Pragmatic Product Professional
lauravandoore
37
7.5k
From π to Pie charts
rasagy
1
400
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Building Adaptive Systems
keathley
44
3.3k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
Typedesign – Prime Four
hannesfritz
42
3.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
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
ご清聴ありがとうございました!