はじめに
- Amazon Linux 2023がGAとなりました。
- これまでAmazon Linux 2を使っていて個人的に地味に面倒だったのが、Amazon Linux 2はデフォルトでAWS CLI v1系がインストールされているのでAWS CLI v2系を使うためにはインストールし直す必要があったという点でした。
- Amazon Linux 2023では、デフォルトでAWS CLI v2系がインストールされているので、この入れ直しが不要になりました。
- ということで、ちょっとした検証でEC2インスタンスなどを立てるときに使っていたCloudFormationのテンプレートを更新します。
更新前
- このようにCloudFormationテンプレートの
Parameter
でAmazon Linux 2をデフォルトのAMIとして指定していました。(以下yamlは説明しやすくするために色々省略してます。)-
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2
の部分です。
-
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploys a new VPC with 3 public subnets and a EC2 instance for the bastion host in ap-northeast-1.
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: Basic configuration
Parameters:
- NamePrefix
- EC2Image
- KeyPairName
ParameterLabels:
NamePrefix:
EC2Image:
default: AMI ID for the bastion host
Parameters:
EC2Image:
Description: AMI ID of an EC2 instance.
Type: AWS::SSM::Parameter::Value<String>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2
- そして、EC2インスタンスの
UserData
でAWS CLI v1をアンインストールして、v2を再インストールしていました。(以下yamlは説明しやすくするために色々省略してます。)
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Sub "${EC2Image}"
InstanceType: t3.micro
AvailabilityZone: "ap-northeast-1a"
Tags:
- Key: "Name"
Value: !Sub "${NamePrefix}-instance"
KeyName: !Sub "${KeyPairName}"
SecurityGroupIds:
- !Ref SecurityGroupforEC2Instance
SubnetId: !Ref Subnet1
IamInstanceProfile: !Ref InstanceProfileForEC2Instance
UserData:
Fn::Base64: !Sub
- |
#!/bin/bash
yum remove awscli -y
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install -i /usr/local/aws-cli -b /usr/local/bin
aws configure set region ap-northeast-1
yum update -y
hostnamectl set-hostname ${Prefix}-instance
echo "preserve_hostname: true" >> /etc/cloud/cloud.cfg
- {
Prefix: !Ref NamePrefix
}
更新後
-
Parameter
で指定していたAMI IDを取得するパラメータをAmazon Linux 2023のものに変更します。-
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2
→Default: /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
-
Parameters:
EC2Image:
Description: AMI ID of an EC2 instance.
Type: AWS::SSM::Parameter::Value<String>
Default: /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
AMI IDを取得するパラメータはAWS Systems Managerもしくはこちらから確認可能です。/aws/service/ami-amazon-linux-latest/<alias>
の<alias>
部分を以下のどれかに置き換えます。
- For arm64 architecture (standard AMI):
al2023-ami-kernel-default-arm64
- For arm64 architecture (minimal AMI):
al2023-ami-minimal-kernel-default-arm64
- For x86_64 architecture (standard AMI):
al2023-ami-kernel-default-x86_64
- For x86_64 architecture (minimal AMI):
al2023-ami-minimal-kernel-default-x86_64
- そして、EC2インスタンスの
UserData
でAWS CLI v1のアンインストール、v2をインストールしていた部分を削除。スッキリしました。
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Sub "${EC2Image}"
InstanceType: t3.micro
AvailabilityZone: "ap-northeast-1a"
Tags:
- Key: "Name"
Value: !Sub "${NamePrefix}-instance"
KeyName: !Sub "${KeyPairName}"
SecurityGroupIds:
- !Ref SecurityGroupforEC2Instance
SubnetId: !Ref Subnet1
IamInstanceProfile: !Ref InstanceProfileForEC2Instance
UserData:
Fn::Base64: !Sub
- |
#!/bin/bash
aws configure set region ap-northeast-1
yum update -y
hostnamectl set-hostname ${Prefix}-instance
echo "preserve_hostname: true" >> /etc/cloud/cloud.cfg
- {
Prefix: !Ref NamePrefix
}
動作確認
- CloudFormationスタックを作成して、EC2インスタンスを起動し、SSHでログインしてみます。
- OSバージョンは以下の通り、Amazon Linux 2023。
$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
SUPPORT_END="2028-03-01"
- インストールされているAWS CLIのバージョンは2.2.19。
$ aws --version
aws-cli/2.9.19 Python/3.9.16 Linux/6.1.15-28.43.amzn2023.x86_64 source/x86_64.amzn.2023 prompt/off
- 無事に動作確認できたので、CloudFormationのテンプレートのメンテナンスは完了です。
追記(注意事項)
- Amazon Linux 2023の情報を調べていたらこんなブログを発見しました。
- セキュリティ周りのアップデートでAmazon Linux 2023へのSSH時に
ssh-rsa
署名が使えなくなったので、Teratermを使う場合は 5.0 beta 1以上を使う必要があるとのこと。 - Windowsユーザーですが、PowerShellのsshコマンドを使って確認しており問題なく接続できていたので気づきませんでしたが、改めてTeraterm(version 4.106)で接続してみると確かに認証が通りませんでした。要注意ですね。
まとめ
- Amazon Linux 2023がGAとなり、Amazon LinuxでAWS CLI v2を使いたいときにAWS CLI v1をアンインストールしてv2をインストールする必要がなくなりました。
- というわけで、個人の検証用CloudFormationテンプレートを更新しました。
- テンプレートはこちらに置いてあります。完全に自分用ですので、もしご利用の際は自己責任でお使いください。