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
64
Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する
convto
January 20, 2019
Tweet
Share
More Decks by convto
See All by convto
byte列のbit表現を得るencodingライブラリ作った
convto
1
140
Go runtimeの歩き方/how to follow go runtime function
convto
1
130
入出金ドメインの苦労話と解決へのアプローチ/funds in/out difficulties and solutions
convto
1
620
rsa_understanding_memo
convto
0
260
検索エンジンことはじめ/First step towards full-text search engine
convto
0
59
自作コンパイラやっていきの巻💪💪/making my own compiler!
convto
0
59
kubernetes 浅瀬 dive / kubernetes shallow dive
convto
0
410
GoogleCloudFunctionsでHTTPフックなGoスクリプトを書く / Write HTTP hook Go script with GoogleCloudFunctions
convto
0
47
Goのパフォーマンス計測 / go performance measurement
convto
0
140
Other Decks in Programming
See All in Programming
tfcon2022_Web3Dひとめぐり.pdf
emadurandal
0
970
インフラエンジニアの多様性と評価、またはキャリアへのつなげ方 / Careers as infrastructure engineers
katsuhisa91
0
520
Airflow1=>Airflow2へのupgrade 事例紹介
reizist
0
110
機能横断型チームにおける技術改善
takeshiakutsu
3
470
Let's make a contract: the art of designing a Java API
mariofusco
0
160
A technique to implement DSL in Ruby
okuramasafumi
0
760
スモールチームがAmazon Cognitoでコスパよく作るサービス間連携認証
tacke_jp
2
370
TechFeed Conference 2022 - Kotlin Experimental
jmatsu
0
790
もしも、 上司に鬼退治を命じられたら~プロジェクト計画編~
higuuu
0
280
heyにおけるSREの大切さ~マルチプロダクト運用の「楽しさ」と「難しさ」および今後の展望~
fufuhu
3
1.7k
Go API クライアントの実装 〜Go Conference に載せれなかったTIPS〜
yyoshiki41
0
190
Licences open source : entre guerre de clochers et radicalité
pylapp
1
280
Featured
See All Featured
Atom: Resistance is Futile
akmur
255
20k
Building an army of robots
kneath
299
40k
4 Signs Your Business is Dying
shpigford
169
20k
Designing Experiences People Love
moore
130
22k
GitHub's CSS Performance
jonrohan
1020
410k
Web Components: a chance to create the future
zenorocha
303
40k
Streamline your AJAX requests with AmplifyJS and jQuery
dougneiner
125
8.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1M
Bash Introduction
62gerente
596
210k
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.6k
Stop Working from a Prison Cell
hatefulcrawdad
261
17k
The Straight Up "How To Draw Better" Workshop
denniskardys
225
120k
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 の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました