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

    JSON/YAML ファイルの記述でAWS リソースの環境構築 HashiCorp Terraform .tf ファイルの記述で様々なクラウドリソースの環境構築 5
  4. 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
  5. workspace を使うか、ディレクトリを分けるか みてねでは1 レポジトリでディレクトリを分ける運用 workspace は後述するCI/CD 環境に不向き 複数のworkspace を切り替えて自動化させるのは複雑になりそう 更新があったtf

    ファイルが存在するディレクトリをスクリプトで検知 して、対象のディレクトリのみでTerraform を実行するように工夫 git コマンドを駆使して実行対象のディレクトリを抽出して個別に 実行 12
  6. 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
  7. CircleCI を使う .circleci/con g.yml を書く GitHub のWebhook で連携 ググるとサンプルも多くて比較的簡単に設定できる Work

    ow や対象のBranch 指定が柔軟にできる クレデンシャル情報の登録 AWS の認証情報を設定する画面が用意されている 設定後はキーの表示がマスクされるがCircleCI の権限(GitHub の 権限)の管理をちゃんとしておかないと不安 コンテナ数に応じた月額課金(1 個無料。2 個~は$50/ コンテナ) 15
  8. 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
  9. GitHub にTerraform 実行結果の通知 tfnotify https://github.com/mercari/tfnotify/ GitHub のPull Request のコメントにterraform plan

    やterraform apply の結果を書いてくれるメルカリのOSS (超便利! ) CI/CD 環境で実行 いちいちログ画面を見に行かなくても良い 17
  10. 【補足】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
  11. まとめ インフラの管理はできる限りコード化&自動化 Terraform の実行環境はCI/CD 環境がおすすめ GitHub Flow で運用する tfnotify を使ってplan/apply

    の結果をGitHub へ通知 tfnotify はAWS CodeBuild にも対応しました AWS CodeBuild はIAM が使えて、実行時間課金なのがメリット 21