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

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

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

作成者: Aromal Raj Jayarajan (AWS)、Amarnath Reddy (AWS)、 MAHESH RAGHUNANDANAN (AWS)、および Vijesh Vijayakumaran Nair (AWS)

コードリポジトリ: automated-ci-pipeline-creation

環境:PoC またはパイロット

テクノロジー: DevOps、インフラストラクチャ、サーバーレス

ワークロード:その他すべてのワークロード

AWS サービス: AWS CodeBuild、AWS CodePipeline、AWSLambda、AWSStep Functions、 AWS CodeCommit

[概要]

注意: AWS CodeCommit は、新規顧客では利用できなくなりました。の既存のお客様は、通常どおりサービスを AWS CodeCommit 引き続き使用できます。詳細はこちら

このパターンは、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 プロジェクト、パイプラインなど、CI CodePipeline パイプラインリソースを CloudFormation スタック内に作成します。

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

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

自動化とスケール

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

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

ツール

ツール

  • AWS Step Functions は、Lambda AWS 関数とその他のサービスを組み合わせてビジネスクリティカルなアプリケーションを構築するのに役立つサーバーレスオーケストレーション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 は、設定データ管理とシークレット管理のための安全で階層的なストレージを提供します。

コード

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

ベストプラクティス

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

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

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

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

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

  • IAM ポリシーを設定するときは、IAMAccess Analyzer を使用します。このツールは、安全で機能的なIAMポリシーの作成に役立つ実用的な推奨事項を提供します。詳細については、 IAMドキュメントのAWS「Identity and Access Management Access Analyzer の使用」を参照してください。

  • 可能な場合は、IAMポリシーを設定するときに特定のアクセス条件を定義します。

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

エピック

タスク説明必要なスキル

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

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

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

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

AWS DevOps

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

ターミナルウィンドウで次のコマンドを実行して、リポジトリをクローンします GitHub automated-ci-pipeline-creation

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

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

AWS DevOps

クローンされた GitHub リポジトリから Solution Templates フォルダを Amazon S3 バケットにアップロードします。

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

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

注:必ず「ソリューション-テンプレート」フォルダーのコンテンツのみをアップロードしてください。Amazon S3 バケットのルートレベルでのみファイルをアップロードできます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注: スタックの作成中は、スタックページにステータスが CREATE_IN_PROGRESS と表示されます。このパターンの残りのステップを完了する前に、スタックのステータスが CREATE_COMPLETE に変わるのを待ってください。

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

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

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

  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. Build projects ページで、作成した CodeBuild プロジェクトの名前がプロジェクトのリストに表示されることを確認します。プロジェクトの名前に pipeline-java-pjt-Build が追加されます。

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

    • プロジェクトの設定

    • ソース

    • 環境

    • Buildspec

    • Batch 構成

    • アーティファクト

AWS DevOps

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

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

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

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

AWS DevOps

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

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

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

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

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

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

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

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

AWS DevOps

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

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

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

注: という名前のスタックを削除してくださいpipeline-creation-dependencies-stack

AWS DevOps

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

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

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

AWS DevOps

関連リソース