GitHub Flowで作るAWSインフラストラクチャ/Make AWS infrastructure with GitHub Flow

GitHub Flowで作るAWSインフラストラクチャ/Make AWS infrastructure with GitHub Flow

AWS Dev Day Tokyo 2018 Lightning Talk大会
October 31, 2018

46839cf590a549efe13547c17a6b2fde?s=128

Isao Shimizu

October 31, 2018
Tweet

Transcript

  1. GitHub Flow で作る AWS インフラストラクチャ AWS Dev Day Tokyo 2018

    Lightning Talk 大会 October 31, 2018 Isao Shimizu
  2. About me 清水 勲 @isaoshimizu 株式会社ミクシィ ヴァンテージスタジオ みてね事業部 開発グループ 2011

    年8 月 中途入社、SNS mixi アプリ運用チーム 2014 年4 月 モンスターストライク サーバーエンジニア、SRE 2018 年2 月 家族アルバム「みてね」 SRE AWS Summit Tokyo, TechLION, hbstudy, Internet Week, Think Japan IBM Code Day などの登壇 Qiita, Medium, Software Design 記事執筆 記事: 大規模インフラのSRE から社内スタートアップへの挑戦。ベテランエンジニアのキャリアの作り方 2
  3. 300 万人が使う No.1 家族アルバムアプリ「みてね」 https://mitene.us/ 特徴 子供の写真や動画を共有、整理 家族だけで安心して使えるアルバムアプリ フォトブック、DVD の販売

    2015 年4 月 サービス開始 2017 年7 月 英語版提供開始 2018 年7 月 ユーザー数 300 万人突破 3
  4. AWS のインフラ管理、どうやっていますか 4

  5. AWS でのインフラ管理といえば AWS マネジメントコンソール ウェブベースの管理ツール AWS Console モバイルアプリもある AWS CloudFormation

    JSON/YAML ファイルの記述でAWS リソースの環境構築 HashiCorp Terraform .tf ファイルの記述で様々なクラウドリソースの環境構築 5
  6. マネジメントコンソールだけ使っていると起きること どんな手順で構成したかは操作した人しかわからない Wiki やドキュメントツールなどを使って手順書を書く スクリーンショットなどが無いと伝わりづらい内容もある 手順の確認、レビューがしづらい Slack にスクリーンショットを貼って「これ実行します!」 同じ手順の繰り返し 多くの手間

    6
  7. プログラマならコードで管理したい 7

  8. Terraform を使う 8

  9. Terraform を使う理由 AWS 以外の管理もできる たとえば、Google Cloud 、New Relic 、GitHub の管理

    90 以上のサービスに対応 https://www.terraform.io/docs/providers/ https://github.com/hashicorp/terraform スター数 14,000 超え 毎日のようにコミットがされ開発が活発 "AWS だけ" ならCloudFormation を使うのはアリ AWS SAM(Serverless Application Model) を使うならなおさら 9
  10. Terraform の課題 10

  11. Terraform をどこで実行するか terraform コマンドをどこの環境で実行するのか 複数の開発者が実行するのは怖い 実行の競合による先祖返り 手元のPC で実行する場合、強力なアクセスキーが必要 EC2 上で実行する場合、SSH

    の権限が悩ましい 最近だとAWS Cloud9 、AWS Systems Manager (セッションマネ ージャー)とかありかも? しかし手作業は面倒 11
  12. workspace を使うか、ディレクトリを分けるか みてねでは1 レポジトリでディレクトリを分ける運用 workspace は後述するCI/CD 環境に不向き 複数のworkspace を切り替えて自動化させるのは複雑になりそう 更新があったtf

    ファイルが存在するディレクトリをスクリプトで検知 して、対象のディレクトリのみでTerraform を実行するように工夫 git コマンドを駆使して実行対象のディレクトリを抽出して個別に 実行 12
  13. 自動化しよう 13

  14. CI/CD 環境をTerraform の実行環境とする GitHub と連携させて自動化する(GitHub Flow ) tf ファイルを書く Pull

    Request を作る/commit をpush で terraform plan 実行 レビュー、Approve Pull Request マージで terraform apply 実行 GitHub レポジトリの設定 ✓ Require pull request reviews before merging ✓ Require status checks to pass before merging ✓ Require branches to be up to date before merging 14
  15. CircleCI を使う .circleci/con g.yml を書く GitHub のWebhook で連携 ググるとサンプルも多くて比較的簡単に設定できる Work

    ow や対象のBranch 指定が柔軟にできる クレデンシャル情報の登録 AWS の認証情報を設定する画面が用意されている 設定後はキーの表示がマスクされるがCircleCI の権限(GitHub の 権限)の管理をちゃんとしておかないと不安 コンテナ数に応じた月額課金(1 個無料。2 個~は$50/ コンテナ) 15
  16. AWS CodeBuild を使う buildspec.yml を書く( version: 0.2 で書こう) GitHub のWebhook

    で連携 ビルドプロジェクトにIAM ロールが使えるのが良い 実行環境で使える環境変数があるが、ドキュメントにすべてが書か れていないので env コマンドなどで確認すると良い 例: CODEBUILD_AGENT_ENV_CODEBUILD_BUILD_URL (ビルド プロジェクトのURL ) 分課金(Linux でのビルド、1 分あたり$0.005 から)。無料枠も。 3 つのインスタンスタイプ(small 、medium 、large ) 16
  17. GitHub にTerraform 実行結果の通知 tfnotify https://github.com/mercari/tfnotify/ GitHub のPull Request のコメントにterraform plan

    やterraform apply の結果を書いてくれるメルカリのOSS (超便利! ) CI/CD 環境で実行 いちいちログ画面を見に行かなくても良い 17
  18. tfnotify が対応する環境はCircleCI or TravisCI のみでしたが... 18

  19. 昨日、AWS CodeBuild にも対応しました! 1 週間前にCodeBuild 対応のPull Request を出したところ、昨日マージ されました!(レビューありがとうございます!) https://github.com/mercari/tfnotify/pull/23

    19
  20. 【補足】Terraform をAWS CodeBuild で使う際のポイント git clone の深さをFull にして過去のcommit を参照する ブランチフィルタにmaster

    を設定して、master に向けたPull Request のみ実行する Pull Request が作られてマージされるまでは CODEBUILD_SOURCE_VERSION にpr/ 番号という形式の値が入ってくる。これを見てterraform plan を 実行する Pull Request のマージでCODEBUILD_SOURCE_VERSION はマージコミットの ハッシュ値が入ってくる。これを見てterraform apply を実行する tfnotify にPR の番号を渡せるように、マージ時にgit log コマンドで Merge pull request #100 from ブランチ名といったコミット文言からPR 番 号を抜き出して、CODEBUILD_SOURCE_VERSION にセットする 20
  21. まとめ インフラの管理はできる限りコード化&自動化 Terraform の実行環境はCI/CD 環境がおすすめ GitHub Flow で運用する tfnotify を使ってplan/apply

    の結果をGitHub へ通知 tfnotify はAWS CodeBuild にも対応しました AWS CodeBuild はIAM が使えて、実行時間課金なのがメリット 21
  22. Join our team!! https://mitene.us/recruit 22