CodePipelineでシンプルなパイプラインを構築してみた 【CodeFamily Practices 4/7】
概念
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】
Discussion