aws-cli を使用して、AutoScaling のAMIを差し替えてみます。
AutoScaling の AMI を差し替えるには、新しい起動設定を作成して、AutoScalingGroup の起動設定を変更します。
既存の起動設定をコピーして「起動設定の名称」と「AMI-ID」だけを変更したかったので、以下のようなシェルをつくりました。
[root@localhost packer]# cat as_config_copy.sh #!/bin/bash CRT_CONFIG_NAME="web01-001" NEW_CONFIG_NAME="web01-002" NEW_AMI_ID="ami-6869aa05" # 現在の起動設定をJSON形式で取得 aws autoscaling describe-launch-configurations \ --launch-configuration-names ${CRT_CONFIG_NAME} \ --output json \ | jq .LaunchConfigurations[0] \ > /tmp/xxx.tmp1 # 不要な情報を削除 cat /tmp/xxx.tmp1 \ | egrep -v '^ *"RamdiskId"|^ *"KernelId"|^ *"LaunchConfigurationARN"|^ *"CreatedTime"|^ *"ClassicLinkVPCSecurityGroups"' \ > /tmp/xxx.tmp2 # 起動設定の名称とAMI-IDを変更 cat /tmp/xxx.tmp2 \ | sed -e "s/^\( *\"LaunchConfigurationName\": \)[^ ]*$/\1\"${NEW_CONFIG_NAME}\",/" \ | sed -e "s/^\( *\"ImageId\": \)[^ ]*$/\1\"${NEW_AMI_ID}\",/" \ > /tmp/xxx.tmp3 # 新しい起動設定を作成 new_config=`cat /tmp/xxx.tmp3` eval "aws autoscaling create-launch-configuration --cli-input-json '${new_config}'" rm /tmp/xxx.tmp1 rm /tmp/xxx.tmp2 rm /tmp/xxx.tmp3 exit 0このシェルを使用して、AutoScaling のAMIを差し替えてみます。
まず、現在の起動設定と、AutoScalingGroupを確認します。
[root@localhost ~]# aws autoscaling describe-launch-configurations --query "LaunchConfigurations[].[LaunchConfigurationName,ImageId]" ------------------------------- |DescribeLaunchConfigurations | +------------+----------------+ | web01-001 | ami-5d901b4a | +------------+----------------+ [root@localhost ~]# aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[].[AutoScalingGroupName,LaunchConfigurationName]" --------------------------- |DescribeAutoScalingGroups| +-----------+-------------+ | WebGroup | web01-001 | +-----------+-------------+
[root@localhost ~]# bash ./packer/as_config_copy.sh [root@localhost ~]# aws autoscaling describe-launch-configurations --query "LaunchConfigurations[].[LaunchConfigurationName,ImageId]" ------------------------------- |DescribeLaunchConfigurations | +------------+----------------+ | web01-001 | ami-5d901b4a | | web01-002 | ami-6869aa05 | +------------+----------------+
[root@localhost ~]# aws autoscaling update-auto-scaling-group --auto-scaling-group-name "WebGroup" --launch-configuration-name "web01-002" [root@localhost ~]# aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[].[AutoScalingGroupName,LaunchConfigurationName]" --------------------------- |DescribeAutoScalingGroups| +-----------+-------------+ | WebGroup | web01-002 | +-----------+-------------+
root@localhost ~]# aws autoscaling delete-launch-configuration --launch-configuration-name "web01-001" [root@localhost ~]# aws autoscaling describe-launch-configurations --query "LaunchConfigurations[].[LaunchConfigurationName,ImageId]" ------------------------------- |DescribeLaunchConfigurations | +------------+----------------+ | web01-002 | ami-6869aa05 | +------------+----------------+
起動中のEC2インスタンスは、古いままなので、
一度、EC2インスタンスをSTOPすれば、新しいAMIでEC2インスタンスが起動します。