概要
AWS CDKを利用して、EC2インスタンスにlatest_amazon_linux
を指定してmysqlをインストールしました。すると以下のエラーに。
sh-4.2$ mysql --version sh: mysql: command not found
こちらの原因と解決方法を紹介します。
前提と原因
CDKで指定した内容は以下でした。
user_data = ec2.UserData.for_linux()
user_data.add_commands(
"sudo yum update -y",
"sudo yum install -y mysql"
)
ec2_instance = ec2.Instance(
self, "sample-EC2Instance",
instance_type=ec2.InstanceType("t3.micro"),
machine_image=ec2.MachineImage.latest_amazon_linux(),
vpc=private_subnets_vpc,
security_group=ec2_security_group,
role=ec2_role,
key_name="sample_ssh",
vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_WITH_EGRESS),
user_data=user_data
)
上述のエラーメッセージから、EC2インスタンス内でMySQLクライアントがインストールされていないように思われます。UserData
があるので、EC2インスタンス作成時にMySQLクライアントをインストールされているはずなのだが...。
管理コンソールを確認してみると、EC2は正常に起動しています。
AMIを確認する
AMIはamzn-ami-hvm-2018.03.0.20231218.0-x86_64-gp2
とありました。
あれ、Amazon Linuxの最新ではない...?
latest_amazon_linux()
を選ぶと、Amazon Linux2の最新が得られると思っていたのだが...
Amazon Linux 1は2023 年 12 月 31 日にサポート終了しています。
これが原因で最新のMySQLパッケージが利用できないなどの状況になっていたと考えられます。
解決方法
以下のドキュメントを見ると、確かにMachineImageごとに指定するメソッドが違いました。
AmazonLinux2の最新版にした場合は
latest_amazon_linux2()
を選ぶ必要があるとのこと。
ということで、CDKファイルの
machine_image=ec2.MachineImage.latest_amazon_linux()
を
machine_image=ec2.MachineImage.latest_amazon_linux2()
としたらエラーが消えました。
以上!