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
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
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
11k
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
3
940
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
3
750
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
480
MCPと認可まわりの話 / mcp_and_authorization
convto
2
1.8k
バクラクの認証基盤の成長と現在地 / bakuraku-authn-platform
convto
4
2.5k
gob バイナリが Go バージョンによって 出力が変わることについて調べてみた / Investigating How gob Binary Output Changes Across Go Versions
convto
0
190
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
convto
3
690
バイナリを眺めてわかる gob encoding の仕様と性質、適切な使い方 / understanding gob encoding
convto
6
3.6k
Other Decks in Programming
See All in Programming
sbt 2.0: takeoff
eed3si9n
0
160
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
180
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
100
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
400
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
270
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
ActionController meets Protocol Buffers
sorah
0
560
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
530
Domain-Driven Transformation
hschwentner
2
2.3k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
Featured
See All Featured
From π to Pie charts
rasagy
1
400
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Writing Fast Ruby
sferik
630
63k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Unsuck your backbone
ammeep
672
58k
Paper Plane
katiecoart
PRO
5
54k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Speed Design
sergeychernyshev
33
2.2k
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 の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました