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

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

Isao Shimizu

October 31, 2018
Tweet

More Decks by Isao Shimizu

Other Decks in Technology

Transcript

  1. GitHub Flow
    で作る
    AWS
    インフラストラクチャ
    AWS Dev Day Tokyo 2018 Lightning Talk
    大会
    October 31, 2018
    Isao Shimizu

    View Slide

  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

    View Slide

  3. 300
    万人が使う No.1
    家族アルバムアプリ「みてね」
    https://mitene.us/
    特徴
    子供の写真や動画を共有、整理
    家族だけで安心して使えるアルバムアプリ
    フォトブック、DVD
    の販売
    2015
    年4
    月 サービス開始
    2017
    年7
    月 英語版提供開始
    2018
    年7
    月 ユーザー数 300
    万人突破
    3

    View Slide

  4. AWS
    のインフラ管理、どうやっていますか
    4

    View Slide

  5. AWS
    でのインフラ管理といえば
    AWS
    マネジメントコンソール
    ウェブベースの管理ツール
    AWS Console
    モバイルアプリもある
    AWS CloudFormation
    JSON/YAML
    ファイルの記述でAWS
    リソースの環境構築
    HashiCorp Terraform
    .tf
    ファイルの記述で様々なクラウドリソースの環境構築
    5

    View Slide

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

    View Slide

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

    View Slide

  8. Terraform
    を使う
    8

    View Slide

  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

    View Slide

  10. Terraform
    の課題
    10

    View Slide

  11. Terraform
    をどこで実行するか
    terraform
    コマンドをどこの環境で実行するのか
    複数の開発者が実行するのは怖い
    実行の競合による先祖返り
    手元のPC
    で実行する場合、強力なアクセスキーが必要
    EC2
    上で実行する場合、SSH
    の権限が悩ましい
    最近だとAWS Cloud9
    、AWS Systems Manager
    (セッションマネ
    ージャー)とかありかも?
    しかし手作業は面倒
    11

    View Slide

  12. workspace
    を使うか、ディレクトリを分けるか
    みてねでは1
    レポジトリでディレクトリを分ける運用
    workspace
    は後述するCI/CD
    環境に不向き
    複数のworkspace
    を切り替えて自動化させるのは複雑になりそう
    更新があったtf
    ファイルが存在するディレクトリをスクリプトで検知
    して、対象のディレクトリのみでTerraform
    を実行するように工夫
    git
    コマンドを駆使して実行対象のディレクトリを抽出して個別に
    実行
    12

    View Slide

  13. 自動化しよう
    13

    View Slide

  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

    View Slide

  15. CircleCI
    を使う
    .circleci/con g.yml
    を書く
    GitHub
    のWebhook
    で連携
    ググるとサンプルも多くて比較的簡単に設定できる
    Work ow
    や対象のBranch
    指定が柔軟にできる
    クレデンシャル情報の登録
    AWS
    の認証情報を設定する画面が用意されている
    設定後はキーの表示がマスクされるがCircleCI
    の権限(GitHub

    権限)の管理をちゃんとしておかないと不安
    コンテナ数に応じた月額課金(1
    個無料。2
    個~は$50/
    コンテナ)
    15

    View Slide

  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

    View Slide

  17. GitHub
    にTerraform
    実行結果の通知
    tfnotify
    https://github.com/mercari/tfnotify/
    GitHub
    のPull Request
    のコメントにterraform plan
    やterraform apply
    の結果を書いてくれるメルカリのOSS
    (超便利!

    CI/CD
    環境で実行
    いちいちログ画面を見に行かなくても良い
    17

    View Slide

  18. tfnotify
    が対応する環境はCircleCI
    or TravisCI
    のみでしたが...
    18

    View Slide

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

    View Slide

  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

    View Slide

  21. まとめ
    インフラの管理はできる限りコード化&自動化
    Terraform
    の実行環境はCI/CD
    環境がおすすめ
    GitHub Flow
    で運用する
    tfnotify
    を使ってplan/apply
    の結果をGitHub
    へ通知
    tfnotify
    はAWS CodeBuild
    にも対応しました
    AWS CodeBuild
    はIAM
    が使えて、実行時間課金なのがメリット
    21

    View Slide

  22. Join our team!!
    https://mitene.us/recruit
    22

    View Slide