[レポート]Code シリーズを利用したパイプラインの自動化 #AWSSummit

このレポートはTech中級 「AWS のオペレーション最適化の勘所」です。スピーカーはアマゾンウェブサービスジャパン株式会社 ソリューションアーキテクトの伊藤 裕史氏です。
2018.06.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今日は2018/05/30より3日間に渡って東京で開催されている「AWS Summit Tokyo 2018」からセッションをレポートします。 このレポートはTech初級 「Code シリーズを利用したパイプラインの自動化」です。スピーカーはアマゾンウェブサービスジャパン株式会社 ソリューションアーキテクトの福井 厚氏です。

レポート

Agenda

  • なぜDevOpsなのか
  • AmazonのDevOpsストーリー
  • AWS Codeシリーズ
  • AWS Codeシリーズを使ったパイプラインの自動化

ソフトウェア開発は高速している

昔は年単位での開発を行っていた。 今はいかにユーザーの声をスピーディーに反映されることが求められている。

DevOpsのカルチャー

  • DevとOpsを一緒に。壁を作らない
  • 責任をチームで共有
  • オーナーシップをもつ
  • 見える化とコミュニケーション

DevOpsのプラクティス

マイクロサービス。モノリシックではないアーキテクチャ。 自動化されたデプロイメント。 Infrastructure as Code。 モニタリングとロギング。

AmazonのDevOpsストーリー

2001年時点では、モノリシックなアーキテクチャ。 メンテナンスと維持が難しい。ソースコードが複雑に絡み合いマージ1つでも一苦労していた。 ビルドやテストに時間がかかる。 デプロイがボトルネック。 スケールが難しい。

マイクロサービスアーキテクチャで解決した。 中身を知らなくても利用できるようにする。

2ピザルール

2マイのピザで間に合うようなチームの単位とする考え。 サービスチームと呼び、サービスを所有し構築する。

パイプライン

自動化されたアクションと遷移、チェックインから本番環境へ。 年間5000万回のデプロイが可能になった。

どこからはじめたらいいのか?

リソースとモニターのフェーズ

  • Source
  • Build
  • Test
  • Deploy
  • Monitor

AWS Codeシリーズ

  • Source: AWS CodeCommit
  • Build: AWS CodeBuild
  • Test: AWS CodeBuild + 3rd Party
  • Deploy: AWS CodeDeploy
  • Monitor: AWS X-Ray

全てを繋げるCodePiplineがある。 これらのサービスは全てマネージドサービス。

AWS CodeCommit

セキュアでスケーラブルなマネージドGitソース管理。 スタンダードなGitツールを利用可能。 Visual Studio、EclipceなどIDEから接続可能。 Amazon S3のストレージを利用可能。 レポジトリサイズの上限なし。 カスタマ特有のキーを利用した暗号化ができる。 無料枠の中でプライベートなリポジトリを利用できる。

利用イメージ

SSH、HTTPSで接続する。 AWSコンソールでは、Commit Visualizerなどを利用できる。 最近では、プルリクエストに対応した。 ブランチに対する権限設定もできるようになり、チーム開発がやりやすくなった。

AWS CodeBuild

完全なマネージドのビルドサービスでソースコードのコンパイル、実行、テスト、ソフトウェアパッケージの生成をサポート。 Dockerイメージを利用する。

利用イメージ

S3やGitなどをソースに、ビルドする。 処理内容はbuildspec.ymlに記載する。それぞれのフェーズごとにやりたいことをシェルに記載する。 Windowsビルドもサポートしました。

AWS CodeDeploy

利用イメージ

EC2にエージェントをインストールしておく。 エージェントがアーティファクトの変更を検知したら、配布する。

appsec.ymlに各フェーズごとにHookと処理内容を記載する。 デプロイの作業量を指定できる。一度にデプロイするのか、部分的にデプロイするのか。

AWS Lambdaへのデプロイもサポートする。 カナリア、リニアでのデプロイが可能。

Code Pipeline

継続的デリバリサービス。 GUIでパイプラインを定義できる。 Code CommitにPushされたら、CloudWatch Event経由でPipelineを実行できる。

ステージ(Source、Build、Deploy)などを定義し、ステージごとに処理を指定する。 トランジションで処理を一時停止できる。 マニュアル承認機能では、メールを飛ばして、管理者の承認を求めてPipelineを進められる。

Code Star

AWS上でのアプリケーションの素早い開発、ビルド、デプロイが可能。

demo

Code Starの新規作成画面。 PythonでLambdaを作成するデモ。 Code Commitを選択し、IDEとしてCloud9を選択する。 全ての環境構築をCloudFormationで行う。 Code CommitとCloud9が接続される。 API GatewayからLambdaを呼び出せる状態になる。

Cloud9はブラウザから利用できるIDE。軽量に動作する。 buildspec.ymlが自動作成されている。 API GatewayとLambdaはSAMに入っている。

Cloud9でユニットテストを実行。 テストにあったら、git addを実行。 CodePipelineが変更を検知し、CodeBuildでソースを取得、ユニットテストを実行し、デプロイフェーズにうつる。

CodeBuildのコンソールを見ると、ユニットテストの状態を確認できる。 いつでも誰がやっても同じフローを流せる。

デプロイフェーズでは、ExecuteChangeSetでLambdaを更新する。

EC2インスタンスのための継続的デリバリー

Cloud9>CodeCommit、Github>CodeBuild>CodeDeploy>EC2>X-ray, CloudWatch DNSを切り替えるBlueGreemデプロイ、Beanstalkを使ったデプロイをサポートする。

サーバレスアプリケーションの継続的デリバリー

Cloud9>CodeCommit>CodeBuild>Lambda>X-ray, CloudWatch

まとめ

  • DevOpsを実現するには、カルチャー、プラクティス、ツール
  • 継続的インテグレーション、継続的デリバリーは必須
  • Codeシリーズで、フルマネージドな環境でパイプラインの自動化を容易に実現できる