Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Lambda脚本以获取没有特定标记的实例名称_Python_Amazon Web Services_Aws Lambda_Boto3 - Fatal编程技术网

Python Lambda脚本以获取没有特定标记的实例名称

Python Lambda脚本以获取没有特定标记的实例名称,python,amazon-web-services,aws-lambda,boto3,Python,Amazon Web Services,Aws Lambda,Boto3,出于测试目的,我有3个实例,其中2个有标记key:Backup Value:Testing,1个没有这个,我想得到没有这个特定标记的实例名。我正在尝试这种逻辑,即获取所有实例名称,然后查找具有此备份标记的实例,然后从第一个列表中删除第二个列表。我可以同时获得两个列表,但无法从第一个列表中筛选出第二个列表 代码: 输出: Function Logs: START RequestId: c271c3b3-9c64-4d7b-829f-d34ffcb5e944 Version: $LATEST i-

出于测试目的,我有3个实例,其中2个有标记key:Backup Value:Testing,1个没有这个,我想得到没有这个特定标记的实例名。我正在尝试这种逻辑,即获取所有实例名称,然后查找具有此备份标记的实例,然后从第一个列表中删除第二个列表。我可以同时获得两个列表,但无法从第一个列表中筛选出第二个列表

代码:

输出:

Function Logs:
START RequestId: c271c3b3-9c64-4d7b-829f-d34ffcb5e944 Version: $LATEST

i-05a448daa5823d6af
i-0f79ec69714932e8e
i-058bfa970112e8565

{'i-058bfa970112e8565', 'i-05a448daa5823d6af'}

END RequestId: c271c3b3-9c64-4d7b-829f-d34ffcb5e944
REPORT RequestId: c271c3b3-9c64-4d7b-829f-d34ffcb5e944  Duration: 480.40 ms Billed Duration: 500 ms Memory Size: 128 MB Max Memory Used: 73 MB  Init Duration: 276.17 ms    

下面是一个AWS Lambda函数,它将查找没有给定标记的任何实例:

导入boto3
def lambda_处理程序(事件、上下文):
ec2_resource=boto3.resource('ec2')
未备份=[]
例如,在ec2_resource.instances.all()中:
if not[标记实例中的标记。标记if tag['Key']=='Backup'和标记['Value']=='Testing']:
未备份。追加(instance.id)
打印(未备份)
代码:

import boto3
def lambda_handler(event, context):
    list=[]
    ec2 = boto3.client('ec2')
    ec2_resource = boto3.resource('ec2')
    response = ec2.describe_instances()
    for reservation in response["Reservations"]:
        for instance in reservation["Instances"]:

            list.append(instance["InstanceId"])

    not_backed_up = []
    list_difference = []
    for instance in ec2_resource.instances.all():
        if [tag for tag in instance.tags if tag['Key'] == 'Backup' and tag['Value'] == 'Testing']:
            not_backed_up.append(instance.id)

    print(list)
    print(not_backed_up)

    for item in list:
        if item not in not_backed_up:
         list_difference.append(item)

    print(list_difference)
输出:

功能日志: 启动请求ID:73fcb1b0-5421-47dc-88f6-B82F581A461版本:$最新

['i-05a448daa5823d6af','i-0f79ec69714932e8e','i-058bfa970112e8565']

['i-05a448daa5823d6af','i-058bfa970112e8565']

['i-0f79ec69714932e8e']


第三个输出是没有备份标签的实例

标签NV1和标签NV的输出是什么?@marc在ami\u backuppolicy列表中列出了所有有标签的实例,并在其上方打印了所有实例id,我如何找到第一个到第二个,您所说的“实例名称”是什么意思?你是指实例ID还是
Name
标记的值?@JohnRotenstein我指的是实例IDonly@JohnRotenstein使用您的代码并与我的代码混合以获得结果。所有instanceId为3,具有备份标记的实例为2。所以我把这两个列表的区别都去掉了。谢谢你的想法。你提供的代码只列出了带有备份标签的实例id,在我的例子中是2。我尝试了这段代码,结果是有2个实例id的标签。但是你的想法帮助了我,谢谢你!通过插入一个
而不是
来修复它。你能建议我从哪里学习aws lambda脚本,就像我了解python一样,这样我就能够破解取两个列表的差异的逻辑,但我不知道如何有效地编写aws部分逻辑。我发现阅读并在web上搜索示例代码是学习东西的好方法!从别人的代码中学习是非常有用的。我刚刚在YouTube上搜索了“boto3 python”,那里有很多视频。真正的程序员从不重新发明已经编写好的东西。
import boto3
def lambda_handler(event, context):
    list=[]
    ec2 = boto3.client('ec2')
    ec2_resource = boto3.resource('ec2')
    response = ec2.describe_instances()
    for reservation in response["Reservations"]:
        for instance in reservation["Instances"]:

            list.append(instance["InstanceId"])

    not_backed_up = []
    list_difference = []
    for instance in ec2_resource.instances.all():
        if [tag for tag in instance.tags if tag['Key'] == 'Backup' and tag['Value'] == 'Testing']:
            not_backed_up.append(instance.id)

    print(list)
    print(not_backed_up)

    for item in list:
        if item not in not_backed_up:
         list_difference.append(item)

    print(list_difference)