Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する

convto
January 20, 2019

Athenaのパーテション設定をCloudWatch Events + Lambda で自動化する

convto

January 20, 2019
Tweet

More Decks by convto

Other Decks in Programming

Transcript

  1. もくじ - 自己紹介 - Athenaとは - なぜパーティション設定を自動化したいか - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  2. もくじ - 自己紹介 - Athenaとは - なぜパーティション設定を自動化したいか - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  3. もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  4. Athena とは - AWSのサービス - S3のデータをSQLで検索できる - サーバーレス - スキャン量課金

    BigQueryのAWS版みたいなもの LBのログとかにいい感じにSQL投げれる
  5. Athena とは - AWSのサービス - S3のデータをSQLで検索できる - サーバーレス - スキャン量課金

    BigQueryのAWS版みたいなもの LBのログとかにいい感じにSQL投げれる 便利
  6. もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  7. もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  8. なぜ Lambda + CloudWatch Event か - サーバー管理したくなかった - jenkinsその他ツールに依存したくない

    - 独立したできるだけ小さい構成にしたかった Athenaもサーバーレスだし サーバーレスにしたかった
  9. もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  10. apexとは - lambda関数の管理ができるサードパーティーツー ル - デプロイ、ドライラン、関連インフラの生成などが 可能 - インフラ構築は内部でterraformを利用している `apex

    infra` サブコマンドで インフラ管理できる。 実装はterraformをexecしてるだけ だからplanとかapplyとかできる https://github.com/apex/apex/blob/453c83 c5a12940de117e080c50a72dfa4f7a6b6a/ nfra/infra.go#L38-L45
  11. なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの

    管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い
  12. なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの

    管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い AWSリソース自身に 他のリソースについて言及されると 収集つかなくなる
  13. なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの

    管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い AWSリソース自身に 他のリソースについて言及されると 収集つかなくなる SAMはそれ単体で完結するのが強い apexはterraformからインフラを管理するか ら整合性を取りやすい
  14. なぜ AWS SAM じゃないのか - SAMはインフラ管理を CloudFormation で行う - インフラ管理はだいたいansibleやterraformなどの

    管理ツールでコード化されているはず - 管理が二重になるので CloudFormation と相性が 悪い AWSリソース自身に 他のリソースについて言及されると 収集つかなくなる SAMはそれ単体で完結するのは強い apexはterraformからインフラを管理するか ら整合性を取りやすい 今回はapexが向いていた (既存インフラ管理がterraformだったため)
  15. IAM role と lambda の場合 - 初手 `apex deploy` Lambda実行用の

    IAM role が未定義なのでエラー - `apex infra apply` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy`
  16. IAM role と lambda の場合 - 初手 `apex deploy` Lambda実行用の

    IAM role が未定義なのでエラー - `apex infra apply` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` 成功!
  17. IAM role と lambda の場合 - 初手 `apex deploy` Lambda実行用の

    IAM role が未定義なのでエラー - `apex infra apply` - AWSコンソールからIAM roleをコピー - apexの設定ファイルに移す - `apex deploy` 成功! こういうことです
  18. IAM role と CloudWatch Event と lambda の場合 - `apex

    infra apply` から始める lambdaがまだ存在しないのでCloudWatch Eventが 作れなくてエラー
  19. 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`
  20. 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` 成功
  21. 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` 成功 つら
  22. 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` だけでいい
  23. 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の嬉しい部分と 天秤にかけて、 採用するか決めると良さそう
  24. もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  25. 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
  26. もくじ - 自己紹介 - Athenaとは - Athenaのパーティションとは - なぜ Lambda

    + CloudWatch Event か - apexでの構築 - はまったところ - まとめ
  27. まとめ - apex, dry-runとか環境分けたりとかlocal実行とかで きて便利 - インフラ構成も考慮に入れると手順がだるい - Lambdaのサイズ間によっては直接terraformで書 いた方が楽かも

    - Athenaを叩く実行ロールはS3周りがだるいので覚 えておくと楽 - 初歩的ですがYYYY/MM/DDには気をつけてくださ い みなさんもよきLambdaライフを!