私の個人的な経験から、多くの企業はクラウドインフラストラクチャを自動化する際にJenkinsとTerraformに依存しています。 Jenkinsからクラウドに何かをデプロイする場合は問題ありませんが、Jenkinsジョブを呼び出してTerraformモジュールをサービスカタログ製品としてデプロイする場合、またはJenkinsパイプラインをによって調整されたワークフローに含める場合はどうすればよいですか? StepFunctions?この記事では、JenkinsジョブをCloudFormationカスタムリソースおよびステップ関数ワークフローと統合できるようにする統合統合パターンについて説明します。
Jenkinsのインストール
JenkinsをAWSクラウドにデプロイする方法はたくさんあります。
AWSクラウドへの単一のJenkinsサーバーの自動インストールプロセスについては、最新のUbuntuに5分でJenkinsをインストールする方法の記事を使用してください。
DockerコンテナをJenkinsワーカーとして使用する方法を探している場合は、AmazonEFSを使用してAmazonEKSにJenkinsをデプロイすることもできます。
使用する展開方法が何であれ。その結果、必要なアプリケーションやサービスをデプロイするために、ワーカーが1つまたは複数のAWSアカウントでIAMの役割を引き受けることができるJenkinsサーバーを取得できます。
これで、JenkinsサーバーをCloudFormationおよびStepFunctionsサービスと統合できます。
この記事を読んでいる場合は、おそらく次の問題のいずれかを解決しようとしています。
- 他のAWSサービスからJenkinsAPIを呼び出す方法
- 複数のAWSアカウントから中央のJenkinsAPIへのアクセスを提供する方法
解決策は、AWS Lambda、SQS、およびSNSを使用することです:

この統合パターンの場合:
- AWSLambdaの 役割は、python-jenkinsライブラリを使用してJenkinsへのAPI呼び出しを行うことです。
- Amazon SNS StepFunctionおよびCloudFormationサービスからイベントをシームレスに受信できます。
- Amazon SQS は、Jenkinsが(何らかの理由で)使用できなくなった場合にメッセージを失うことなく、任意のボリュームでJenkinsのメッセージを送信、保存、および受信する責任があります。
1つのAWSアカウントの完全なアーキテクチャ図は次のようになります。

複数のAWSリージョンをサポートする必要がある場合は、SNSトピックを必要なAWSリージョンに配置し、それらをSQSキューに直接統合することで、このようなセットアップを簡単に拡張できます。

SNSトピックアクセスポリシーを設定して、複数のAWSアカウントおよび組織からトピックへのアクセスを提供できます。アカウントIDとAWS組織のOUを使用できるため、設定は非常に簡単です。
- 組織内のAWSアカウントが自分のアカウントのAmazonSNSトピックにメッセージを公開できるようにするにはどうすればよいですか?
最後に、「JenkinsとAWS CloudFormation」の統合が完了するとすぐに、CloudFormationカスタムリソースを使用して、CloudFormationからJenkinsジョブを実行できます。これにより、Jenkinsを使用してサービスカタログ製品をデプロイする機能のロックが解除されます。
この記事では、JenkinsとCloudFormationおよびStep Function AWSサービスとの統合について説明しました。これにより、Jenkinsジョブを使用してサービスカタログ製品をデプロイしたり、StepFunctionsワークフローの一部として使用したりできます。
この記事がお役に立てば幸いです。もしそうなら、私たちがそれを世界に広めるのを手伝ってください!