terraform - 使用 Terraform 在 EC2 Windows 实例中初始化 EBS 卷
问题描述
我有一个自定义 Windows AMI,每当我使用它创建一个新实例时,我想根据要求自动初始化一个额外的驱动器。我正在尝试使用 Terraform 来做到这一点。
我得到了驱动器,但必须手动初始化它。
创建和 ec2 实例并附加卷。
resource "aws_instance" "example" {
ami = "ami-098792953bbd38e18"
instance_type = "t2.micro"
}
resource "aws_ebs_volume" "ebs-volume-1" {
availability_zone = "eu-west-1a"
size = 160
type = "st1"
tags {
Name = "more volume"
}
}
resource "aws_volume_attachment" "ebs-volume-1-attachment" {
device_name = "/dev/sdf"
volume_id = "${aws_ebs_volume.ebs-volume-1.id}"
instance_id = "${aws_instance.example.id}"
}
解决方案
我在 Ubuntu 18 上这样做,所以你必须修改,但把它放在这里,因为这不是显而易见的 imo。
### instance.tf
resource "aws_instance" "main" {
user_data = data.local_file.user_data
# ...
}
### user_data.sh
DEVICE="/dev/xvdf"
# Get device id
DEVICE_FS=`sudo lsblk -o UUID -d ${DEVICE} -n`
# Create a file system on the volume if one does not already exist
if [ "`echo -n $DEVICE_FS`" == "" ] ; then
mkfs.ext4 ${DEVICE}
fi
# Create a mount point directory
sudo mkdir /data
# Backup fstab
sudo cp /etc/fstab /etc/fstab.orig
# Setup auto mount on reboot
echo "UUID=${DEVICE_FS} /data xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab
# Unmount
sudo umount /data
# Mount and exit on error
sudo mount -a
if [ $? -eq 0 ]
then
echo "Mounted"
else
exit 1
fi
推荐阅读
- python - 如何合并 JSON 数组和数组
- java - 如果存在,Scala如何将“无”排序到底部并选择每个组中的第一行?
- android - MP 图表标签经常重复,不允许分组
- sql - 将光标中的结果假脱机到表格中
- python - DPI-1050:Oracle 客户端库的版本为 0.0,但需要 11.2 或更高版本
- c++ - 检索通过 C++ 中的 post 请求发送的文件
- rust - 在rust中创建一个连接hashmap键的字符串
- apache-spark - 如何修复pyspark中的“方案没有文件系统:gs”?
- r - 使用 deSolve R 包中的 ode() 函数时,在每个集成步骤中提取局部截断误差 (LTE) 的值
- c++ - 如何计算选择排序中的比较?