CodePipeline を作っていてでハマったことの備忘録。
Terraform で管理する場合の注意点
- OAuth Token の差分が plan/apply のたびに発生する
- API get-CodePipeline が OAuth Token を取得できないため、Terraform や他のどんなツールを使っても冪等にできない
-
aws codepipeline get-codepipeline
を実行すると、****
という表示になって隠されている - 根本的な解決方法がなく、今も Open Issue になっている[1]
-
- API get-CodePipeline が OAuth Token を取得できないため、Terraform や他のどんなツールを使っても冪等にできない
- GitHub webhook も定義する場合は、GitHub で発行した OAuth Token の scope に
admin:repo_hook
も必要[2] - GitHub webhook は update できない
- 一度作成したリソースを修正したい場合は、 taint してから apply する
- Custom Action を定義できない
- これも API の制約で、 custom action を updade/get する手段がなく、 create/delete をする手段しか提供されていないため、どんなツールを使っても冪等に保つことができない
- ユースケース) Action Provider に Jenkins Custom を定義する場合など
- したがってコンソールか CLI をつかって定義することになる
AWS Console or CLI で管理する場合の注意点
- AWSコンソール上から作業できないワークフローがある
- (GitHub など外部の CVS の) OAuth トークンの登録 [3]
- 裏で暗黙的に作成されるリソースがある
- GitHub webhook
- GitHub のリポジトリに push されたときに AWS の Webhook 用エンドポイントを呼び出すためのもの
- CodePipeline の webhook
- GitHub => AWS CodePipeline を起動させるための Webhook エンドポイント
https://codepipeline.ap-northeast-1.amazonaws.com/...
-
aws codepipeline list-webhooks
で確認できる。試行錯誤しているとゴミが残りがち
- GitHub => AWS CodePipeline を起動させるための Webhook エンドポイント
- GitHub webhook
共通の注意点
- CodePipeline の定義を更新すると、実行中の action はすべてキャンセルされる
- (定義を変更せずに) CodePipeline で実行中のアクションを中止する方法はない
参考
- [1] https://github.com/terraform-providers/terraform-provider-aws/issues/2796
- [2] https://developer.github.com/v3/repos/hooks/#create-a-hook
- [3] https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/GitHub-create-personal-token-CLI.html
- [4] https://stackoverflow.com/questions/50925732/how-to-stop-an-execution-or-set-set-timeout-for-an-action-in-aws-codepipeline
- [5] https://qiita.com/hareku/items/90ed026256242c65e178