3.9K Views
July 29, 20
スライド概要
Cloud Operator Days Tokyo 2020(A-1-6) の発表内容です
経済ニュースアプリのSREの仕事をしています。
ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~ 安藤 裕紀 NRIデジタル株式会社 2020年7月29日
自己紹介:インフラエンジニア10年目、運用経験は結構あります ◼安藤 裕紀(あんどう ゆうき) ⚫ NRIデジタル プラットフォームアーキテクト (2011年 野村総合研究所入社、2017年よりNRIデジタル出向) ⚫ Webシステムのサーバ構築・運用を中心としたインフラエンジニアの仕事を 流通・金融・製造など様々な業種のお客様向けに経験。 ⚫ 最近は、AWS上に構築されたECサイトやオンライン会員サービスの 開発・運用におけるSRE / DevOpsエンジニア寄りの仕事にシフト – AWSアーキテクチャ設計 – Infrastructure as Codeによる自動化 – モニタリング・オンコールアラートの改善 – CI/CDパイプラインの整備(本日お話しする内容) Copyright (C) NRI digital, Ltd. All rights reserved. 2020 APN AWS Top Engineers選出 1
NRIデジタルについて 多様なプロフェッショナルが集結 2016年8月に設立された 野村総合研究所の戦略子会社 NRIグループ内外から組織の壁を超えて 集結した多様なプロフェッショナルが ”ワンチーム”で、お客様と共に デジタルによるビジネスモデル変革を推進 Copyright (C) NRI digital, Ltd. All rights reserved. 新たなテクノロジー領域への挑戦 価値共創型のビジネス創出 2
本日お話しすることの背景 Copyright (C) NRI digital, Ltd. All rights reserved. 3
多くの企業が、ビジネス環境の激しい変化に対応するため、データと デジタル技術を活用したビジネスモデルの変革(DX)に取り組んでいる オンライン会員サービス 顧客接点のDX デジタルマーケティング 対面接客 ECサイト・ショッピングアプリ 販売手段のDX 店頭販売 Copyright (C) NRI digital, Ltd. All rights reserved. 定額制 サブスクリプションサービス 4
NRIデジタルはお客様のビジネスモデル変革の全てのフェーズに関わり、 さまざまな専門性を持つプロフェッショナルが協力してDXを支援している ビジネスデザイナー (専門性の例) • ビジネスコンサルタント • システムコンサルタント • サービスデザイナー • UI/UXデザイナー 事業 構想・ 運営 企画 可視化・ フィードバック お客様 デザイン・設計 データ収集・分析 プラットフォームアーキテクト (専門性の例) • アーキテクト • インフラエンジニア • データサイエンティスト • データエンジニア Copyright (C) NRI digital, Ltd. All rights reserved. 開発 モニタリング テスト リリース アプリケーションデベロッパー (専門性の例) • プロジェクトマネージャー • システムエンジニア • スクラムマスター • スクラムデベロッパー 5
お客様のDXを支援する事業会社にいると、よく言われること お客様 ビジネスデザイナー アプリケーション デベロッパー 早く新しいビジネスを成功させたい 早く効果を見て次の手を打ちたい もっと早く楽にアプリをリリースしたい Copyright (C) NRI digital, Ltd. All rights reserved. 6
お客様のDXを支援する事業会社にいると、よく言われること お客様 ビジネスデザイナー アプリケーション デベロッパー 早く新しいビジネスを成功させたい 早く効果を見て次の手を打ちたい もっと早く楽にアプリをリリースしたい Copyright (C) NRI digital, Ltd. All rights reserved. 7
本日は、アプリケーションの開発・テスト・リリースのフェーズに CI/CDを導入して、リリース運用を改善した事例と気づきをご紹介します ビジネスデザイナー (専門性の例) • ビジネスコンサルタント • システムコンサルタント • サービスデザイナー • UI/UXデザイナー 事業 構想・ 運営 企画 可視化・ フィードバック お客様 デザイン・設計 CI/CD導入による • リリースの短期化 • 運用の軽負荷化 データ収集・分析 プラットフォームアーキテクト (専門性の例) • アーキテクト • インフラエンジニア • データサイエンティスト • データエンジニア Copyright (C) NRI digital, Ltd. All rights reserved. 開発 モニタリング テスト リリース アプリケーションデベロッパー (専門性の例) • プロジェクトマネージャー • システムエンジニア • スクラムマスター • スクラムデベロッパー 8
目次 前置き(自己紹介/会社紹介/本日お話しすることの背景) 課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD CI/CDによる 運用改善事例 事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ まとめ Copyright (C) NRI digital, Ltd. All rights reserved. 9
目次 前置き(自己紹介/会社紹介/本日お話しすることの背景) 課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD CI/CDによる 運用改善事例 事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ まとめ Copyright (C) NRI digital, Ltd. All rights reserved. 10
(オンプレミスからAWSに移行した) モノリシックなアプリケーション Copyright (C) NRI digital, Ltd. All rights reserved. 11
課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 ECサイトにはさまざまな機能があり、 ◼ECサイトでありそうなWebページ遷移の構成 ECサイト 検索結果 トップページ カテゴリ・ 商品一覧 商品詳細 カート ログイン 会員登録 マイページ 会員情報 修正 Users Copyright (C) NRI digital, Ltd. All rights reserved. 注文 決済 12
課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 ECサイトにはさまざまな機能があり、用途によって開発を分担している ◼ECサイトでありそうなWebページ遷移の構成 ECサイト アプリケーションデベロッパー (商品系担当) アプリケーションデベロッパー (注文系担当) 検索結果 トップページ Users カテゴリ・ 商品系 商品詳細 商品一覧 カート 注文系 注文 決済 アプリケーションデベロッパー (会員系担当) ログイン Copyright (C) NRI digital, Ltd. All rights reserved. 会員登録 会員系 マイページ 会員情報 修正 13
課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 モノリシックなJava EE構成では、単一のアプリケーションとしてデプロイ アプリケーションデベロッパー (商品系担当) アプリケーションサーバ 開発・ビルド・テスト application.ear 商品系.war 商品系.war 注文系.war アプリケーションデベロッパー (注文系担当) 会員系.war 開発・ビルド・テスト 注文系.war earにパッケージング・ AMI作成用のEC2 インスタンスにデプロイ Java EE アプリケーションサーバ OpenJDK RHEL アプリケーションデベロッパー (会員系担当) AMI化 開発・ビルド・テスト 起動設定更新 会員系.war AMI Copyright (C) NRI digital, Ltd. All rights reserved. Auto Scaling 14
課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 モノリシックなJava EE構成では、単一のアプリケーションとしてデプロイ 問題点: ◼ EC2のAuto Scaling を利用しているため、都 度AMIの再作成が必要で、Java EEアプリケー ションの部分的なホットデプロイが不可能 ◼ EJBを多用するフレームワークではアプリケーショ ンサーバの再起動に時間がかかり、デプロイの確 認が長時間化。ロールバックにも時間がかかる →定期リリース運用にならざるを得ない アプリケーションデベロッパー (商品系担当) アプリケーションサーバ 開発・ビルド・テスト application.ear 商品系.war 商品系.war 注文系.war アプリケーションデベロッパー (注文系担当) 会員系.war 開発・ビルド・テスト 注文系.war earにパッケージング・ AMI作成用のEC2 インスタンスにデプロイ Java EE アプリケーションサーバ OpenJDK RHEL アプリケーションデベロッパー (会員系担当) AMI化 開発・ビルド・テスト 起動設定更新 会員系.war AMI Copyright (C) NRI digital, Ltd. All rights reserved. Auto Scaling 15
レガシーで高負荷なリリース運用 Copyright (C) NRI digital, Ltd. All rights reserved. 16
課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 Subversionを利用しており、ライブラリアンとJenkinsがビルド・デプロイ アプリケーションデベロッパー (商品系担当) 開発ブランチ (商品系) アプリケーションデベロッパー (注文系担当) 開発ブランチ (注文系) アプリケーションデベロッパー (会員系担当) ライブラリアン (構成管理担当) 手動マージ作業 trunkとの差分を確認 し、リリース準備用ブラ ンチにマージのためのコ ミットを追加 ライブラリアン Copyright (C) NRI digital, Ltd. All rights reserved. ステージング環境 Jenkins(CIサーバ) リリース準備 用ブランチ 開発ブランチ (商品系) 開発ブランチ (注文系) 開発ブランチ (会員系) 手動デプロイ trunk (master) 本番環境 開発ブランチ (会員系) テスト環境 ビルド パッケージ ビルド デプロイ 開発環境A ビルド デプロイ 開発環境B ビルド デプロイ 開発環境C 17
課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 Subversionを利用しており、ライブラリアンとJenkinsがビルド・デプロイ 問題点: ◼ Subversionを利用しているため、並行開発のマージ には手動で差分のコミットを作成する必要があり、 ライブラリアンの作業負荷が非常に高い ◼ Jenkinsによる部分的なCI/CDは導入されていたが、 緻密な権限管理や認証情報の一元管理も難しく、 ネットワークが分断されているため自動化は限定的 アプリケーションデベロッパー (商品系担当) 開発ブランチ (商品系) アプリケーションデベロッパー (注文系担当) 開発ブランチ (注文系) アプリケーションデベロッパー (会員系担当) ライブラリアン (構成管理担当) 手動マージ作業 trunkとの差分を確認 し、リリース準備用ブラ ンチにマージのためのコ ミットを追加 ライブラリアン 手動デプロイ trunk (master) リリース準備 用ブランチ 開発ブランチ (商品系) 開発ブランチ (会員系) テスト環境 ビルド パッケージ ビルド デプロイ 開発環境A ビルド デプロイ 開発環境B →定期リリースにも多くの工数がかかる Copyright (C) NRI digital, Ltd. All rights reserved. ステージング環境 Jenkins(CIサーバ) 開発ブランチ (注文系) 開発ブランチ (会員系) 本番環境 ビルド デプロイ 開発環境C 18
アプリケーション デベロッパー もっと早く楽にアプリをリリースしたい • 定期リリース運用にならざるを得ない • 定期リリースにも多くの工数がかかる \この2つの課題をなんとかしたい/ Copyright (C) NRI digital, Ltd. All rights reserved. 19
DevOpsとCI/CD Copyright (C) NRI digital, Ltd. All rights reserved. 20
DevとOpsが協力することで1日10回以上のデプロイが可能になる ◼「Velocity 2009 – O’Reilly Conferences」でFlickr社のエンジニアによって発表された DevOpsの象徴的なプレゼンテーション※ 「10+ Deploys per Day: Dev and Ops Cooperation at Flickr 」(2009年) https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/ ※ ジーン・キム、ジェズ・ハンブル、パトリック・ボア、ジョン・ウィリス「The DevOps ハンドブック 理論・原則・実践のすべて」のイントロダクションより Copyright (C) NRI digital, Ltd. All rights reserved. 21
DevOpsを効果的に実践しているチームのリードタイムは1/100以下 ◼第三者機関&Google Coudの調査レポート「ACCELERATE State of DevOps 2019」 https://services.google.com/fh/files/misc/state-of-devops-2019.pdf Copyright (C) NRI digital, Ltd. All rights reserved. 22
1日10回以上、100倍のスピードでデプロイしたい が、DevOpsは文化、コラボレーション、アーキテク チャ、プラクティスなど非常に多岐にわたる概念 一度にすべてに取り組むのは難しい Copyright (C) NRI digital, Ltd. All rights reserved. 23
DevOpsのプラクティスの中でも、CI/CDが特に課題にマッチしていた ◼CI/CDはビルド、テスト、デプロイを自動化し、開発プロセス・サイクルを効率化・高速化すること ◼DevOpsが文化的規範や、アーキテクチャ、プラクティスなど幅広くカバーしているのに対して、 そのプラクティスの一つであるCI/CDはアプリケーションを高頻度で提供するための手法に特化 CI/CDがない場合 ビルド テスト ツールによる自動化で 開発プロセスを効率化 CI/CDパイプライン CI/CDがある場合 ビルド テスト デプロイ デプロイ 作業時間・待ち時間をなくし 開発サイクルを高速化 Copyright (C) NRI digital, Ltd. All rights reserved. 24
DevOpsのプラクティスの中でも、CI/CDが特に課題にマッチしていた ◼CI/CDはビルド、テスト、デプロイを自動化し、開発プロセス・サイクルを効率化・高速化すること ◼DevOpsが文化的規範や、アーキテクチャ、プラクティスなど幅広くカバーしているのに対して、 そのプラクティスの一つであるCI/CDはアプリケーションを高頻度で提供するための手法に特化 新規のプロジェクトにCI/CDを導入し、 スモールスタートで知見の獲得に取り組んだ CI/CDがない場合 ビルド テスト ツールによる自動化で 開発プロセスを効率化 CI/CDパイプライン CI/CDがある場合 ビルド テスト デプロイ デプロイ 作業時間・待ち時間をなくし 開発サイクルを高速化 Copyright (C) NRI digital, Ltd. All rights reserved. 25
CI/CDツールはVCSとしてGitリポジトリの利用が前提。コードの変更が 行われるGitの操作をトリガーに、ビルド・テスト・デプロイを自動化する プロダクト選定の例: ローカル開発環境 VCS CI/CDパイプライン 複数のプロダクトの中か これらのツールを選定し ら選定する必要がある 決定する必要がある リポジトリ ソースコードの登録 (git push) ✓ ソースコード管理 feature/XXブランチ 開発者PC ブラウザ操作 (git merge) hotfix/XXブランチ developブランチ release/XXブランチ masterブランチ Copyright (C) NRI digital, Ltd. All rights reserved. サービス実行環境 CI/CDツール ✓一連のワークフローを制御しジョブを自動実行する ✓Gitリポジトリの特定ブランチへの登録(Push)でトリガー 静的 解析 ビルド テスト デプロイ 開発環境 静的 解析 ビルド テスト デプロイ テスト環境 静的 解析 ビルド テスト デプロイ ステージング環境 静的 解析 ビルド テスト リリース 準備 本番環境 26
CI/CDツールはVCSとしてGitリポジトリの利用が前提。コードの変更が 行われるGitの操作をトリガーに、ビルド・テスト・デプロイを自動化する プロダクト選定の例: Gitリポジトリ × CI/CDツールの 選定によって運用時の使い勝手が 大きく変わってくることがわかった ローカル開発環境 VCS CI/CDパイプライン 複数のプロダクトから これらのツールを選定し 選定する必要がある 決定する必要がある リポジトリ ソースコードの登録 (git push) ✓ ソースコード管理 feature/XXブランチ 開発者PC ブラウザ操作 (git merge) hotfix/XXブランチ developブランチ release/XXブランチ masterブランチ Copyright (C) NRI digital, Ltd. All rights reserved. サービス実行環境 CI/CDツール ✓ 一連のワークフローを制御しジョブを自動実行する ✓ Gitリポジトリの特定ブランチへの登録(Push)でトリガー 静的 解析 ビルド テスト デプロイ 開発環境 静的 解析 ビルド テスト デプロイ テスト環境 静的 解析 ビルド テスト デプロイ ステージング環境 静的 解析 ビルド テスト リリース 準備 本番環境 27
目次 前置き(自己紹介/会社紹介/本日お話しすることの背景) 課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD CI/CDによる 運用改善事例 事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ まとめ Copyright (C) NRI digital, Ltd. All rights reserved. 28
CI/CDによる運用改善事例 サマリ:システム特性や開発サイクル・開発体制によって適正は異なる ◼各事例で採用したプロダクト・ツール 項目 事例①:IoT向けAPIサービス 事例②:会員ID管理APIサービス 事例③:店舗向けAPIサービス アーキテクチャ サーバーレス コンテナ サーバーレス Gitリポジトリ GitLab AWS CodeCommit BitBucket CI/CDツール GitLab CI/CD GitLab Runner AWS CodePipeline AWS CodeBuid AWS CodeDeploy AWS CodePipeline AWS CodeBuid デプロイ戦略 Immutable (AWS CDK) Blue/Green (CodeDeploy) Immutable (AWS CDK) 開発サイクル 2週間~1ヶ月 数ヶ月 1~2週間 開発体制 10名前後 4~5名 3~4名 - All at once Rolling Immutable Blue/Green (サービスローンチ後) Copyright (C) NRI digital, Ltd. All rights reserved. 29
目次 前置き(自己紹介/会社紹介/本日お話しすることの背景) 課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD CI/CDによる 運用改善事例 事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ まとめ Copyright (C) NRI digital, Ltd. All rights reserved. 30
事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD 開発者のGit操作・UIと親和性が高いGitLab CI/CD ◼開発者がGitLabの操作だけでビルド・デプロイができるようになった 開発環境 リポジトリ ビルド デプロイ サービス実行環境 Gitリポジトリ・CI/CD実行サーバ アプリケーション デベロッパー アプリケーションの 登録(git push) 開発PC デプロイ アプリケーション ビルド テスト .gitlab-ci.yml E2E cdk deploy S3 curl API Gateway Lambda DynamoDB Ubuntu プラットフォーム アーキテクト Gitリポジトリと同じWeb画面上でCI/CDの進捗と結果を確認 開発PC CI/CD定義の 事前準備(git push) Copyright (C) NRI digital, Ltd. All rights reserved. 31
事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD 開発者のGit操作・UIと親和性が高いGitLab CI/CD 良かった点: ◼ アプリケーション開発者がコードの変更(=Git操作)の みを行い、他のツールの使い方を覚える必要がない Gitリポジトリ・CI/CD実行サーバ ため、GitやCI/CDに不慣れでも開発に注力できた。 ◼ ビルド・デプロイがJenkinsだった時代と比べて、 CI/CDパイプラインの定義が宣言的なYAMLになり、 アプリケーションのソースコードと一緒にバージョン管理 できるため、ブラックボックス化しづらくなった。 ◼開発者がGitLabの操作だけでビルド・デプロイができるようになった 開発環境 アプリケーション デベロッパー アプリケーションの 登録(git push) 開発PC リポジトリ ビルド デプロイ サービス実行環境 デプロイ アプリケーション ビルド テスト .gitlab-ci.yml E2E cdk deploy S3 curl API Gateway Lambda DynamoDB Ubuntu プラットフォーム アーキテクト Gitリポジトリと同じWeb画面上でCI/CDの進捗と結果を確認 開発PC CI/CD定義の 事前準備(git push) Copyright (C) NRI digital, Ltd. All rights reserved. 32
事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD 開発者のGit操作・UIと親和性が高いGitLab CI/CD 不満だった点: ◼開発者がGitLabの操作だけでビルド・デプロイができるようになった 開発環境 リポジトリ ビルド デプロイ サービス実行環境 ◼ せっかくサービス実行環境がサーバーレスなのに Gitリポジトリ・CI/CD実行サーバ バックアップ等GitLabサーバの管理が必要。 ◼ 1台のサーバにRunner(Docker Executor)も相乗り していたため、複数人で同時に利用すると CI/CDパイプラインのジョブが滞留することがあった。 アプリケーション デベロッパー アプリケーションの 登録(git push) 開発PC デプロイ アプリケーション ビルド テスト .gitlab-ci.yml E2E cdk deploy S3 curl API Gateway Lambda DynamoDB Ubuntu プラットフォーム アーキテクト Gitリポジトリと同じWeb画面上でCI/CDの進捗と結果を確認 開発PC CI/CD定義の 事前準備(git push) Copyright (C) NRI digital, Ltd. All rights reserved. 33
目次 前置き(自己紹介/会社紹介/本日お話しすることの背景) 課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD CI/CDによる 運用改善事例 事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ まとめ Copyright (C) NRI digital, Ltd. All rights reserved. 34
事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ Blue/Greenデプロイによるリリースの信頼性向上を重視 ◼サービスイン前の本番確認と、問題があった場合に即座に切り戻しができるようになった 開発環境 リポジトリ ビルド デプロイ サービス実行環境 CodePipeline アプリケーション デベロッパー アプリケーションの 登録(git push) 開発PC CodeCommit CodeBuild CodeDeploy アプリケーション、 Dockerfile docker build デプロイ buildspec.yml docker push 新バージョンの 本番確認 appspec.yml プラットフォーム アーキテクト CI/CD定義の 事前準備(git push) 開発PC ベースコンテナイメージの 事前登録 (docker push) Copyright (C) NRI digital, Ltd. All rights reserved. Elastic Container Elastic ContainerRegistry(ECR) Registry ベースイメージ デプロイ用イメージ 本番トラフィック 切り替え ロールバック 判断待機 Elastic ContainerService Elastic Load Balancer Blue 旧バージョン Green 新バージョン 旧バージョン 終了 35
事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ Blue/Greenデプロイによるリリースの信頼性向上を重視 良かった点: ◼ CodeDeployのBlue/Greenデプロイのワークフロー がとても良く運用が考えられていて、かつロールバック が高速だったため、デプロイの信頼性が向上した。 信頼性が重要なシステムなのでメリット大 ◼ CodeBuildはDockerコンテナのビルド環境がオンデ マンドに提供されるため、開発のピークでもGitLab時 代のジョブの滞留やスローダウンが発生しなくなった ◼サービスイン前の本番確認と、問題があった場合に即座に切り戻しができるようになった 開発環境 リポジトリ ビルド デプロイ サービス実行環境 CodePipeline アプリケーション デベロッパー アプリケーションの 登録(git push) 開発PC CodeCommit CodeBuild CodeDeploy アプリケーション、 Dockerfile docker build デプロイ buildspec.yml docker push 新バージョンの 本番確認 appspec.yml プラットフォーム アーキテクト CI/CD定義の 事前準備(git push) 開発PC ベースコンテナイメージの 事前登録 (docker push) Copyright (C) NRI digital, Ltd. All rights reserved. Elastic Container Elastic ContainerRegistry(ECR) Registry ベースイメージ デプロイ用イメージ 本番トラフィック 切り替え ロールバック 判断待機 Elastic ContainerService Elastic Load Balancer Blue 旧バージョン Green 新バージョン 旧バージョン 終了 36
事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ Blue/Greenデプロイによるリリースの信頼性向上を重視 不満だった点: ◼◼サービスイン前の本番確認と、問題があった場合に即座に切り戻しができるようになった CodeCommitはGitによるコラボレーション機能が かなり使いづらく操作性がイマイチ(2019年夏当時) 開発環境 リポジトリ ビルド デプロイ サービス実行環境 ⚫ プルリクエストの通知が読みづらい(SNS→メールがJSON) ⚫ AWSコンソールのログインセッションが長続きしないので、 プルリクレビューのたびにMFAを入力しなければならない 新バージョンの 本番確認 ⚫ IAMユーザにはメールアドレスが紐づいていないため、3-way 本番トラフィック 切り替え mergeの際に毎回メールアドレスを入力する必要がある ロールバック 判断待機 ⚫ プルリクをマージする際に、元のブランチを消すにデフォルトで 旧バージョン 終了 チェックが入っている・・・ CodePipeline アプリケーション デベロッパー アプリケーションの 登録(git push) 開発PC CodeCommit CodeBuild CodeDeploy アプリケーション、 Dockerfile docker build デプロイ buildspec.yml docker push CI/CD定義の 事前準備(git push) 開発PC ベースコンテナイメージの 事前登録 (docker push) Copyright (C) NRI digital, Ltd. All rights reserved. Elastic Container Elastic ContainerRegistry(ECR) Registry ベースイメージ Elastic Load Balancer Blue 旧バージョン Green appspec.yml プラットフォーム アーキテクト Elastic ContainerService 新バージョン デプロイ用イメージ 37
目次 前置き(自己紹介/会社紹介/本日お話しすることの背景) 課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD CI/CDによる 運用改善事例 事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ まとめ Copyright (C) NRI digital, Ltd. All rights reserved. 38
事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ リポジトリをBitBucketに差し替え、Slack連携を追加 ◼AWSの昨年末~今年のアップデートで新機能として追加された ⚫ (2019/12/18) AWS CodePipelineがAtlassian Bitbucket クラウド(ベータ版) のサポートを開始 https://aws.amazon.com/jp/about-aws/whats-new/2019/12/aws-codepipeline-now-supports-atlassian-bitbucket-cloud/ ⚫ (2020/4/2) Slack での AWS CodeBuild、AWS CodeCommit、AWS CodeDeploy、AWS CodePipeline の通知受け取りが開始に https://aws.amazon.com/jp/about-aws/whats-new/2020/04/receive-notifications-for-aws-codebuild-codecommit-codedeploy-codepipeline-in-slack/ ◼BitbucketはもともとJira、Confluenceなど他のAtlassianプロダクトと併用していた →コラボレーションで使いづらいCodeCommitを使わなくて良くなる ◼もともと社内のチャットツールがSlack →読みづらいJSONのメール通知を受け取らなくて良くなる Copyright (C) NRI digital, Ltd. All rights reserved. 39
事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ 開発サイクルが早いため、アジャイルに適したツールと連携 ◼Atlassian×Slackとの連携強化により、CI/CDの異常に気づいてコミュニケーションが円滑に 開発環境 リポジトリ ビルド デプロイ サービス実行環境 チケット管理 CodePipeline Wiki/レポート アプリケーション デベロッパー アプリケーションの 登録(git push) CodeBuild cdk deploy アプリケーション ビルド デプロイ buildspec.yml ユニットテスト E2Eテスト 1 開発PC チャット S3 curl API Gateway パイプラインの成功/失敗通知 プラットフォーム アーキテクト CI/CD定義の 事前準備(git push) 開発PC Copyright (C) NRI digital, Ltd. All rights reserved. Lambda DynamoDB Simple Notification Service 40
良かった点: 開発サイクルが早いため、アジャイルに適したツールと連携 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ ◼◼Atlassian×Slackとの連携強化により、CI/CDの異常に気づいてコミュニケーションが円滑に 開発サイクルが早く少人数の開発体制だったので Atlassian×Slackにすべての情報が連携されたこと で機動力のある開発ができ、生産性も上がった。 開発環境 リポジトリ ビルド デプロイ サービス実行環境 チケット管理 CodePipeline Wiki/レポート (特に、COVID-19によるリモートワークで効果大) アプリケーション デベロッパー アプリケーションの 登録(git push) CodeBuild cdk deploy アプリケーション ビルド デプロイ buildspec.yml ユニットテスト E2Eテスト 1 開発PC チャット S3 curl API Gateway パイプラインの成功/失敗通知 プラットフォーム アーキテクト CI/CD定義の 事前準備(git push) 開発PC Copyright (C) NRI digital, Ltd. All rights reserved. Lambda DynamoDB Simple Notification Service 41
目次 前置き(自己紹介/会社紹介/本日お話しすることの背景) 課題:モノリシックなアプリケーションのレガシーで高負荷なリリース運用の例 事例①:IoT向けAPIサービス(サーバーレス) × GitLab CI/CD CI/CDによる 運用改善事例 事例②:会員ID管理APIサービス(コンテナ) × AWS Codeシリーズ 事例③:店舗向けAPIサービス(サーバーレス) × AWS Codeシリーズ まとめ Copyright (C) NRI digital, Ltd. All rights reserved. 42
本日お伝えしたかったこと 1. モノリシックなアプリケーション×レガシーで高負荷なリリース運用はつらいです。 新しい案件をきっかけにCI/CDに取り組んで、ビジネスの価値を高める活動にシフトしましょう 2. Gitリポジトリ×CI/CDツールは、仕様・ドキュメント上”つながる”組み合わせは数多くありますが、 「同じGitだと思って使ってみたら生産性が全然違った」ということがあります。ほとんどの場合で Gitリポジトリを利用するユーザ数 > CI/CDツールを利用するユーザ数 となるため、使い慣れたGitリポジトリを変更する判断は慎重にしましょう 3. とはいえ、クラウドやSaaSは日々機能が追加され、使いやすくアップデートされていきます。 定期的に最新の機能をキャッチアップして、こまめにCI/CDパイプラインや運用をリファクタリング していくことも重要です(でないと、成長しているサービスなのにSubversionが現役で ずっとつらいリリース運用を続ける例のようになりかねません・・・) Copyright (C) NRI digital, Ltd. All rights reserved. 43
宣伝 ◼ 本日の内容を補足する、弊社テックブログ記事 「CI/CD:アプリケーションを頻繁に提供する手法への取り組み」 https://www.nri-digital.jp/tech/20200318-1643/ →CI/CDツールの制約に対する考え方を記載しています。 Copyright (C) NRI digital, Ltd. All rights reserved. 44
\ご清聴ありがとうございました/ Copyright (C) NRI digital, Ltd. All rights reserved. 45