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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
3
800
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
700
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
400
MCPと認可まわりの話 / mcp_and_authorization
convto
2
1.7k
バクラクの認証基盤の成長と現在地 / bakuraku-authn-platform
convto
4
2.3k
gob バイナリが Go バージョンによって 出力が変わることについて調べてみた / Investigating How gob Binary Output Changes Across Go Versions
convto
0
180
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
convto
3
610
バイナリを眺めてわかる gob encoding の仕様と性質、適切な使い方 / understanding gob encoding
convto
6
3.5k
みんなでたのしむ math/big / i love math big
convto
0
360
Other Decks in Programming
See All in Programming
新卒PdEのリアル
ryu1013
1
390
Oxlintはいいぞ(続)
yug1224
1
540
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
500
Building an Out-of-Order CPU
latte72
0
670
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
110
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
110
Foundry Localでエージェント開発
seosoft
0
130
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
110
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
110
Flow は今どうなっているか
mizdra
PRO
0
920
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
120
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
510
A Soul's Torment
seathinner
7
3.5k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.5k
エンジニアに許された特別な時間の終わり
watany
108
250k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
From π to Pie charts
rasagy
0
350
Practical Orchestrator
shlominoach
191
12k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
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 の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました