Java および Python プロジェクト用の動的 CI パイプラインを自動的に作成 - AWS 規範ガイダンス

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

Java および Python プロジェクト用の動的 CI パイプラインを自動的に作成

Amazon Web Services、Aromal Raj Jayarajan、Vijesh Vijayakumaran Nair、MAHESH RAGHUNANDANAN、Amarnath Reddy

概要

このパターンは、AWS 開発者ツールを使用して Java および Python プロジェクトの動的継続的インテグレーション (CI) パイプラインを自動的に作成する方法を示しています。

テクノロジースタックが多様化し、開発活動が増えるにつれて、組織全体で一貫性のある CI パイプラインを作成して維持することが難しくなる可能性があります。AWS Step Functions のプロセスを自動化することで、CI パイプラインの使用法とアプローチに一貫性を持たせることができます。

動的 CI パイプラインの作成を自動化するために、このパターンでは以下の変数入力を使用します。

  • プログラミング言語 (Java または Python のみ)

  • パイプライン名

  • 必要なパイプラインステージ

注記

Step Functions は、複数の AWS サービスを使用してパイプラインの作成をオーケストレーションします。このソリューションで使用されている AWS サービスの詳細については、このパターンの「ツール」セクションを参照してください。

前提条件と制限

前提条件

  • アクティブな AWS アカウント。

  • このソリューションがデプロイされている同じ AWS リージョンにある Amazon S3 バケット

  • このソリューションに必要なリソースを作成するために必要な AWS CloudFormation アクセス許可を持つ AWS Identity and Access Management (IAM) 「プリンシパル

制限事項

  • このパターンは Java プロジェクトと Python プロジェクトのみをサポートします。

  • このパターンでプロビジョニングされる IAM ロールは、最小特権の原則に従います。IAM ロールの権限は、CI パイプラインが作成する必要のある特定のリソースに基づいて更新する必要があります。

アーキテクチャ

ターゲットテクノロジースタック

  • AWS CloudFormation

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • IAM

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Systems Manager

  • AWS Step Functions

  • AWS Lambda

  • Amazon DynamoDB

ターゲットアーキテクチャ

次の図は、AWS 開発者ツールを使用して Java および Python プロジェクトの動的 CI パイプラインを自動的に作成するワークフローの例を示しています。

AWS ツールを使用して Java および Python プロジェクトの動的 CI パイプラインを自動的に作成するワークフロー。

この図表は、次のワークフローを示しています:

  1. AWS ユーザーは CI パイプラインを作成するための入力パラメータを JSON 形式で提供します。この入力により、AWS 開発者ツールを使用して CI パイプラインを作成する Step Functions ワークフロー (ステートマシン) が開始されます。

  2. Lambda 関数は Amazon S3 バケットに保存されている「インプット-レファレンス」という名前のフォルダを読み取り、「buildspec.yml」ファイルを生成します。この生成されたファイルは CI パイプラインのステージを定義し、パラメータ参照を格納しているのと同じ Amazon S3 バケットに保存されます。

  3. Step Functions は CI パイプライン作成ワークフローの依存関係に変更がないか確認し、必要に応じて依存関係スタックを更新します。

  4. Step Functions は、CodeCommit リポジトリ、CodeBuild プロジェクト、CodePipeline パイプラインを含む CI パイプラインリソースを CloudFormation スタックに作成します。

  5. CloudFormation スタックは、選択したテクノロジースタック (Java または Python) のサンプルソースコードと 「buildspec.yml」ファイルを CodeCommit リポジトリにコピーします。

  6. CI パイプラインランタイムの詳細は DynamoDB テーブルに保存されます。

自動化とスケール

  • このパターンは 1 つの開発環境でのみ使用できます。複数の開発環境で使用するには、設定の変更が必要です。

  • 複数の CloudFormation スタックのサポートを追加するには、追加の CloudFormation テンプレートを作成できます。詳細については、CloudFormation ドキュメントの「AWS CloudFormation 入門」を参照してください。

ツール

ツール

  • AWS Step Functionsは、AWS Lambda関数と他のAWS サービスを組み合わせてビジネスクリティカルなアプリケーションを構築できるサーバーレスオーケストレーションサービスです。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • AWS CodeBuild はフルマネージドの構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。

  • AWS CodeCommit は、独自のソースコントロールシステムを管理しなくても、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。

  • AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

  • AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号キーを作成および管理する上で役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

  • AWS CloudFormation を使用すると、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクル全体にわたってリソースを管理できます。

  • Amazon DynamoDB は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。

  • AWS Systems Manager Parameter Store は、設定データ管理とシークレット管理用の安全な階層型ストレージを提供します。

Code

このパターンのコードは、GitHub 内の「automated-ci-pipeline-creation」リポジトリで利用できます。リポジトリには、このパターンで概説されているターゲットアーキテクチャの作成に必要な CloudFormation テンプレートが含まれています。

ベストプラクティス

  • トークンやパスワードなどの認証情報 (シークレット) を CloudFormation テンプレートや Step Functions アクション設定に直接入力しないでください。その場合、情報は DynamoDB ログに表示されます。代わりに、AWS Secrets Manager を使用してシークレットを設定し、保存してください。次に、必要に応じて CloudFormation テンプレートとStep Functions アクション設定内のSecrets Manager に保存されているシークレットを参照します。詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Manager とは」を参照してください。

  • Amazon S3 に保存した CodePipeline アーティファクトのサーバー側の暗号化を設定する 詳細については、CodePipeline ドキュメントの「CodePipeline 用に Amazon S3 に保存したアーティファクトのサーバー側の暗号化を設定する」を参照してください。

  • IAM ロールを設定する際には、最小特権アクセス許可を適用します。詳細については、IAM ドキュメントの「最小特権アクセス許可を適用する」を参照してください。

  • Amazon S3 バケットがパブリックにアクセスできないことを確認します。詳細については、Amazon S3 ドキュメントの「S3 バケットのブロックパブリックアクセス設定を行う」を参照してください。

  • Amazon S3 バケットのバージョニングを必ず有効にしてください。詳細については、「Amazon S3 バケットでのバージョニングの使用」を参照してください。

  • IAM ポリシーを設定するときは IAM アクセスアナライザーを使用してください。このツールは安全で機能的なIAMポリシーを作成するのに役立つ実用的な推奨事項を提供します。詳細については、IAM ドキュメントの「AWS アイデンティティとアクセスマネジメントアクセスアナライザの使用」を参照してください。

  • 可能な場合は、IAM ポリシーを設定する際に特定のアクセス条件を定義してください。

  • モニタリングと監査の目的で Amazon CloudWatch のロギングを有効化します。詳細については、Cloudwatch ドキュメントの「Amazon CloudWatch Logsとは」を参照してください。

エピック

タスク説明必要なスキル

Amazon S3 バケットを作成する。

Amazon S3 バケットを作成して (または既存のバケットを使用して)、ソリューションに必要な CloudFormation テンプレート、ソースコード、および入力ファイルを保存します。

詳細については、Amazon S3 ドキュメントの「ステップ1:最初の S3 バケットの作成」を参照してください。

注記

Amazon S3 バケットが、ソリューションをデプロイしているリージョンと同じ AWS リージョンに存在する必要があります。

AWS DevOps

GitHub リポジトリのクローンを作成します。

ターミナルウィンドウで次のコマンドを実行して、GitHub 「自動 CI パイプライン作成」リポジトリをクローンします。

git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git

詳細については、Github ドキュメントの「リポジトリのクローン」を参照してください。

AWS DevOps

クローンした GitHub リポジトリから Amazon S3 バケットにソリューションテンプレートフォルダをアップロードします。

クローンした「ソリューション-テンプレート」フォルダから内容をコピーし、作成した Amazon S3 バケットにアップロードします。

詳細については、Amazon S3 ドキュメントの「オブジェクトのアップロード」を参照してください。

注記

必ず Solution-Templates フォルダのコンテンツのみをアップロードしてください。Amazon S3 バケットのルートレベルでのみファイルをアップロードできます。

AWS DevOps
タスク説明必要なスキル

クローンされた GitHub リポジトリ内の template.yml ファイルを使用して、ソリューションをデプロイするための CloudFormation スタックを作成します。

  1. AWS マネジメントコンソールにサインインしてから、AWS CloudFormation コンソールを開きます。

  2. [スタックの作成] を選択してください。ドロップダウンリストが表示されます。

  3. ドロップダウンリストで「新規リソース追加 (標準)」を選択します。[スタックの作成] ページを開きます。

  4. [テンプレートの指定] セクションで、[テンプレートファイルのアップロード] のチェックマークを選択します。

  5. [Choose file] を選択します。次に、クローンした GitHub リポジトリのルートフォルダに移動し、「template.yml」ファイルを選択します。次に、[開く] を選択します。

  6. [次へ] を選択します。[スタック詳細の指定] ページが表示されます。

  7. [パラメータ] セクションで、以下のパラメータを指定します。

    • s3TemplateBucketName」には、前に作成しておいた Amazon S3 バケットの名前を入力します。このバケットには、このソリューションのソースコードとリファレンスが格納されています。バケット名のパラメーターが小文字であることを確認します。

    • DynamoDBTable」には、CloudFormation スタックが作成する DynamoDB テーブルの名前を入力します。

    • StateMachineName」には、CloudFormation スタックが作成するStep Functions ステートマシンの名前を入力します。

  8. [次へ] を選択します。スタックオプションの設定 ページが開きます。

  9. [スタックオプションの設定] ページで、[次へ] を選択します。デフォルト値はいずれも変更しないでください。「レビュー」ページが開きます。

  10. スタックの作成設定を確認します。次に、「スタックの作成] を選択してスタックを起動します。

注記

スタックの作成中、スタックは [スタック]ページにリストされ、そのステータスが CREATE_IN_PROGRESS と表示されます。このパターンの残りのステップを完了する前に、スタックのステータスが「作成_完了」に変わるのを必ず待ってください。

AWS 管理者、AWS DevOps
タスク説明必要なスキル

作成した関数を実行します。

  1. AWS マネジメントコンソールにサインインし、「手順関数コンソール」 を開きます。

  2. 作成した関数が表示されます。

  3. [実行のスタート] を選択します。次に、ワークフローの入力値を JSON 形式で入力します (以下の入力例を参照)。

  4. [実行のスタート] を選択します。

(JSON 形式) を使用してエクスポートおよびダウンロードするには:

{ "details": { "tech_stack": "Name of the Tech Stack (python/java)", "project_name": "Name of the Project that you want to create with", "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no", } }

Java JSON 入力の例

{ "details": { "tech_stack": "java", "project_name": "pipeline-java-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }

Python JSON 入力の例

{ "details": { "tech_stack": "python", "project_name": "pipeline-python-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }
AWS 管理者、AWS DevOps

CI パイプラインの CodeCommit リポジトリが作成されたことを確認します。

  1. AWS マネジメントコンソールにサインインし、CodeCommit コンソールを開きます。

  2. リポジトリ」ページで、作成した CodeCommit リポジトリの名前がリポジトリのリストに表示されていることを確認します。リポジトリの名前には、pipeline-java-pjt-Repo という文字列が付加されます。

  3. CodeCommit リポジトリを開き、サンプルソースコードと「buildspec.yml」ファイルがメインブランチにプッシュされていることを確認します。

AWS DevOps

CodeBuild プロジェクトリソースを確認してください。

  1. AWS マネジメントコンソールにサインインし、CodeBuild コンソールを開きます。

  2. ビルドプロジェクト」ページで、作成した CodeBuild プロジェクトの名前がプロジェクトのリストに表示されていることを確認します。プロジェクトの名前には「Pipeline-java-PJT-Build」を追加します。

  3. CodeBuild プロジェクトの名前を選択してプロジェクトを開きます。次に、以下の設定を確認して検証します。

    • プロジェクトの設定

    • ソース

    • 環境

    • Buildspec

    • Batch 構成

    • アーティファクト

AWS DevOps

CodePipeline のステージを検証します。

  1. AWS マネジメントコンソールにサインインし、CodePPipeline コンソールを開きます。

  2. パイプライン」ページで、作成したパイプラインの名前がパイプラインのリストに表示されていることを確認します。パイプラインの名前には「Pipeline-java-Pjt-Pipeline」を追加します。

  3. パイプラインの名前を選択してパイプラインを開きます。次に、「コミット」や「デプロイ」など、パイプラインの各段階を確認して検証します。

AWS DevOps

CI パイプラインが正常に実行されたことを確認します。

  1. CodePipeline コンソール」の「パイプライン」ページで、パイプラインの名前を選択してパイプラインのステータスを表示します。

  2. パイプラインの各ステージのステータスが「Succeeded」であることを確認します。

AWS DevOps
タスク説明必要なスキル

CloudFormation のリソーススタックを削除します。

CloudFormation 内の CI パイプラインのリソーススタックを削除します。

詳細については、CloudFormationドキュメントの「AWS CloudFormation でのスタックの削除」を参照してください。

注記

<project_name>-stack という名前のスタックは必ず削除してください。

AWS DevOps

Amazon S3 とCloudFormation の CI パイプラインの依存関係を削除します。

  1. DeplomentArtifactBucket」という名前の Amazon S3 バケットを空にします。詳細については、Amazon S3 ドキュメントの「バケットを空にする」 を参照してください。

  2. CloudFormation 内の CI パイプラインの依存関係スタックを削除します。詳細については、CloudFormationドキュメントの「AWS CloudFormation でのスタックの削除」を参照してください。

注記

pipeline-creation-dependencies-stack という名前のスタックは必ず削除してください。

AWS DevOps

Amazon S3 バケットを削除します。

このパターンの「前提条件の設定」セクションで作成した Amazon S3 バケットを削除します。このバケットには、このソリューションのテンプレートが保存されています。

詳細については、Amazon S3 ドキュメントの「バケットの削除」を参照してください。

AWS DevOps

関連リソース