簡體   English   中英

多個 nvme 的 AWS Terraform 自動化<x>

[英]AWS Terraform automation of multiple nvme<x>

我需要在 AWS 中使用 c5 實例類型,發現這破壞了我的 terraform 自動化。 與每個引導序列在/dev下提供一致設備名稱的 t2 實例不同。

resource "aws_volume_attachment" "ebs_att" {
  device_name = "/dev/xvdb"
  volume_id   = aws_ebs_volume.dev_build_data_dir.id
  instance_id = aws_instance.dev_build.id
  skip_destroy = "true"
}

在 ec2 實例上創建精確的/dev/xvd(x)設備。 易於自動化。

但是,在使用多個(設備)terraform 的 c5 實例上, /dev/xvd(x)設備轉換為/dev/nvme(x)並且在主機重啟之間不一致。 在我的情況下,我有多個卷要掛載。

從服務器端,我看不到任何可以用於自動化的東西:

[root@ip-192-168-1-110 ~]# ls /dev/disk/by-id/
nvme-Amazon_Elastic_Block_Store_vol027ba08**********
nvme-Amazon_Elastic_Block_Store_vol085cd16**********
nvme-Amazon_Elastic_Block_Store_vol0a3b21f**********
nvme-Amazon_Elastic_Block_Store_vol0a3b21f**********-part1
nvme-Amazon_Elastic_Block_Store_vol0d2b239**********
nvme-nvme.1d0f-766f6c3032376261303865343732643164303632-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001
nvme-nvme.1d0f-766f6c3038356364313630333864616665663835-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001
nvme-nvme.1d0f-766f6c3061336232316661386434623862313138-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001
nvme-nvme.1d0f-766f6c3061336232316661386434623862313138-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001-part1
nvme-nvme.1d0f-766f6c3064326232333935336235656637356130-416d617a6f6e20456c617374696320426c6f636b2053746f7265-00000001
[root@ip-192-168-1-110 ~]# ls /dev/disk/by-
by-id/   by-path/ by-uuid/
[root@ip-192-168-1-110 ~]# ls /dev/disk/by-uuid/
1f140d37-9663-48db-b32d-6cf5859b958f  388a99ed-9486-4a46-aeb6-06eaf6c47675
387f3e88-33ce-4eb9-8a2d-6c9a9233a15e  a6581468-80a8-4c54-bc5c-55842807ead6
[root@ip-192-168-1-110 ~]# ll /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 13 Nov  9 20:10 1f140d37-9663-48db-b32d-6cf5859b958f -> ../../nvme3n1
lrwxrwxrwx 1 root root 13 Nov  9 20:10 387f3e88-33ce-4eb9-8a2d-6c9a9233a15e -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 Nov  9 20:10 388a99ed-9486-4a46-aeb6-06eaf6c47675 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 13 Nov  9 20:13 a6581468-80a8-4c54-bc5c-55842807ead6 -> ../../nvme2n1
[root@ip-192-168-1-110 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0    8G  0 disk
└─nvme0n1p1 259:1    0    8G  0 part /
nvme1n1     259:2    0  150G  0 disk
nvme2n1     259:3    0   50G  0 disk
nvme3n1     259:4    0    8G  0 disk

Terraform 代碼(對於一個卷資源):

resource "aws_volume_attachment" "ebs_att" {
  device_name = "/dev/xvdb"
  volume_id   = aws_ebs_volume.dev_build_data_dir.id
  instance_id = aws_instance.dev_build.id
  skip_destroy = "true"
}

resource "aws_ebs_volume" "dev_build_data_dir" {
  availability_zone = var.AvailabilityZone
  size              = var.EbsDataVolumeSize
}

用戶數據腳本(對於一個卷資源):

#!/bin/bash
if ! file -s /dev/nvme1n1 | grep 'XFS' &> /dev/null; then
  mkfs -t xfs /dev/nvme1n1
fi
if [ ! -d "/opt/home/user/data" ]; then
  mkdir -p /opt/home/user/data
fi
volume_uuid_nvme1n1=$(blkid | grep nvme1n1 |cut -d'"' -f2)
if ! grep $volume_uuid_nvme1n1 /etc/fstab &> /dev/null; then
  echo "UUID=$volume_uuid_nvme1n1 /opt/home/user/data  xfs  defaults,nofail  0  2" | tee -a /etc/fstab
fi
if grep $volume_uuid_nvme1n1 /etc/fstab &> /dev/null; then
  mount -a
  chown -R user:user /opt/home/user/data
fi

使用 Terraform 有沒有人有任何解決方案可以讓我以編程方式識別卷並安裝它們?

想通了,我不知道我也可以通過 id 掛載。 所以我最終做的是獲取卷 ID 並將其傳遞給變量:nvme-Amazon_Elastic_Block_Store_vol${data_ebs_id:4}。 這樣我就可以在 /etc/fstab 中添加類似這一行的內容:nvme-Amazon_Elastic_Block_Store_vol${data_ebs_id:4}" /opt/home/user/data xfs defaults,nofail 0 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM