Lambda 函数来搜索所有正在运行的 EC2 实例,如果不存在添加标签“名称”,然后将标签添加到它的关联卷?

问题描述

我有一些代码可以为所有挂起和正在运行的实例添加标签,然后搜索它们关联的卷,并为这些卷添加标签。但是,如果我启动一个完全没有标签的新实例,我会收到 KeyError 并且它不起作用。我要做的是:

  1. 搜索所有正在运行和待处理的 EC2
  2. 如果实例上不存在 'Name' 标签,则添加一个键:'Name' 标签以及键:'test_key',值:'test_value'。
  3. 如果 key: 'Name' 标签确实存在,只需将 key: 'test_key' , value: 'test_value' 添加到 EC2 的
  4. 向与正在运行/待处理的实例关联的所有卷添加标签

代码如下:

ChartDataset

如果新实例上有“名称标签,它可以正常工作,但如果“名称标签不存在,则不起作用。它抛出以下错误

{ "errorMessage": "'标签'","errorType": "KeyError",“堆栈跟踪”: [ " 文件 "/var/task/lambda_function.py",line 38,in lambda_handler\n for tag in instance['Tags']:\n" ] }

我认为这是因为它正在搜索一个标签,但新实例没有标签,所以它出错了。

解决方法

如果实例没有标签,则不会有任何 #include <stdlib.h> #include <stdio.h> #include <time.h> int in_range(int value,int lower,int upper) { return value >= lower && value <= upper; } char get_cell_color(int x,int y,int max_x,int max_y,int m[max_x][max_y]) { int v = m[x][y]; int n = -1,s = -1,e = -1,w = -1; /* change from logical "size",to maximum "index" */ max_x -= 1; max_y -= 1; if (in_range(x,1,max_x)) n = m[x - 1][y]; if (in_range(x,max_x - 1)) s = m[x + 1][y]; if (in_range(y,max_y - 1)) e = m[x][y + 1]; if (in_range(y,max_y)) w = m[x][y - 1]; return (v > n && v > s && v > e && v > w) ? 'R' : 'G'; } int main(void) { int x = 0,y = 0; srand(time(NULL)); while (!in_range(x,10) || !in_range(y,10)) { printf("Enter X: "); scanf("%d",&x); printf("Enter Y: "); scanf("%d",&y); } int matrix[x][y]; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) matrix[i][j] = rand() % 10 + 1; char rg_matrix[x][y]; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) rg_matrix[i][j] = get_cell_color(i,j,x,y,matrix); for (int i = 0; i < x; i++) { printf("[ "); for (int j = 0; j < y; j++) printf("\033[%dm%02d ",(rg_matrix[i][j] == 'R' ? 31 : 32),matrix[i][j]); printf("\033[0m]\n"); } } 字段。所以你必须检查这个:

Tags
,

我编辑并添加了以下内容,现在可以使用了。对于标签,我添加了第二个名为 mytags2 的列表,它也有“名称”标签:

for reservation in instances['Reservations']:
    for instance in reservation['Instances']:
        if 'Tags' in instance:
            ec2.create_tags(
                Resources = [instance["InstanceId"] ],Tags = mytags)
        elif 'Tags' not in instance:
            ec2.create_tags(
                Resources = [instance["InstanceId"] ],Tags = mytags2)

然后,我重新运行 describe_instances 并向卷添加标签。