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
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
560
チームでリファクタリングを進めるために
ririru0325
0
150
AWS歴6年のSaaS企業が直面する低凝集マイクロサービスの課題とその解決アプローチ
ririru0325
0
46
エムオーテックスの現場_-_SaaSプロダクトのアーキテクチャ変革と技術負債解消の道のり
ririru0325
0
89
できたこと・やっていきたいこと
ririru0325
0
65
サーバーレス SaaS における運用監視の負荷軽減のためのアプローチ
ririru0325
0
440
サーバーレスアプリケーションの観測を適正化し、運用負荷を減らしていってる話
ririru0325
0
83
Lambdaのこと
ririru0325
0
110
Other Decks in Programming
See All in Programming
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
1.1k
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
320
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
230
What We Talk About When We Talk About XP
m_seki
2
460
自分的「カンファレンスの楽しみ方」
syumai
0
200
スマート反転とウェブアクセシビリティ
camiha
0
180
Press start. Python's next generation.
willingc
PRO
3
330
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
150
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
The Invisible Side of Design
smashingmag
301
52k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Agile that works and the tools we love
rasmusluckow
331
22k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
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
ご清聴ありがとうございました!