⏯️

CodePipelineでシンプルなパイプラインを構築してみた 【CodeFamily Practices 4/7】

2023/04/30に公開

概念

DevOpsのワークフローをモデル化。ソフトウェアのリリースを自動化する、継続的デリバリーのマネージドサービス。

  • 仕組み
    ステージごとに環境を作成し、アーティファクトに対してビルドやデプロイを実行。ステージのアクションは、サードパーティのツールの呼び出し、手動の承認なども可能。
    パイプラインはステージとトランジションの組み合わせにより成り立ち、リリースプロセスを可視化。ステージとトランジションは、追加と削除を自在に設定することが可能。
    一つずつステージを実行。処理期間はステージをロック。エラーなどで失敗すると実行を停止し、ロックを解除後に再試行が可能。
    パイプラインの実行結果をSNSで通知可能。

  • アクション
    ソース、ビルド、テスト、デプロイ、承認、Invokeがあり、それぞれプロバイダーもしくは手動を設定。
    ステージを作成する前に、CodeBuildのビルドプロジェクト、CodeDeployのデプロイグループなどのアクションを予め作成。
    アクションは一つのステージで並列処理することが可能。

  • ステージ
    アクションを実行する環境の単位。トランジションで繋げてパイプラインを形成。

使用方法

S3とCodeDployを使用して2台のEC2へアプリケーションをデプロイするパイプラインを構築。
構築後、ステージの追加と削除を実践。
※公式ドキュメントチュートリアル

アプリケーションバンドルのアップロード

CodePipelineと連携するバケットを作成。
アプリケーションバンドルの内容変えて更新をした場合にバージョンとして認識されるように、バージョニングを有効化して作成。

バケットへアプリケーションバンドルをアップロード。
バンドルはappspec.ymlを含み、Zipファイル形式。

IAMロールの作成

インスタンスプロファイル用のロールを作成。

IAMロール作成画面で、信頼されたエンティティタイプはAWSのサービス、ユースケースはEC2を選択。

AmazonEC2RoleforAWSCodeDeployで検索し、選択。

AmazonSSMManagedInstanceCoreで検索し、選択。

任意のロール名を付与。

EC2の起動

ウィンドウズを使用して作成したアプリケーションのサーバーを起動するため、
マシンイメージは、Windowsを選択。

インスタンスプロファイルに、先ほど作成したロールを選択。
インスタンスは、2機で起動。

CodeDeployの設定

IAMロールの作成

信頼されたエンティティタイプをAWSのサービス、ユースケースをCodeDeployを選択。

AWSCodeDeployRoleで検索し、選択。

任意のロール名を付与。

アプリケーションとデプロイグループの作成。

CodeDeployへ移動し、アプリケーションの作成を選択。

アプリケーション名を入力し、コンピューティングプラットフォームはEC2/オンプレミスを選択。

デプロイグループの作成を選択。

以下を入力。

サービスロール デプロイタイプ 環境設定 エージェントのインストール デプロイ設定 ロードバランサー
前述のロール インプレース インスタンス名(Name:タグ名) 今すぐ更新し、
更新をスケジュール
OneAtTime なし

作成内容の確認。

CodePipelineの設定

CodePipelineへ移動し、パイプラインを作成するを選択。

新しいサービスロールを選択。ロール名が自動的に入力される。

ソースステージの追加。 アプリケーションパッケージの場所を指定する。

ソースプロバイダー バケット S3オブジェクトキー 提出オプションを変更する
Amazon S3 アプリケーションzipファイルをアップロードしたバケット zipファイル名 Amazon CloudWatch Events

EventBridgeを消してオプションに選択することで、アプリケーションファイルのバージョンをアップロードをトリガーにし、自動的にパイプラインがデプロイを実行。

CodeBuildを使用しないためスキップ。

デプロイプロバイダー リージョン アプリケーション名 デプロイグループ
CodeDeploy 東京 前述で作成したアプリケーション 前述で作成したデプロイグループ

内容の確認。

パイプラインの完成と同時にデプロイを開始。

実行状況を可視化。

すべてのステージが成功すると完了。

実行履歴で、それぞれのステージの実行結果の詳細を確認可能。

CodeDeployのデプロイと画面から、各リソースのデプロイステータスを確認可能。

EC2へアクセスすると、サンプルアプリケーションが呼び出され無事デプロイが完了したことを表示。

別のステージをパイプラインに追加

CodeDeployへ移り、デプロイグループの作成を選択。

デプロイグループ名のみ変更し、残りは前述で作成した内容と同一。

作成内容を確認。

CodePipelineへ移動。

編集ボタンをクリック。

追加するステージのステージ名を入力。

保存を選択。

内容に変更がなければ完了を選択。

新しいステージが追加されるので、保存を選択。

変更をリリースするを選択。

すでにEC2にアプリケーションがデプロイされているため、わざとエラーを表示。

エラーの確認。

ステージ間の移行を無効

CodePipelineへ移動。

パイプラインを表示。
移行を無効にするを選択。

理由を入力し、無効にするを選択。

無効にしても、ステージは表示されたままになる。

まとめ

シンプルなパイプラインの構築と、追加・削除を実践。
サードパーティのツールと組み合わせて使用したり、パイプライン自体をInfrastructure as Codeで構築してみるなど、課題はまだ多い。
構築系のハンズオンと併用して、習得していきたい。

合わせて読みたい👀👉CodeFamily Practicesの記事

CodeCommitとローカル環境の連携 【CodeFamily Practices 1/7】
CodeBuildでビルドプロジェクトを作ってみよう 【CodeFamily Practices 2/7】
CodeDeployでEC2にアプリケーションをデプロイ 【CodeFamily Practices 3/7】
CodePipelineとCloudformationで、API Gatewayをビルド【CodeFamily Practices 5/7】
CodePipelineとServerless Frameworkでビルド【CodeFamily Practices 6/7】
CodePipelineとTerraformで、API Gatewayをビルド【CodeFamily Practices 7/7】
GitHubで編集を提案

Discussion