pipeCDを触ってみる。
https://github.com/pipe-cd/tutorial/blob/main/content/ja/30-install/01-git.md
k8sは触ったことがないので、業務でも使っているECSをPipedにデプロイしてみる(言葉の使い方が合っているのかわからない)
PipeCDとは
様々なサーバーレスプラットフォームで統一的なGitOpsを提供するProgressive Deliveryツールとある。CI/CDと略されるうちのCDを担当していて、特定の場所に配置されたアーティファクトを実際にデプロイし、ユーザーへ届けるContinuous Deliveryを担当しているツールである。(https://www.cyberagent.co.jp/way/list/detail/id=30032)
Github, JenkinsとAWS Code系サービスを組み合わせたパターンや、GithubとAWS Code系サービスを組み合わせたCI/CDパターンしか経験がないのであまり想像がつかない。が、あるサービスはk8s, 他のサービスはECSを使っているというような会社で、ノウハウを横断的に共有したいときは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/)
自分はデプロイ完了後、エラーが出ていないかの確認を手動で行っている(マネジメントコンソールからCloudWatchLogsを見たり、該当ページへアクセスして動作確認したりしている)ので、メトリクスに閾値を設定してControll Plainで全て完結できるのは嬉しいなと思った。
Controll Plain and Piped
pipeCDはControll PlainとシングルバイナリからなるPipedエージェントの2つで構成されている。
Pipedは任意のプラットフォーム(k8s, ECS, lambda, Cloud Run等)に搭載することができ、yamlに登録したgithub repoを監視している。もしrepoに変更が加えられると、コントロールプレーンにgRPCコールを送ってデプロイを始める。
コントロールプレーンはWebUIを提供していて、認証/認可、デプロイの状態や履歴等をみることができる。
Controll Plainは、デプロイやアプリのモデルを保存するDataStoreやログを保存するFileStoreなど、5つのコンポーネントを持つadmin画面を提供している。
それぞれのコンポーネントを駆使してデプロイの状態やpipedから送られてくるシグナルを検知したりしているらしい。
Tutorialを進める
これがControll Brain。UIを提供していて、各プラットフォームに置いたPipedの現在の状態やデプロイ履歴などをみることができる。
これがControl PlainのUIになる。UIを提供していて、各プラットフォームに置いたPipedの現在の状態やデプロイ履歴などをみることができる。
ひとまずControl Plainを立ち上げることができた。
次は、シングルバイナリのPipedエージェントをローカルで実行してみる。
インターネット接続はされてないサーバーなのでクレデンシャルはそのまま公開して大丈夫だろう。
|
|
pipedの実行するとエラーが出る。
|
|
なんかここら辺に原因がありそう
|
|
公式Docを見て、pipedKeyFileではなく、pipeKeyDataを指定したらpipedを起動できた(https://pipecd.dev/docs-v0.49.x/user-guide/managing-piped/configuration-reference/)
- piped.yaml
|
|
起動時のログ
|
|
起動したらpipedがonlineになる。
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/