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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
1
180
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.7k
AmebaブログはKMPから卒業します
kmars0605
0
220
Jetpack Compose Mechanisms
skydoves
3
860
Workers Cache を知る
syumai
0
370
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
890
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
240
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
GraphQL の onError と Nullability のこれから
quramy
0
170
contenteditable と日本語入力に向き合う
colorful12
0
210
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
190
sbt 2.0: takeoff
eed3si9n
0
170
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
6.3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Building Adaptive Systems
keathley
44
3.3k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
640
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
ご清聴ありがとうございました!