【AWS】新UIのCodePipelineで「手動トリガー」「自動トリガー」を切り替える方法

# 概要
AWS CodePipelineを利用して、GithubのマージをトリガーにしてCodebuildを走らせる設定を使っていました。
しかし、検証環境であれば自動で走るのが嬉しいものの、本番環境では手動リリースしたいことがあります。

以前までは、CodePipelineのUIのラジオボタンで自動か手動が選べたのですが、数ヶ月？かいつからかUIが変わって無くなってしまいました。

自力でなんとか切り替え方法がわかったので紹介します。

### 前提：CodePipeline設定
- Sourceのアクションプロバイダーは GitHub バージョン2 を利用
- Buildのアクションプロバイダーは AWSCodebuild を利用
- CodePipeline と GitHub の連携は CodeStarSourceConnection を使用
    - Github側の AWS Connector for GitHub は以前からインストール済

## CLIでパイプラインの情報を取得する

CLIでパイプライン名を指定して以下コマンドを実行すると、パイプラインの情報が取得できます。
現状、`"DetectChanges": "true"`となっていますので、これはトリガーによる自動実行がオンになっていることがわかります。

```json
$ aws codepipeline get-pipeline --name xxxxx

{
    "pipeline": {
        "name": "xxxxx",
        "roleArn": "arn:aws:iam::xxxxx",
        "artifactStore": {
            "type": "S3",
            "location": "xxxxx"
        },
        "stages": [
            {
                "name": "Source",
                "actions": [
                    {
                        "name": "Source",
                        "actionTypeId": {
                            "category": "Source",
                            "owner": "AWS",
                            "provider": "CodeStarSourceConnection",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "BranchName": "xxxxx",
                            "ConnectionArn": "xxxxx",
                            "DetectChanges": "true",
                            "FullRepositoryId": "xxxxx",
                            "OutputArtifactFormat": "CODE_ZIP"
                        },
                        "outputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "inputArtifacts": [],
                        "region": "ap-northeast-1",
                        "namespace": "SourceVariables"
                    }
                ]
            },
            {
                "name": "Build",
                "actions": [
                    {
                        "name": "Build",
                        "actionTypeId": {
                            "category": "Build",
                            "owner": "AWS",
                            "provider": "CodeBuild",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "ProjectName": "xxxxx"
                        },
                        "outputArtifacts": [
                            {
                                "name": "BuildArtifact"
                            }
                        ],
                        "inputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "region": "ap-northeast-1",
                        "namespace": "BuildVariables"
                    }
                ]
            }
        ],
        "version": 4,
        "executionMode": "SUPERSEDED",
        "pipelineType": "V1"
    },
    "metadata": {
        "pipelineArn": "xxxx",
        "created": "xxxx",
        "updated": "xxxx"
    }
}
```

ちなみに、このときCodePipelineのUIは以下です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/9d5282d3-1efc-563e-250f-0444ab7c3960.png)


## 手動トリガーにしたい場合

手動リリースにしたい場合は、まず以下の「トリガーの編集」 -> 「トリガーの追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/d3b2a460-cf1b-3b22-ed9d-6752bc836d9d.png)

ここで、該当のソースを選択した後「変更を検出しない」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/190ddc4c-3dc8-a618-9048-51c1107123c9.png)

そして「完了」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/621d5724-bc85-7790-f15b-6850421972ea.png)

「完了」を押した後も「トリガーなし」です。何も変わってないようですが安心して下さい。
これで右上の「保存する」をクリックしてパイプラインの変更を保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/51fb6224-7c59-8653-6732-9bff4a4cfe60.png)

UI上では、先ほどと何も変わっていないように見えます。

しかし、、、！！！
上述のCLIコマンドを打つと、、

```json
$ aws codepipeline get-pipeline --name xxxxx

{
    "pipeline": {
        "name": "xxxxx",
        "roleArn": "arn:aws:iam::xxxxx",
        "artifactStore": {
            "type": "S3",
            "location": "xxxxx"
        },
        "stages": [
            {
                "name": "Source",
                "actions": [
                    {
                        "name": "Source",
                        "actionTypeId": {
                            "category": "Source",
                            "owner": "AWS",
                            "provider": "CodeStarSourceConnection",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "BranchName": "xxxxx",
                            "ConnectionArn": "xxxxx",
                            "DetectChanges": "false",
                            "FullRepositoryId": "xxxxx",
                            "OutputArtifactFormat": "CODE_ZIP"
                        },
                        "outputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "inputArtifacts": [],
                        "region": "ap-northeast-1",
                        "namespace": "SourceVariables"
                    }
                ]
            },
            // 略
```

なんと`"DetectChanges": "false"`とあります！！！

`false`に変更されているのです。自動リリースがオフになったということです。
UI上では何も変わっていないように見えますが、ちゃんと設定は変わっているのです...
これは分かりづらい。


## 自動トリガーにしたい場合

トリガーの編集画面で「フィルターなし」を選ぶと、自動リリースになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/18345603-411c-af4c-71c4-69520e5cd0c8.png)

ここが一番分かりづらいのですが、
この時も、トリガーの箇所は「トリガーなし」とあり。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/6a488c6c-2dc2-b4b2-5e5d-935a35552b0d.png)

しかし、CLIコマンドでパイプラインの情報を見ると、`"DetectChanges": "true"`に切り替わっているのです。

とほほ...笑

うーむ。ソースアクションには`CodeStarSourceConnection`以外にも色々方法があるので、おそらくどこかを分かりやすくした結果の弊害なのかな？と推測。

## 新UIに変わって何もいじってないとどっちになってる？

当初、上述のパイプライン情報取得のコマンドを打っても、`"DetectChanges"`の項目がありませんでした。
しかし、この場合は、今まで設定していた方が裏で残っているっぽかったです。

つまり、以前のラジオボタン方式で「自動で検出する」みたいなのを選んでいる場合は、`"DetectChanges": "true"`であり、選んでいなかった場合は`false`になっています。さすがに勝手に自動とか手動とか意図せず変わることはなさそうですが、そもそもCLIで出てこなかったのがまた分かりづらいです(笑)

一度「トリガーの編集」でパイプラインの設定を保存した瞬間から、`"DetectChanges"`の項目がCLIで表示されるようになり、明示的に現在`true`なのか`false`なのかがわかるようになりました。

従来のように、UIのラジオボタンで自動・手動が切り替わる方式で、今どちらが選択されているのかすぐにわかる方がよかったですね〜。
またそのうちUIが変わるかな...？（期待）

## （参考）

AWS公式ドキュメントとしては、この辺が今回の記事に近い内容になりますが、明確に手動トリガーにしたい場合とUIの変更点については特に記載がないようででした。ご参考まで。

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/pipelines-about-starting.html#change-detection-methods

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/action-reference-CodestarConnectionSource.html

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/pipelines-filter.html

> DetectChanges
必須: いいえ
> 設定したリポジトリとブランチで新しいコミットが行われたときに、パイプラインを自動的にスタートするように制御します。未指定の場合、デフォルト値は true となり、フィールドはデフォルトで表示されません。このパラメータの有効な値:
> true: 新しいコミットでパイプライン CodePipeline を自動的に開始します。
false： CodePipeline 新しいコミットではパイプラインを開始しません。

なお、以下の記事は、今回の私と似ているかもしれません。
CLIから`update`コマンドでも変更が可能だそうです。

https://techblog.nhn-techorus.com/archives/24261