EC2 Image Builderのパイプラインをアップデートする方法

# EC2 Image Builderとは
AMI作成を自動化してくれるツール（パッケージインストール等をやってくれる）。

[Developers.IO:EC2のイメージ作成を劇的に効率化するEC2 Image Builderが発表されました！ #reinvent](https://dev.classmethod.jp/cloud/aws/ec2-image-builder/)
[Qiita:EC2 Image Builder を触ってみました。](https://qiita.com/kaba-chan/items/fe57169f0144789cdd21)

# パイプラインのアップデートできない
早速使ってみたのだが、
AMI作成用のパイプライン（Image pipelines）を作った後、コンソールを見てもパッケージ（ビルドコンポーネント）の追加方法が分からなかった。
後で追加したいパッケージが増えたらどうすんの？
正確に言うと、レシピのNew Versionは作れるのだが、パイプラインに反映できない（なんじゃこりゃ）。

# パイプラインのアップデートできた

コンソールだけだとできなくて、AWS CLIだとできる事が判明[^1]。

[update-image-pipeline](https://docs.aws.amazon.com/cli/latest/reference/imagebuilder/update-image-pipeline.html)
[get-image-pipeline](https://docs.aws.amazon.com/cli/latest/reference/imagebuilder/get-image-pipeline.html)

＜手順＞

アップデート前はこんな感じ
![Screenshot from 2019-12-13 23-39-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541822/4cb41d9c-9138-036e-e188-4cd7bd5786d2.png)

1. まずはコンソールから、レシピのNew Versionを作る。  
   Image Builderコンソール→Recipes  
![Screenshot from 2019-12-14 02-37-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541822/58bbf182-5dbe-7a2f-6377-34e75bf9a9a7.png)
   対象のレシピを選択して、Actions→Create New Version   
![Screenshot from 2019-12-13 23-40-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541822/fb5a69ba-2e80-26ff-442e-35b0a6177af1.png)
   設定をしていく。※「Version」の入力を忘れないように。
![Screenshot from 2019-12-13 23-41-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541822/af47322e-14ed-edde-3f9b-55dd258a9aee.png)
   レシピの作成が終わったところ。
![Screenshot from 2019-12-13 23-42-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541822/784bd515-928e-da41-0228-ec30d0e27fe2.png)

2. AWS CLIで「Image pipelines」の設定を取得。  

    ```bash
    aws imagebuilder get-image-pipeline \
    --image-pipeline-arn \
    <Image pipelinesのARN> \
    --query 'imagePipeline.{imageRecipeArn:imageRecipeArn,infrastructureConfigurationArn:infrastructureConfigurationArn}'
    ```

    ```json
    {
        "imageRecipeArn": "arn:aws:imagebuilder:<Region>:<accountID>:image-recipe/<RecipeName>/1.0.0",
        "infrastructureConfigurationArn": "arn:aws:imagebuilder:<Region>:<accountID>:infrastructure-configuration/<PipelineName>-infrastructureconfiguration-xxxxxxxxxxxx"
    }
    ```


    ```bash
    # エラーが出たら、AWS CLIのバージョンが低いかも（コマンドが存在しないのでエラーになる）。  
    usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
    To see help text, you can run:
    
      aws help
      aws <command> help
      aws <command> <subcommand> help
    aws: error: argument command: Invalid choice, valid choices are:
    ```

    ```bash
    # 少なくとも 1.16.302 で動く事を確認。
    $ aws --version
    aws-cli/1.16.302 Python/3.7.4 Linux/5.3.12-1-MANJARO botocore/1.13.38
    $ aws imagebuilder help
    IMAGEBUILDER()                                                  IMAGEBUILDER()
    
    
    
    NAME
           imagebuilder -
    
    DESCRIPTION
           Amazon  Elastic Compute Cloud Image Builder provides a one-stop-shop to
           automate the image management processes.  You  configure  an  automated　
    ```

3. AWS CLIで「Image pipelines」のレシピを更新する。  

    ```bash
    aws imagebuilder update-image-pipeline \
    --image-pipeline-arn \
    <Image pipelinesのARN> \
    --infrastructure-configuration-arn \
    <2.で取得した"infrastructureConfigurationArn"> \
    --image-recipe-arn \
    <1.で新しく作ったRecipesのARN>
    ```

    ```json
    {
     "requestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    ```

4. AWS CLIで「Image pipelines」の設定を確認（2. と同じコマンド）。

    ```bash
    aws imagebuilder get-image-pipeline \
    --image-pipeline-arn \
    <Image pipelinesのARN> \
    --query 'imagePipeline. 
 {imageRecipeArn:imageRecipeArn,infrastructureConfigurationArn:infrastructureConfigurationArn}'
    ```

    ```json
    {
        "imageRecipeArn": "arn:aws:imagebuilder:<Region>:<accountID>:image-recipe/<RecipeName>/1.0.1",
        "infrastructureConfigurationArn": "arn:aws:imagebuilder:<Region>:<accountID>:infrastructure-configuration/<PipelineName>-infrastructureconfiguration-xxxxxxxxxxxx"
    }
    ```
※imageRecipeArnの末尾のバージョンが上がってる

コンソールでもアップデートできてる事を確認！
![Screenshot from 2019-12-13 23-45-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541822/b00eac32-3381-41a0-49ac-2b2d817690d1.png)

[^1]: AWSサポートに問い合わせた結果、APIはあるが現時点（2019/12/03）で、コンソールから操作できないとのこと（こういうパターンはまれによくある）。