はじめに
今回は、PipeCDを実際に触ってみて、Control PlaneとPipedを起動するまでの手順をまとめてみた。普段はKubernetes(k8s)を触ったことがないので、業務でも使っているECSをPipedにデプロイしてみることにした(言葉の使い方が合っているのかわからないけど)。
PipeCDとは
PipeCDは、様々なサーバーレスプラットフォームで統一的なGitOpsを提供するProgressive Deliveryツールとある。CI/CDのうち、特にCD(Continuous Delivery)を担当していて、指定された場所に配置されたアーティファクトを実際にデプロイし、ユーザーに届ける役割を持っている。(参考:CyberAgent技術ブログ
これまで自分は、GitHub、JenkinsとAWS Codeシリーズを組み合わせたCI/CDパターンしか経験がなく、PipeCDの全貌がすぐにはイメージできなかった。でも、例えばあるサービスはk8s、別のサービスはECSを使っているような企業で、ノウハウを横断的に共有したい場合には、PipeCDを使うと便利なのかもしれない。
また、PipeCDはカナリアリリースやブルーグリーンデプロイメントという2つのデプロイ手法を採用している。これらはいずれも、システムの状態を監視し、設定した閾値を超えるメトリクスが検知された場合にすぐにロールバックできるという点で、プログレッシブデリバリーの概念を踏襲したリリース手法だ。
Progressive Delivery
PipeCDにはAutomated deplyment analysisという、メトリクスツールと連携して、メトリクスが設定した閾値を満たしていない場合に自動でロールバックする機能があります。これはまさにProgressive Deliveryのための機能です。
Bucketeerでは、Analysis用のテンプレートファイル (analysis-template.yaml) にリクエストのエラーレートが1%以上だと失敗となるような設定を書いています。このテンプレートをデプロイ設定ファイル (.pipe.yaml) から参照して、デプロイパイプラインに分析ステージを設定しています。
(引用: https://developers.cyberagent.co.jp/blog/archives/30573/)
自分はこれまで、デプロイ完了後に手動でエラーが出ていないかを確認していた(AWSマネジメントコンソールからCloudWatch Logsを見たり、該当ページへアクセスして動作確認したり)。でも、メトリクスに閾値を設定して、Control Plane上で全て完結できるのはすごく便利だと感じた。
Controll Plane and Piped
PipeCDは、Control PlaneとシングルバイナリからなるPipedエージェントの2つで構成されている。
- Piped:任意のプラットフォーム(k8s、ECS、Lambda、Cloud Runなど)にデプロイできて、設定されたGitHubリポジトリを監視する。リポジトリに変更が加えられると、Control PlaneにgRPCコールを送り、デプロイを開始する。
- Control Plane:Web UIを提供していて、認証/認可、デプロイの状態や履歴などを確認できる。Control Planeは、デプロイやアプリのモデルを保存するDataStoreや、ログを保存するFileStoreなど、5つのコンポーネントで構成されている。これらのコンポーネントを活用して、デプロイの状態やPipedから送られてくるシグナルを検知する。
実際に触ってみる
公式のチュートリアルに沿って、PipeCDを起動してみた。
Control Planeの起動
まずは、Control Planeを立ち上げる。
これがControll Brain。UIを提供していて、各プラットフォームに置いたPipedの現在の状態やデプロイ履歴などをみることができる。
ひとまずControl Planeを立ち上げることができた。
Pipedの起動
次は、シングルバイナリのPipedエージェントをローカルで実行してみる。
注意:インターネット接続されていないサーバーでの検証のため、クレデンシャル情報はそのまま公開しているが、実際の環境では適切な管理が必要。
|
|
Pipedを起動しようとすると、以下のエラーが発生した。
|
|
原因はpiped.yamlにありそう
|
|
解決策
公式Docを見て、pipedKeyFileではなく、pipeKeyDataを指定したらpipedを起動できた(https://pipecd.dev/docs-v0.49.x/user-guide/managing-piped/configuration-reference/)
- piped.yaml
|
|
起動ログ
|
|
起動後、Pipedがonlineになることが確認できた。
まとめ
今回、PipeCDのControl PlaneとPipedを実際に起動してみて、基本的な構成や設定方法を理解することができた。特に、Progressive Deliveryの概念や、メトリクスに基づいた自動ロールバック機能など、これまで手動で行っていた作業を自動化できる点が魅力的だと感じた。
今後は、実際にECSへのデプロイを試してみたり、他のプラットフォームでの利用も検討してみたい。
References
https://developers.cyberagent.co.jp/blog/archives/30573/
https://dev.classmethod.jp/articles/getting-started-pipecd/
https://zenn.dev/cadp/articles/piped-on-ecs?redirected=1
https://dev.classmethod.jp/articles/terraform-deploy-pipeline-tool/
https://developers.cyberagent.co.jp/blog/archives/41612/