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
Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する
Search
convto
January 20, 2019
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する
convto
January 20, 2019
More Decks by convto
See All by convto
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
670
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
390
MCPと認可まわりの話 / mcp_and_authorization
convto
2
1.6k
バクラクの認証基盤の成長と現在地 / bakuraku-authn-platform
convto
4
2.2k
gob バイナリが Go バージョンによって 出力が変わることについて調べてみた / Investigating How gob Binary Output Changes Across Go Versions
convto
0
180
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
convto
3
600
バイナリを眺めてわかる gob encoding の仕様と性質、適切な使い方 / understanding gob encoding
convto
6
3.5k
みんなでたのしむ math/big / i love math big
convto
0
350
Go1.22からの疑似乱数生成器について/go-122-pseudo-random-generator
convto
2
1k
Other Decks in Programming
See All in Programming
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1k
Android CLI
fornewid
0
170
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
250
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
550
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
200
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
170
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
360
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
360
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
210
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
270
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
440
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
380
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Design in an AI World
tapps
1
270
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
190
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
440
Context Engineering - Making Every Token Count
addyosmani
9
1k
Transcript
Athenaのパーテション設定を CloudWatch Events + Lambda で自動化する 2019/1/20(日) ShinjukuLT
もくじ - 自己紹介 - Athenaとは - なぜパーティション設定を自動化したいか - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
もくじ - 自己紹介 - Athenaとは - なぜパーティション設定を自動化したいか - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
srttk jisibari .inc Twitter: @_srttk Github: srttk 4
もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
Athena とは - AWSのサービス - S3のデータをSQLで検索できる - サーバーレス - スキャン量課金
Athena とは - AWSのサービス - S3のデータをSQLで検索できる - サーバーレス - スキャン量課金
BigQueryのAWS版みたいなもの
Athena とは - AWSのサービス - S3のデータをSQLで検索できる - サーバーレス - スキャン量課金
BigQueryのAWS版みたいなもの LBのログとかにいい感じにSQL投げれる
Athena とは - AWSのサービス - S3のデータをSQLで検索できる - サーバーレス - スキャン量課金
BigQueryのAWS版みたいなもの LBのログとかにいい感じにSQL投げれる 便利
どう使うの? - AWSコンソールでCREATE TABLE文をうつ - おしまい
どう使うの? - AWSコンソールでCREATE TABLE文をうつ - おしまい 簡単
LBのログはこんな感じ
LBのログはこんな感じ 長くて見えない
LBのログだとこんな感じ 長くて見えない 公式にがっつり載ってます https://docs.aws.amazon.com/ja_jp/athen a/latest/ug/application-load-balancer-logs. html
もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
Athenaのパーティションとは - テーブルのデータを分離する機能 - 特定パーティションのみをクエリ対象にできる - クラウド死を避けるために必要
Athenaのパーティションとは - テーブルのデータを分離する機能 - 特定パーティションのみをクエリ対象にできる - クラウド死を避けるために必要
Athenaのパーティションとは - テーブルのデータを分離する機能 - 特定パーティションのみをクエリ対象にできる - クラウド死を避けるために必要 具体的な設定方法を説明します
テーブルのデータを 分離
テーブル作成時にパーティション宣言が必要
拡大
拡大 簡単
パーティションの割り当ても必要
パーティションの割り当ても必要 S3のパスがHive形式だと 割り当ては省略できるよ
パーティションの割り当ても必要 S3のパスがHive形式だと 割り当ては省略できるよ くわしくはこちら https://docs.aws.amazon.com/ja_jp/athen a/latest/ug/partitions.html
パーティション割り当てはクエリを発行するしかない - いちいちクエリを打たないといけない - 正気か!?? - 自動化しないと終わる
パーティション割り当てはクエリを発行するしかない - いちいちクエリを打たないといけない - 正気か!?? - 自動化しないと終わる LBさん、自動で掘るS3のパス Hive形式にしてほしかったな。。。
特定パーティションを クエリ対象にする
ふつうにwhereで引っ掛けます
ふつうにwhereで引っ掛けます 今回の例だと、年と月のセットで whereかけたいのでconcatしてます
ふつうにwhereで引っ掛けます 今回の例だと、年と月のセットで whereかけたいのでconcatしてます yearだけでwhereしないなら 分けなくてもいいかも
もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
なぜ Lambda + CloudWatch Event か - サーバー管理したくなかった - jenkinsその他ツールに依存したくない
- 独立したできるだけ小さい構成にしたかった
なぜ Lambda + CloudWatch Event か - サーバー管理したくなかった - jenkinsその他ツールに依存したくない
- 独立したできるだけ小さい構成にしたかった Athenaもサーバーレスだし サーバーレスにしたかった
もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
apexとは - lambda関数の管理ができるサードパーティーツー ル - デプロイ、ドライラン、関連インフラの生成などが 可能 - インフラ構築は内部でterraformを利用している
apexとは - lambda関数の管理ができるサードパーティーツー ル - デプロイ、ドライラン、関連インフラの生成などが 可能 - インフラ構築は内部でterraformを利用している `apex
infra` サブコマンドで インフラ管理できる。 実装はterraformをexecしてるだけ
apexとは - lambda関数の管理ができるサードパーティーツー ル - デプロイ、ドライラン、関連インフラの生成などが 可能 - インフラ構築は内部でterraformを利用している `apex
infra` サブコマンドで インフラ管理できる。 実装はterraformをexecしてるだけ だからplanとかapplyとかできる
apexとは - lambda関数の管理ができるサードパーティーツー ル - デプロイ、ドライラン、関連インフラの生成などが 可能 - インフラ構築は内部でterraformを利用している `apex
infra` サブコマンドで インフラ管理できる。 実装はterraformをexecしてるだけ だからplanとかapplyとかできる https://github.com/apex/apex/blob/453c83 c5a12940de117e080c50a72dfa4f7a6b6a/ nfra/infra.go#L38-L45
なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの
管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い
なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの
管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い AWSリソース自身に 他のリソースについて言及されると 収集つかなくなる
なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの
管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い AWSリソース自身に 他のリソースについて言及されると 収集つかなくなる SAMはそれ単体で完結するのが強い apexはterraformからインフラを管理するか ら整合性を取りやすい
なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの
管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い AWSリソース自身に 他のリソースについて言及されると 収集つかなくなる SAMはそれ単体で完結するのは強い apexはterraformからインフラを管理するか ら整合性を取りやすい 今回はapexが向いていた (既存インフラ管理がterraformだったため)
気をつけること - インフラ構築とlambda本体のデプロイの順番を考 慮する必要がある
気をつけること - インフラ構築とlambda本体のデプロイの順番を考 慮する必要がある どういうこと?
IAM role と lambda の場合 - 初手 `apex deploy`
IAM role と lambda の場合 - 初手 `apex deploy` Lambda実行用の
IAM role が未定義なのでエラー
IAM role と lambda の場合 - 初手 `apex deploy` Lambda実行用の
IAM role が未定義なのでエラー - `apex infra apply` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy`
IAM role と lambda の場合 - 初手 `apex deploy` Lambda実行用の
IAM role が未定義なのでエラー - `apex infra apply` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` 成功!
IAM role と lambda の場合 - 初手 `apex deploy` Lambda実行用の
IAM role が未定義なのでエラー - `apex infra apply` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` 成功! こういうことです
IAM role と CloudWatch Event と lambda の場合 - `apex
infra apply` から始める
IAM role と CloudWatch Event と lambda の場合 - `apex
infra apply` から始める lambdaがまだ存在しないのでCloudWatch Eventが 作れなくてエラー
IAM role と CloudWatch Event と lambda の場合 - Terraformをmodule化する
- `apex infra apply -target=module.your_iam_module` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` - `apex infra apply -target=module.your_cloudwatch_event_module`
IAM role と CloudWatch Event と lambda の場合 - Terraformをmodule化する
- `apex infra apply -target=module.your_iam_module` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` - `apex infra apply -target=module.your_cloudwatch_event_module` 成功
IAM role と CloudWatch Event と lambda の場合 - Terraformをmodule化する
- `apex infra apply -target=module.your_iam_module` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` - `apex infra apply -target=module.your_cloudwatch_event_module` 成功 つら
IAM role と CloudWatch Event と lambda の場合 - Terraformをmodule化する
- `apex infra apply -target=module.your_iam_module` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` - `apex infra apply -target=module.your_cloudwatch_event_module` 成功 つら とはいえ一度デプロイしたら のちの更新は `apex infra apply` だけでいい
IAM role と CloudWatch Event と lambda の場合 - Terraformをmodule化する
- `apex infra apply -target=module.your_iam_module` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` - `apex infra apply -target=module.your_cloudwatch_event_module` 成功 つら とはいえ一度デプロイしたら のちの更新は `apex infra apply` だけでいい apexの嬉しい部分と 天秤にかけて、 採用するか決めると良さそう
具体的なコードについて - 量の関係で省略します - この記事が参考になると思います(少し古いです が) https://dev.classmethod.jp/cloud/aws/ami-and- snapshot-delete-with-apex-and-terraform/
もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
Lambda用のAthenaの実行ロール - Athena本体はFullAccessでいい - AthenaはS3に対しても読み込み等権限が必要 - とはいえAthenaの処理でS3のどのような権限が必 要なのかわかりづらい - 調べるのにそこそこ時間を使ってしまった
Lambda用のAthenaの実行ロール - Athena本体はFullAccessでいい - AthenaはS3に対しても読み込み等権限が必要 - とはいえAthenaの処理でS3のどのような権限が必 要なのかわかりづらい - 調べるのにそこそこ時間を使ってしまった
ここに載ってました https://docs.aws.amazon.com/ja_jp/athen a/latest/ug/cross-account-permissions.htm l
Lambda用のAthenaの実行ロール - Athena本体はFullAccessでいい - AthenaはS3に対しても読み込み等権限が必要 - とはいえAthenaの処理でS3のどのような権限が必 要なのかわかりづらい - 調べるのにそこそこ時間を使ってしまった
ここに載ってました https://docs.aws.amazon.com/ja_jp/athen a/latest/ug/cross-account-permissions.htm l Gist書いたので よければ参考にしてください
Lambda用のAthenaの実行ロール - Athena本体はFullAccessでいい - AthenaはS3に対しても読み込み等権限が必要 - とはいえAthenaの処理でS3のどのような権限が必 要なのかわかりづらい - 調べるのにそこそこ時間を使ってしまった
ここに載ってました https://docs.aws.amazon.com/ja_jp/athen a/latest/ug/cross-account-permissions.htm l Gist書いたので よければ参考にしてください https://gist.github.com/srttk/985f8ef07c29e 57e1ff89689105274e1
パーティション発行スクリプトのパス指定ミス - Lambda発行スクリプトはGoで書いてた - 月の取得を time.Time.Month() でやってた - time.Time.Month() はゼロパディングなしの現在の
月を取得する関数(1とか12とか) - LBはYYYY/MM/DDでパスを掘る
ようするにこういうクエリを発行してしまった
対策 - time.Time.Format(“01”) で月を取得する - Goのtimeのフォーマットについては https://qiita.com/ruiu/items/5936b4c3bd6eb48 7c182 が詳しい
対策 - time.Time.Format(“01”) で月を取得する - Goのtimeのフォーマットについては https://qiita.com/ruiu/items/5936b4c3bd6eb48 7c182 が詳しい 詳しいフォーマットについてはソースをみてい
るとconst定義されてます
対策 - time.Time.Format(“01”) で月を取得する - Goのtimeのフォーマットについては https://qiita.com/ruiu/items/5936b4c3bd6eb48 7c182 が詳しい 詳しいフォーマットについてはソースをみてい
るとconst定義されてます https://github.com/golang/go/blob/5538a9 a34fc4e395967c0233aab5bdde0cebbf9b/ src/time/format.go#L90-L122
もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda
+ CloudWatch Event か - apexでの構築 - はまったところ - まとめ
まとめ - apex, dry-runとか環境分けたりとかlocal実行とかで きて便利 - インフラ構成も考慮に入れると手順がだるい - Lambdaのサイズ間によっては直接terraformで書 いた方が楽かも
- Athenaを叩く実行ロールはS3周りがだるいので覚 えておくと楽 - 初歩的ですがYYYY/MM/DDには気をつけてくださ い
まとめ - apex, dry-runとか環境分けたりとかlocal実行とかで きて便利 - インフラ構成も考慮に入れると手順がだるい - Lambdaのサイズ間によっては直接terraformで書 いた方が楽かも
- Athenaを叩く実行ロールはS3周りがだるいので覚 えておくと楽 - 初歩的ですがYYYY/MM/DDには気をつけてくださ い みなさんもよきLambdaライフを!
- プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました