EC2 运维 CLI:创建 AMI 与启动模板
January 7, 2024About 1 min
EC2 运维 CLI:创建 AMI 与启动模板
两段平时打包专用服务器镜像时反复用到的 CLI:从实例烤一个 AMI,以及用启动模板固化实例配置。资源 ID 都换成了占位符。
创建 AMI
aws ec2 create-image 从一个运行中的实例打 AMI,返回的 JSON 里含新 AMI 的 ID。用 --query 'ImageId' --output text 直接把 AMI ID 取出来存到变量:
ami_id=$(aws ec2 create-image \
--instance-id i-0123456789abcdef0 \
--name "my-dedicated-server" \
--description "An example AMI" \
--query 'ImageId' \
--output text)
启动模板
启动模板把子网、AMI、实例类型、磁盘、标签这些固化成一份配置,启动实例时直接引用,免得每次手填。模板支持多版本,可以指定默认版本。
创建启动模板
create-launch-template 用 --launch-template-data 指向一个 JSON 文件来描述实例配置:
aws ec2 create-launch-template \
--launch-template-name my-server-template \
--version-description my-server-template \
--tag-specifications 'ResourceType=launch-template,Tags=[{Key=template-name,Value=my-server}]' \
--launch-template-data file://instance-data.json
instance-data.json 示例(30G gp3 根卷、分配公网 IP、t3.large、单核双线程):
{
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeSize": 30,
"VolumeType": "gp3"
}
}
],
"NetworkInterfaces": [
{
"AssociatePublicIpAddress": true,
"DeviceIndex": 0,
"SubnetId": "subnet-0123456789abcdef0"
}
],
"ImageId": "ami-0123456789abcdef0",
"InstanceType": "t3.large",
"TagSpecifications": [
{
"ResourceType": "instance",
"Tags": [
{
"Key": "Name",
"Value": "my-dedicated-server"
}
]
}
],
"CpuOptions": {
"CoreCount": 1,
"ThreadsPerCore": 2
}
}
基于已有版本创建新版本
create-launch-template-version 从某个版本派生新版本,常见用途是换个新 AMI ID:
aws ec2 create-launch-template-version \
--launch-template-id lt-0123456789abcdef0 \
--version-description my-server-template \
--source-version 1 \
--launch-template-data file://instance-data.json
改默认版本
把指定版本设为模板的默认版本(后续不显式指定版本时就用它):
aws ec2 modify-launch-template \
--launch-template-id lt-0123456789abcdef0 \
--default-version 2