在AWS SSM (Systems Manager) 中,可以通过传递标签名称而不是实例ID来执行命令。以下是一个使用AWS SDK for Python (Boto3)的示例代码,演示如何按标签名称查找实例并执行命令。
首先,确保您已经安装了Boto3库。您可以通过运行以下命令来安装它:
pip install boto3
然后,使用以下代码示例:
import boto3
def execute_command_on_instances_by_tag(tag_key, tag_value, command):
# 创建SSM客户端
ssm_client = boto3.client('ssm')
# 使用标签名称查找实例
ec2_client = boto3.client('ec2')
response = ec2_client.describe_instances(Filters=[
{
'Name': f'tag:{tag_key}',
'Values': [tag_value]
}
])
instance_ids = []
for reservation in response['Reservations']:
for instance in reservation['Instances']:
instance_ids.append(instance['InstanceId'])
# 执行命令
response = ssm_client.send_command(
DocumentName="AWS-RunShellScript",
InstanceIds=instance_ids,
Parameters={
'commands': [command]
}
)
# 获取命令执行的结果
command_id = response['Command']['CommandId']
output = ssm_client.get_command_invocation(
CommandId=command_id,
InstanceId=instance_ids[0] # 这里假设只有一个实例
)
return output['StandardOutputContent']
# 传递标签名称和值以及要执行的命令
output = execute_command_on_instances_by_tag('tag_key', 'tag_value', 'ls -l')
print(output)
此代码示例将使用boto3
库创建SSM客户端和EC2客户端。然后,它将使用EC2客户端的describe_instances
方法,按照给定的标签名称和值来查找实例。找到实例后,将使用SSM客户端的send_command
方法执行命令,并使用get_command_invocation
方法获取命令执行结果。
请注意,此示例假设每个标签值唯一对应一个实例。如果有多个实例与相同的标签匹配,您可以根据自己的需求进行修改。