amazon-web-services - 如何在不使用 AWS CLI 删除当前附加的安全组的情况下将新的安全组分配给 EC2 实例?
问题描述
将安全组附加到正在运行的 EC2 实例的 AWS CLI 命令如下。
aws ec2 modify-instance-attribute --instance-id i-12345 --groups sg-12345 sg-67890
但上述命令将删除当前附加的安全组并附加新的安全组。
我有一个用例,其中有 100 多台服务器,我必须将一个新的安全组附加到所有这些服务器,而不分离当前的安全组。
如何使用 AWS CLI 实现这一目标?
解决方案
根据传递的参数--groups
进行完全替换,并且无法绕过此行为,因此您需要实现获取现有安全组 (SG) 的逻辑,将新的 SG 添加到然后将其作为输入传递给--groups
.
由aws ec2 modify-instance-attribute
文件确认:
--groups(列表)
[EC2-VPC]将实例的安全组替换为指定的安全组。您必须至少指定一个安全组,即使它只是 VPC 的默认安全组。您必须指定安全组 ID,而不是安全组名称。
(细绳)
此命令应将具有 ID 的实例的所有安全组存储i-12345
在$securitygroups
:
securitygroups=$(aws ec2 describe-instances --instance-ids i-12345 --query "Reservations[].Instances[].SecurityGroups[].GroupId[]" --output text)
的输出echo $securitygroups
将类似于以下内容:
sg-074bb9206bd7edaf2 sg-07cd92995b937cbd2 sg-05414d9cef32901be
假设您的新安全组 ID 为sg-67890
,请执行以下命令将新 SG ID 附加到我们要设置的安全组列表中(该空间很重要且需要):
securitygroups+=" sg-67890"
的输出echo $securitygroups
现在应该附加新的 SG ID:
sg-074bb9206bd7edaf2 sg-07cd92995b937cbd2 sg-05414d9cef32901be sg-67890
最后,传递$securitygroups
给 的--groups
选项aws ec2 modify-instance-attribute
。
此变量将包含现有分配的 SG ID 以及要分配的新 SG ID,因此它将是分配新 SG 而不会取消分配任何当前 SG:
aws ec2 modify-instance-attribute --instance-id i-067a3aae02b8239e6 --groups $securitygroups
不管你有多少实例,把它放在一个循环中,问题就解决了。
推荐阅读
- php - Laravel 烦人的 CSS 加载
- java - 打印三叉树的元素
- sql - 如何在 SQL Server 中编写 Json 查询?
- c++ - 如何 push_back() C 数组到 std::vector
- java - 如何在构造函数被调用后修改其参数?
- python - 如何在本地服务器上托管我的 Django 网站?
- c# - 在 CSharpCompilation .net Core 中没有获得命名空间/引用
- python - 如何有条件地从一个值中减去
- reactjs - firebase subquery and also head query in next js as getinitialprops
- android - 未读取 RecyclerView 单击事件中的上下文