[レポート]Code シリーズを利用したパイプラインの自動化 #AWSSummit
今日は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シリーズで、フルマネージドな環境でパイプラインの自動化を容易に実現できる