継続的インテグレーションと継続的デリバリー - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

継続的インテグレーションと継続的デリバリー

従来のソフトウェア開発およびインフラストラクチャ管理プロセスを使用する組織よりも迅速にアプリケーションとサービスを進化および改善します。

継続的インテグレーション継続的デリバリー (CI/CD) で DevOps プラクティスを採用することで、アプリケーションの構築、テスト、デプロイのための合理化、自動化、効率的なプロセスが促進されます。CI/CD を使用すると、ソフトウェアの迅速な配信が可能になり、デプロイエラーのリスクが軽減され、アプリケーションが常に最新の機能とバグ修正で最新状態になります。主な目的は、従来のソフトウェア開発およびインフラストラクチャ管理プロセスの使用から進化することで、アプリケーションとサービスをより迅速に進化および改善することです。

スタート

ソフトウェアコンポーネント管理を採用する

ソフトウェアコンポーネント管理は、ライブラリ、フレームワーク、ソースコードリポジトリ、モジュール、アーティファクト、サードパーティーの依存関係など、ソフトウェアの構築に使用されるすべての個々のコンポーネントを管理する方法です。Git や Apache Subversion などのバージョン管理システムを使用して、ソースコードの管理、コラボレーションの有効化、コード変更の履歴の維持を行うことをお勧めします。リポジトリの変更とイベントをモニタリングして、プロセスの自動化、パイプラインの作成、コードの管理、必要に応じてワークフローと追加の サービスの統合を行うことができます。 

CI/CD パイプラインを作成する

CI/CD パイプラインは、バージョン管理システムにコミットされた変更によって開始される一連の自動指示書です。通常、アプリケーションの構築、自動テストの実行、特定の環境にコードをデプロイする手順が含まれています。、JenkinsAWS CodePipeline、GitLab、または CircleCI などのツールを使用して、自動 CI/CD パイプラインを設定できます。パイプラインの生成をサポートするバージョン管理システムで直接設定することもできます。

継続的な統合のために実行可能な最小限のパイプラインから始め、より多くのアクションとステージを含む継続的な配信パイプラインに移行します。継続的配信設定をコードとして扱います。ブランチとチームごとに異なる複数のパイプラインを使用できるため、設定する必要がある設定変数と、パイプラインを使用するチームを最適にサポートする方法を検討してください。

デプロイウィンドウ - コードをデプロイする日時を検討します。システムの需要の少ない時間を考慮すると、ロールバックする必要がある場合は、顧客への影響が最も少なくなります。その他のベストプラクティスには、金曜日のデプロイの回避や、ピーク日または休日前のコードフリーズの実装などがあります。コミットの作成者が不在の場合 (休暇中など) は、コードのデプロイに関するルールを定義することを検討してください。デプロイは失敗し、外部ヘルプに依存する必要があることに注意してください。インプレース、ローリング、イミュータブル、ブルー/グリーンデプロイなど、さまざまなデプロイ方法を評価します。可用性とセキュリティを向上させ、複雑さと管理を最小限に抑えながら、継続的な配信ワークフローにフルマネージドサービスを使用することを検討してください。

自動テストをデプロイする

最新のプラクティスでは、問題がリポジトリにコミットされてパイプラインを開始する前に、問題を検出して修正するために、左にシフト (テストをデベロッパーと IDE の近くに移動し、ライフサイクルの前半に移動) することをお勧めします。この方法には、デベロッパーとのクイックフィードバックループが含まれます。これは、デベロッパーがコーディングしている間にエラーが検出されるためです。テストではパイプラインを実行する必要がないため、左へのシフトはコストの低下に関連しており、非同期フィードバックや運用コストの増加につながる可能性があります。

自動テストは、開発プロセスの早い段階でエラーを検出し、ユニットテスト、統合テスト、機能テストが含まれます。デベロッパーには、できるだけ早くユニットテストを作成し、中央リポジトリにコードをプッシュする前にテストを実行するためのツールを使用することをお勧めします。さらに、自動化プロセスに静的コード分析、パフォーマンスベンチマーク、セキュリティアプリケーションテストが含まれていることを確認します。

ドキュメントの作成

CI/CD パイプラインを実装して開発ワークフローを合理化するだけでなく、明確で包括的なドキュメントを維持し、パイプラインの継続的な有効性、保守性、スケーラビリティを確保する必要があります。ドキュメントは、CI/CD パイプラインの重要な側面です。これは、開発チームがパイプラインの設計、コンポーネント、プロセスを明確に理解できるためです。ドキュメントを作成するときは、パイプラインの概要から始めて、アーキテクチャと設計のトレードオフを説明し、使用されているツールとテクノロジーを説明し、初期設定と設定を指定し、セキュリティ対策とアクセスコントロールの概要を示し、トラブルシューティングとメンテナンスの情報を含めます。

Infrastructure as Code を使用する

Terraform、Ansible、 などのツールを使用してインフラストラクチャAWS CloudFormationを管理し、一貫性と再現性のある環境を確保します。インフラストラクチャをコードとして扱い、インフラストラクチャの変更を追跡し、コンソールで直接変更を行わないようにします。データベースプロビジョニングを含むすべてのインフラストラクチャをコードとして定義し、パイプラインを使用してこれらの変更をデプロイします。サニタイズされた本番データの小さなサブセットを持つパイプラインで、データベース統合をコードとして実行することを検討してください。可能な場合は、変更を行い、コードでそれらの変更を追跡します。

ソフトウェアコードと同様に、インフラストラクチャコードのベストプラクティスに従います。

  • バージョン管理を使用します。

  • バグ追跡およびチケット発行システムを利用します。

  • 適用する前に、変更をピアに確認します。

  • インフラストラクチャコードのパターンと設計を確立します。

  • インフラストラクチャの変更をテストします。

標準メトリクスを維持および追跡する

高レベルのパフォーマンスを維持するには、主要なメトリクスを開発して追跡し、パイプラインの健全性とビジネスへの影響を理解します。

  • ビルド頻度。ビルドの数は、チームの生産性と変更の複雑さに関するインサイトを提供します。

  • デプロイ頻度。定期的なデプロイは、健全でアジャイルな開発プロセスを示します。

  • 変更のリードタイム。変更が本番環境に到達するまでの平均時間を測定すると、デプロイプロセスのボトルネックを特定するのに役立ちます。

  • パイプラインまでの平均時間。最初のパイプラインステージから後続の各ステージまでの平均時間は、ワークフローの最適化に役立ちます。

  • 本番稼働用変更ボリューム。本番稼働環境に到達する変更の数を追跡することで、本番稼働環境の安定性に関するインサイトを得ることができます。

  • ビルド時間。平均ビルド時間は、コードベースまたはインフラストラクチャの潜在的な問題を示している可能性があります。

事前

設定管理を使用する

設定管理ツールは、ソフトウェアとインフラストラクチャのデプロイ、設定、管理を自動化する上で重要な役割を果たします。変更を処理し、さまざまな環境にわたるインフラストラクチャ、ソフトウェア、設定の望ましい状態を維持するための体系的なアプローチを提供します。これらのツールを使用すると、デベロッパーは宣言型言語または命令型言語を使用してシステムの望ましい状態を定義できます。設定管理ツールは、これらの設定をターゲットシステムに適用するプロセスを自動化し、一貫性と再現性を確保します。

設定管理ツールを使用して、ソフトウェアとインフラストラクチャのデプロイ、設定、管理を自動化します。AWS Systems Manager ステートマネージャーは、マネージドノードやその他の AWS リソースを定義した状態に保つプロセスを自動化する、安全でスケーラブルな設定管理サービスです。

モニタリングとログ記録の統合

モニタリングとログ記録のソリューションを CD パイプラインに統合すると、開発チームやソフトウェア開発プロセス全体に多くの利点があります。これらのソリューションは、アプリケーションのパフォーマンスに関するリアルタイムのインサイトを提供し、問題の迅速な特定と解決を可能にし、継続的な改善を促進して、アプリケーションのライフサイクルを通じて信頼性、パフォーマンス、スケーラビリティを維持するのに役立ちます。モニタリングおよびログ記録ソリューションへの投資は、堅牢で効率的な CD パイプラインを維持する上で重要な側面であり、最終的には高品質のソフトウェアを正常に配信するのに役立ちます。

マージの周期を作成する

コードの変更をメインライン (トランクまたはメイン) ブランチに少なくとも 1 日に 1 回、または理想的には各タスクの後に 1 日に複数回コミットまたはマージします。この頻度により、毎日複数回のパイプライン呼び出しが発生します。プルベースの分岐ワークフローモデルは、このアプローチと一致します。機能フラグダーク起動、および同様の手法を使用して、顧客が使用する機能をカスタマイズします。 

デプロイ後の動作をキャプチャする

デプロイ後、自動合成テストを使用して本番環境の動作をキャプチャし、結果を継続的な配信パイプラインと同期して、是正措置が迅速に行われるようにします。デベロッパーにとって最優先事項は、パイプラインで検出されたエラーをできるだけ早く修正し、ソースコードリポジトリにコード変更をコミットし、パイプラインでエラー解決を検証することです。

デプロイ後のベストプラクティスには、最も重要な主要業績評価指標 (KPIs) の監視と、本番環境にエラーがないことの検証が含まれます。エラー処理を自動化し、デプロイ後の KPIs を評価して、リリースの影響を定量化します。開発者が改善するために使用できる速度、セキュリティ、安定性のメトリクスを自動的に生成します。詳細については、「 での DevOps モニタリングダッシュボード」を参照してください AWS。

Excel

最適なパフォーマンスを実現するために、最先端のプラクティスとテクノロジーを採用します。CI/CD プロセスを継続的に改善することで、ソフトウェアの品質を向上させ、市場投入までの時間を短縮し、俊敏性を高めることができます。新しい手法とツールが継続的に出現し、組織が常に情報を得て、競争上の優位性を維持するために適応することが不可欠です。

適応し続けるには、次の点を考慮してください。

  • アプリケーション、設定、インフラストラクチャ、データ、 AWS アカウントと組織、デプロイパイプライン、ネットワーク、セキュリティとコンプライアンスのコントロールなど、すべてをコードとして定義します。

  • コンピューティングイメージ、共有サービス、アプリケーションに対応するデプロイパイプラインを作成します。

  • コードで説明されているように、既存のインフラストラクチャの状態を目的の状態と比較することで、プルベースのリクエストが変更をデプロイするワークフローを開始する GitOps モデルを考えてみましょう。

  • CD パイプラインを使用して、機械学習 (ML)、データ、モノのインターネット (IoT)、およびその他のワークロードをデプロイすることを検討してください。

  • すべてのビルドアーティファクトにデジタル署名し、安全なリポジトリに保存します。

  • 顧客にデプロイされるすべてのバージョン管理およびデジタル署名されたアーティファクトの記録を作成するソフトウェア部品表を自動的に生成して、ソフトウェアの出所を追跡します。

  • ソフトウェア配信プロセスの手動アクティビティをすべて削除したら、手動レビューボードを削除します。

ソフトウェア配信プロセス全体を自動化したアプリケーションとサービスについては、パイプラインのすべてのチェックを本番環境の顧客に渡す変更をチームがデプロイする継続的なデプロイを検討してください。視覚化については、 ウェブサイトの「継続的デリバリーとは AWS 」の最初の図を参照してください。

AI/ML テクノロジーを統合する

人工知能 (AI) と機械学習 (ML) テクノロジーを CI/CD パイプラインに統合すると、次のようないくつかの利点があります。

  • 自動テスト生成

  • インテリジェントなテストの優先順位付け

  • 問題検出の予測分析

  • 異常検出と根本原因分析

  • コードレビューと品質保証

  • デプロイの最適化

詳細については、 AWS ウェブサイトの「デベロッパーオペレーションにインテリジェンスを追加する」を参照してください。

カオスエンジニアリングプラクティスを採用する

カオスエンジニアリングでは、システムに意図的に障害を挿入して、予期しないイベントに耐え、回復する能力をテストします。弱点を特定し、積極的に対処することで、組織はシステム全体の信頼性を向上させ、潜在的な問題の影響を最小限に抑えることができます。

Gremlin、Chaos Monkey、Litmus などのツールを使用してシステムの耐障害性をテストするカオスエンジニアリングプラクティスを採用します。制御された実験を定期的に実行して脆弱性を特定し、耐障害性を検証し、アプリケーションが予期しない障害を適切に処理することを確認します。このプロアクティブアプローチは、システムの信頼性を向上させ、より堅牢な CI/CD パイプラインに役立ちます。

パフォーマンスの最適化

プロファイリングツール、リアルタイムモニタリング、フィードバックループを使用して、アプリケーションのパフォーマンスを継続的に最適化します。次のような手法を適用して、アプリケーションがトラフィックと需要の増加に対応できるようにします。

  • コードの最適化

  • プロファイリング

  • リアルタイムモニタリング

  • フィードバックループ

  • キャッシュ

  • 負荷分散

  • スケーラビリティとパフォーマンスのテスト

高度なオブザーバビリティを実装する

クラウドインフラストラクチャのオブザーバビリティを高めることは、メトリクス、ログ、トレースの収集、集約、分析の基本にとどまりません。Amazon CloudWatch や などのツールを使用してオブザーバビリティを強化するとAWS X-Ray、継続的なデリバリーとイノベーションを促進する戦略的プラクティスに進化します。

堅牢な CI/CD パイプラインでは、高度なオブザーバビリティにより、アプリケーションやインフラストラクチャだけでなく、パイプライン自体を含むシステム全体のパフォーマンスとヘルスに関するインサイトも見つけることができます。これらのインサイトは、以下に役立ちます。

  • 潜在的な問題を迅速に特定、理解、対処して、アプリケーションの安定性を向上させ、ダウンタイムを削減する

  • CI/CD プロセスを合理化して、より高速で信頼性の高い配信を作成する

  • コードの変更とデプロイの影響をより深く把握し、情報に基づいた意思決定を促進します。

  • リソース使用率を最適化して運用効率とコスト効率を向上させる

オブザーバビリティを高めるには:

  • オブザーバビリティをアプリケーションとインフラストラクチャのすべてのレイヤーに埋め込み、システムのパフォーマンス、動作、ヘルスを包括的に把握します。

  • Amazon CloudWatch などのツールを使用してデータ収集、ストレージ、分析を一元化し、オブザーバビリティデータを統合して、アクセスと解釈を容易にします。

  • 分散トレース AWS X-Ray に を使用すると、アプリケーションとその基盤となるサービスのパフォーマンスを把握できます。

  • 継続的な改善のためのフィードバックループを確立し、オブザーバビリティデータを使用してシステムの反復的な機能強化を促進します。

高度なオブザーバビリティを採用することは、システムの保守だけでなく、運用上の優秀性を達成し、組織で継続的なイノベーションを推進するための戦略的動きでもあります。

GitOps プラクティスを実装する

GitOps プラクティスを実装し、Git リポジトリを信頼できる単一のソースとして使用して、インフラストラクチャとアプリケーションの設定を管理します。このアプローチにより、変更管理が簡素化され、トレーサビリティが強化され、環境間の一貫性が確保されます。