Image Builderでストレージのサイズ変更&暗号化を行う方法

ImageBuilderで作成するAMIのボリュームサイズを変更し、スナップショットを暗号化する方法を説明します。
2019.12.20

Image BuilderでAMIを作成するために起動される作業用インスタンスにアタッチされるEBSは、デフォルトでは容量8GBで暗号化なしの状態となっています。

しかし、レシピに含まれるコンポーネントの内容次第では、8GBでは足りないことがあるかもしれません。 また、運用ルールの都合上スナップショットの暗号化をする必要があるかもしれません。

これらの設定は現時点(2019/12/20)ではマネジメントコンソール上から指定することはできず、AWS CLIを利用する必要があります。 この記事では、その方法を紹介したいと思います。

手順

作業用インスタンスの設定はレシピに含まれます。そのため、レシピの作成をAWS CLIを利用して行うことになります。 その他はマネジメントコンソールから作業することができます。

下準備

カスタムコンポーネントを利用する必要がある場合、事前に作成します。これはマネジメントコンソールからの作成で大丈夫です。

EBS暗号化用のキーを用意します。デフォルトのキーを利用しても問題ありません。この記事ではデフォルトのキーを利用して説明しています。

Image Builderのレシピを作成する

awscliを利用して、以下のコマンドを実行します。今回は以下の設定をしてみました。

  • EBSを暗号化しボリュームサイズを8→16GBに拡張。
  • ビルドコンポーネントにAmazon Corretto 8 JREPython 3を指定。
  • テストにsimple boot testを指定。
aws imagebuilder create-image-recipe \
--name ebs-snapshot-encryption-and-enlarge-storage-size \
--semantic-version 0.0.1 \
--parent-image "arn:aws:imagebuilder:ap-northeast-1:aws:image/amazon-linux-2-x86/2019.11.21" \
--block-device-mappings='[{"deviceName": "/dev/xvda","ebs":{"encrypted":true,"kmsKeyId":"alias/aws/ebs","volumeSize":16,"volumeType":"gp2"}}]' \
--components '[{"componentArn":"arn:aws:imagebuilder:ap-northeast-1:aws:component/python-3-linux/1.0.0"},{"componentArn":"arn:aws:imagebuilder:ap-northeast-1:aws:component/amazon-corretto-8-jre/1.0.0"},{"componentArn": "arn:aws:imagebuilder:ap-northeast-1:aws:component/simple-boot-test-linux/1.0.0"}]'

--block-device-mappingsに指定するjson(整形後)

[
  {
    "deviceName": "/dev/xvda",
    "ebs": {
      "encrypted": true,
      "kmsKeyId": "alias/aws/ebs",
      "volumeSize": 16,
      "volumeType": "gp2"
    }
  }
]

--componentsに指定するjson(整形後)

[
  {
    "componentArn": "arn:aws:imagebuilder:ap-northeast-1:aws:component/python-3-linux/1.0.0"
  },
  {
    "componentArn": "arn:aws:imagebuilder:ap-northeast-1:aws:component/amazon-corretto-8-jre/1.0.0"
  },
  {
    "componentArn": "arn:aws:imagebuilder:ap-northeast-1:aws:component/simple-boot-test-linux/1.0.0"
  }
]

スナップショットの暗号化をしたい場合、--block-device-mappingsオプションを利用する必要があります。 encryptedtrueを指定し、kmsKeyIdに暗号化に利用するキーのKMS Key IDを指定します。 上記の場合、デフォルトの暗号化キーが設定されています。

EBSの容量を変更したい場合、volumeSizeにEBSボリュームサイズを指定します。

余談ですが、マネジメントコンソール上では「Build components」「Tests」の2つに分かれていますが、CLIの場合--componentsオプションにまとめて指定します。

その他のオプションについては、公式ドキュメントを確認してください。

コマンド実行に成功すると、マネジメントコンソールからレシピを確認することができます。

AMIの作成

上記で作成したレシピをもとにパイプラインを作成します。パイプラインはマネジメントコンソールから作成して大丈夫です。 パイプラインが作成できたら、実行してみましょう。

作成されたAMIのスナップショットの情報はこちら。

暗号化され、容量が16GiBになっていることが確認できました。