5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSの起動 templateをCLIで更新

Last updated at Posted at 2019-12-19

サーバの実行環境はDockerコンテナで管理するが当たり前になった昨今ですが、数年前にサービスインして保守フェーズの案件ではEC2インスタンスで直接サービスを動かす構成は、まだまだ、現役です。

今回は、オートスケーリンググループで起動させるEC2インスタンスを起動テンプレートで管理しており、起動テンプレートのバージョンを上げて、対象のAMIを新しいものに変更する作業を AWS CLIで行います。

使用する環境変数名

今回は AMI と EBSのスナップショットIDを新しくします。

環境変数名 値の意味
TEMPLATE_NAME 更新したいテンプレート名
TEMPLATE_ID TEMPLATE_NAME の launch-template-id
PREV_TEMPLATE_VER 作業時点でのデフォルトバージョン
TEMPLATE_DESC 起動テンプレートの新しいバージョンの説明
AMI_ID 起動テンプレートの新しいバージョンが利用する AMI の ID
EBS_SNAPSHOT_ID 起動テンプレートの新しいバージョンが利用する EBSのスナップショットID

作業コマンド


# 起動テンプレートのIDを取得
$ export TEMPLATE_NAME="my_template"
$ export TEMPLATE_ID=$( aws ec2 describe-launch-templates--launch-template-names ${TEMPLATE_NAME} | \
    jq -r '.LaunchTemplates[].LaunchTemplateId' \
)
$ echo $TEMPLATE_ID
lt-1234567890abcdef
# 起動テンプレートのデフォルトバージョンを取得
$ export PREV_TEMPLATE_VER=$( aws ec2 describe-launch-templates --launch-template-names ${TEMPLATE_NAME} | \
    jq -r '.LaunchTemplates[].DefaultVersionNumber' \
)
$ echo $PREV_TEMPLATE_VER
7
# 今の起動テンプレートをファイルに保存しておく
$ aws ec2 describe-launch-template-versions \
    --launch-template-id ${TEMPLATE_ID} \
    --versions ${PREV_TEMPLATE_VER} \
    > launch-template-befor.json
# AMIを指定して起動テンプレートの新しいバージョンを作成する
export NEW_TEMPLATE_JSON=$(aws ec2 create-launch-template-version \
    --launch-template-id ${TEMPLATE_ID} \
    --version-description "${TEMPLATE_DESC}" \
    --source-version ${PREV_TEMPLATE_VER} \
    --launch-template-data '{"BlockDeviceMappings":[{"DeviceName": "/dev/xvda","Ebs":{"DeleteOnTermination": true,"SnapshotId":"'${EBS_SNAPSHOT_ID}'","VolumeSize": 30,"VolumeType": "gp2"}}],"ImageId":"'${AMI_ID}'"}')
# 新しいバージョン番号を取得
export NEW_TEMPLATE_VER=$(echo ${NEW_TEMPLATE_JSON} | jq -r '.LaunchTemplateVersion.VersionNumber')
# 新しいバージョンをファイルに保存しておく
$ aws ec2 describe-launch-template-versions --launch-template-id ${TEMPLATE_ID} --versions ${NEW_TEMPLATE_VER} > launch-template-after.json

aws ec2 create-launch-template-version の引数 --launch-template-data の値は 公式ドキュメント を参照してください。

差分確認

作業前後で aws ec2 describe-launch-template-versions の結果を比較して、想定した変更差分であることを確認します。

$ diff launch-template-befor.json launch-template-after.json 
6,8c6,8
<             "VersionNumber": 7,
<             "VersionDescription": "change instance to t2.medium",
<             "CreateTime": "2018-12-14T04:19:43.000Z",
---
>             "VersionNumber": 10,
>             "VersionDescription": "update app. ver 1.2.3",
>             "CreateTime": "2019-12-19T06:23:15.000Z",
10c10
<             "DefaultVersion": true,
---
>             "DefaultVersion": false,
21c21
<                             "SnapshotId": "snap-01234567890123456",
---
>                             "SnapshotId": "snap-abcdefabcdefabcde",
40c40
<                 "ImageId": "ami-01234567890123456",
---
>                 "ImageId": "ami-abcdefabcdefabcde",
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?