问题描述
想要在使用AWS CLI时,获取正在运行的实例的加密磁盘列表。他目前正在使用describe-volumes
命令,但是他希望能进一步筛选出仅适用于正在运行的实例(即排除已停止的实例)。
解决方案
请注意以下操作可能涉及版本差异,且操作前务必做好备份。
方案1:使用循环遍历实例和卷
这个方案使用了一个循环来遍历所有正在运行的实例,然后为每个实例获取关联的加密磁盘信息。
- 首先,确保你的AWS CLI已经配置好,并且你可以通过
aws ec2 describe-instances
获取实例的信息。 - 执行以下命令,获取所有正在运行的实例的ID:
bash
instances=$(aws ec2 describe-instances --region us-east-1 --filters Name=instance-state-name,Values=running --query "Reservations[*].Instances[0].InstanceId" --output text) - 使用以下命令来遍历实例和卷,并获取加密磁盘信息:
bash
for instance in $instances; do
aws ec2 describe-volumes --region us-east-1 --filters Name=encrypted,Values=true Name=attachment.status,Values=attached Name=attachment.instance-id,Values=$instance --query "Volumes[]"
done
上述命令将为每个实例获取其关联的加密磁盘信息。你可以根据需要进一步筛选出你感兴趣的信息。
方案2:使用脚本函数获取加密磁盘信息
这个方案使用一个Bash脚本函数来获取正在运行的实例的加密磁盘信息。
- 首先,确保你的AWS CLI已经配置好,并且你可以通过
aws ec2 describe-instances
获取实例的信息。 - 创建一个Bash脚本文件,例如
get_encrypted_volumes.sh
。 - 将以下代码复制到脚本文件中:
“`bash
#!/bin/bash
# AWS IAM Profile
AWS_IAM_PROFILE=”your-aws-iam-profile-here”
# AWS EBS status -> attached
AWS_EBS_ATTACHMENT_STATUS=”attached”
# Function to get AWS EBS volumes encryption state for instances
func_aws_ec2_ebs_list_encrypted() {
instances=$(aws ec2 describe-instances –region us-east-1 \
–filters Name=instance-state-name,Values=running \
–query “Reservations[*].Instances[0].InstanceId” \
–output text \
–profile ${AWS_IAM_PROFILE})
echo "# EBS Volumes attached to running EC2 Instances #"
for instance in ${instances}; do
count=$(aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \
--filters Name=attachment.status,Values=${AWS_EBS_ATTACHMENT_STATUS} Name=attachment.instance-id,Values=${instance} \
--query "Volumes[]" | jq -r '. | length')
name=$(aws ec2 describe-tags --profile ${AWS_IAM_PROFILE} \
--filters Name=resource-id,Values=${instance} Name=key,Values=Name \
--query Tags[].Value | jq -r '.[0]')
if [[ ${count} -gt 0 ]]; then
START=0
END=${count}
for ((i=START; i<END; i++)); do
encrypted=$(aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \
--filters Name=attachment.status,Values=${AWS_EBS_ATTACHMENT_STATUS} Name=attachment.instance-id,Values=${instance} \
--query "Volumes[]" | jq -r ".[$i].Encrypted")
volumeid=$(aws ec2 describe-volumes --profile ${AWS_IAM_PROFILE} \
--filters Name=attachment.status,Values=${AWS_EBS_ATTACHMENT_STATUS} Name=attachment.instance-id,Values=${instance} \
--query "Volumes[]" | jq -r ".[$i].VolumeId")
echo "EC2: ${instance} $name Volumes: $count EbsVolumeId: $volumeid Encrypted: $encrypted"
done
fi
done
}
# Call the function to get encrypted volumes
func_aws_ec2_ebs_list_encrypted
4. 保存脚本文件并授予执行权限:
bash
chmod +x get_encrypted_volumes.sh
5. 运行脚本文件以获取加密磁盘信息:
bash
./get_encrypted_volumes.sh
“`
脚本将遍历所有正在运行的实例,并为每个实例列出关联的加密磁盘信息。
这两种方案都可以帮助你获取正在运行的实例的加密磁盘列表。根据你的需求选择适合你的方案。