• AWS

【AWS re:Invent 2017レポート】: Continuous Integration Best Practices for Software Development Teams (DEV322)

  • こんにちわ。ゆめみでサーバーサイドエンジニアをやっている木村です。
  • re:Invent 2017に参加してきましたので、開催されたsessionの紹介をします。
  • 今回参加したsessionは Continuous Integration Best Practices for Software Development Teams 日本語で訳すと『ソフトウェア開発チームにおける継続的インテグレーションのベストプラクティス』です。
  • 最近teamでは CircleCI などのCIツールの導入やDockerの本番導入などを行っていて、興味深いテーマだったので参加してきました。

Speaker

  • Clare Liguori
  • AWSのCode Services (CodeCommit/CodePipeline/CodeBuild/CodeDeploy)のCodeCommit, CodeBuildの開発を行っている方です。
  • Werner VogelsのCloud9 sessionでも登壇。

継続的インテグレーションとは

  • 継続的インテグレーションは、開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行するDevOps(ソフトウェア開発の手法)
  • DevOpsやアジャイルの基本で、最近導入している組織も増えている。

AWSが提供するCIサービス

  • AWSではCode Service(CodeCommit/CodePipeline/CodeBuild/CodeDeploy)と呼ばれるソフトウェア開発・運用に必要なマネージメントサービスを提供しています。
  • CodeCommit
    • コード管理サービス
  • CodePipeline
    • PipeLineツール
  • CodeBuild
    • ビルド環境やテスト実行環境を提供してくれるツール、実行環境にdocker imageを利用出来る
  • CodeDeploy
    • デプロイツール

session

  • sessionの内容は下記のslideのように実際の開発チームの日常的なチャットツールの会話から、どうCIを導入することで改善が測られていくのか、どういうケースに効果があるのかというような説明を交えたシナリオ的なプレゼンでした。

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

CIの説明

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

簡単な計算を行うsample application

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

CIの流れ

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

  • Source Code(コードの管理)
    • CodeCommitやGitHubを利用出来る。
  • Glue(各サービスをつなげる)
    • CloudWatch Events
    • Lambda
  • Build & Test(ビルドやテスト実行)
    • CodeBuild

CodeBuildでのテスト実行の流れ

実行環境

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

  • サンプルアプリケーションがnodeなので実行環境として、dockerのnodeのimageを選択している

buildspec.yml

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

  • CodeBuildは実行する内容をymlファイルで定義する

ビルド(テスト)の実行履歴管理

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

sessionで紹介していたCIの方法

Nighty check(日時処理、導入が楽)

導入例

  • 毎日npmの内容を夜中に自動で最新化する
    • CloudWatch Event ScheduleでEvent Triggerを発行
    • Lambdaを実行し、CodeBuildでnpmの内容をupdate、同時にtestも行う
    • 最新化されたnpmの内容をCodeCommitにpushする

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

  • プラスアルファ
    • ビルドが終わったらビルド結果のメールを送る
    • buildが終わったことをCloudWatch EventとLambdaに送る
    • LambdaからSESを呼び出し、ビルド結果をメールで送る

DEV322_Continuous Integration Best Practices for Software Development Teams from Amazon Web Services

  • この他にも Branch CheckPull Request Checks の導入事例。
  • ビルド結果をslackに通知するChatOps的な利用方法

感想

  • 以前CodeBuildを少し利用してみましたが、いつの間にか連携出来るサービスやアップデートが増えていて、かなり使えるようになってきたと思います。Jenkinsなどを自分で立てるのと比べてAWSが管理してくれるマネージドサービスで管理コストを減らせる、CodeBuild自体がAWSの中のサービスなので他のRDSやEMRなどの実際のAWSサービスとの連携を行うことが容易なことは他のCIサービスには大きな利点。CI環境もAWSで統一するのも管理のしやすさから非常にメリットがあるので機会があれば、今後試してみたいなと思いました。

さいごに

  • re:Inventのsessionは動画やslideが公開されているので、詳細な内容は動画やslideを是非確認してみてください!

session

slide

youtube

Pagetop