翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 ユーザーは、CI パイプライン作成の入力パラメータを JSON形式で提供します。この入力は、AWS開発者ツールを使用して CI パイプラインを作成する Step Functions ワークフロー (ステートマシン ) を開始します。
Lambda 関数は Amazon S3 バケットに保存されている「インプット-レファレンス」という名前のフォルダを読み取り、「buildspec.yml」ファイルを生成します。この生成されたファイルは CI パイプラインのステージを定義し、パラメータ参照を格納しているのと同じ Amazon S3 バケットに保存されます。
Step Functions は CI パイプライン作成ワークフローの依存関係に変更がないか確認し、必要に応じて依存関係スタックを更新します。
Step Functions は、 CodeCommit リポジトリ、 CodeBuild プロジェクト、パイプラインなど、CI CodePipeline パイプラインリソースを CloudFormation スタック内に作成します。
CloudFormation スタックは、選択したテクノロジースタック (Java または Python) のサンプルソースコードと buildspec.yml ファイルを CodeCommit リポジトリにコピーします。
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 テンプレートや 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
詳細については、 GitHub ドキュメントの「リポジトリのクローン作成 | AWS DevOps |
クローンされた GitHub リポジトリから Solution Templates フォルダを Amazon S3 バケットにアップロードします。 | クローンした「ソリューション-テンプレート」フォルダから内容をコピーし、作成した Amazon S3 バケットにアップロードします。 詳細については、Amazon S3 ドキュメントの「オブジェクトのアップロード」を参照してください。 注:必ず「ソリューション-テンプレート」フォルダーのコンテンツのみをアップロードしてください。Amazon S3 バケットのルートレベルでのみファイルをアップロードできます。 | AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
クローンされた GitHub リポジトリの template.yml ファイルを使用して、ソリューションをデプロイする CloudFormation スタックを作成します。 |
注: スタックの作成中は、スタックページにステータスが CREATE_IN_PROGRESS と表示されます。このパターンの残りのステップを完了する前に、スタックのステータスが CREATE_COMPLETE に変わるのを待ってください。 | AWS 管理者 AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
作成した関数を実行します。 |
JSON フォーマット
Java JSON入力の例
Python JSON入力の例
| AWS 管理者 AWS DevOps |
CI パイプラインの CodeCommit リポジトリが作成されていることを確認します。 |
| AWS DevOps |
CodeBuild プロジェクトリソースを確認します。 |
| AWS DevOps |
CodePipeline ステージを検証します。 |
| AWS DevOps |
CI パイプラインが正常に実行されたことを確認します。 |
| AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
でリソーススタックを削除します CloudFormation。 | で CI パイプラインのリソーススタックを削除します CloudFormation。 詳細については、 CloudFormation ドキュメントのAWS CloudFormation 「コンソールでのスタックの削除」を参照してください。 注:「<project_name>-stack」という名前のスタックは必ず削除してください。 | AWS DevOps |
Amazon S3 と で CI パイプラインの依存関係を削除します CloudFormation。 |
注: という名前のスタックを削除してくださいpipeline-creation-dependencies-stack。 | AWS DevOps |
Amazon S3 バケットを削除します。 | このパターンの「前提条件の設定」セクションで作成した Amazon S3 バケットを削除します。このバケットには、このソリューションのテンプレートが保存されています。 詳細については、Amazon S3 ドキュメントの「バケットの削除」を参照してください。 | AWS DevOps |
関連リソース
Lambda を使用する Step Functions ステートマシンの作成 (AWS Step Functions ドキュメント)
AWS Step Functions WorkFlow Studio (AWS Step Functions ドキュメント)
AWS CloudFormation 仕組み (AWS CloudFormation ドキュメント)
AWS CodeCommit、、AWS CodeBuild、 AWS CodeDeploy( ブログ記事) を使用して CI/CD を完了する AWS CodePipeline
AWS IAM および AWS STS クォータ、名前要件、文字制限 (IAM ドキュメント)