Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する
convto
January 20, 2019
Programming
0
73
Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する
convto
January 20, 2019
Tweet
Share
More Decks by convto
See All by convto
byte列のbit表現を得るencodingライブラリ作った
convto
1
590
Go runtimeの歩き方/how to follow go runtime function
convto
1
500
入出金ドメインの苦労話と解決へのアプローチ/funds in/out difficulties and solutions
convto
1
940
rsa_understanding_memo
convto
0
340
検索エンジンことはじめ/First step towards full-text search engine
convto
0
66
自作コンパイラやっていきの巻💪💪/making my own compiler!
convto
0
66
kubernetes 浅瀬 dive / kubernetes shallow dive
convto
0
440
GoogleCloudFunctionsでHTTPフックなGoスクリプトを書く / Write HTTP hook Go script with GoogleCloudFunctions
convto
0
55
Goのパフォーマンス計測 / go performance measurement
convto
0
210
Other Decks in Programming
See All in Programming
CDKでValidationする本当の方法 / cdk-validation
gotok365
1
160
Hono v3 - Do Everything, Run Anywhere, But Small, And Faster
yusukebe
4
120
はてなリモートインターンシップ2022 インフラ 講義資料
hatena
4
2.1k
Ruby Pattern Matching
bkuhlmann
0
600
Step Functions Distributed Map を使ってみた
codemountains
0
100
Refactor with using `available` and `deprecated`
417_72ki
3
370
Quarto Tips for Academic Presentation
nicetak
0
890
eBPF와 함께 이해하는 Cilium 네트워킹
hadaney
3
830
Azure Functionsをサクッと開発、サクッとデプロイ/vscodeconf2023-baba
nina01
1
320
Spring BootとKubernetesで実現する今どきのDevOps入門
xblood
0
330
AWS App Runnerがそろそろ本番環境でも使い物になりそう
n1215
PRO
0
850
jq at the Shortcuts
cockscomb
1
390
Featured
See All Featured
What the flash - Photography Introduction
edds
64
10k
Done Done
chrislema
178
14k
How To Stay Up To Date on Web Technology
chriscoyier
779
250k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
2
390
The Brand Is Dead. Long Live the Brand.
mthomps
48
2.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
22
1.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
56
2.5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
GraphQLとの向き合い方2022年版
quramy
20
9.8k
GraphQLの誤解/rethinking-graphql
sonatard
39
7.8k
Happy Clients
brianwarren
90
5.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
643
54k
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 の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました