0

我无法将两个输出回调值传递到容器定义中。我正在这样做:

redis_url = redis.cache_nodes.apply(lambda cache_nodes: cache_nodes[0].get('address'))

task_definition = aws.ecs.TaskDefinition('task',
    family='task-definition',
    cpu='256',
    memory='512',
    network_mode='awsvpc',
    requires_compatibilities=['FARGATE'],
    execution_role_arn=role.arn,
    container_definitions=cloudwatchgroup.name.apply(generate_container_definition)
)


def generate_container_definition(log_group_name):
    return json.dumps([{
        'name': 'api',
        'image': 'api/api:latest',
        'portMappings': [{
            'containerPort': 80,
            'hostPort': 80,
            'protocol': 'tcp'
        }],
        'logConfiguration': {
            'logDriver': 'awslogs',
            'options': {
                    'awslogs-group': log_group_name,
                    'awslogs-region': aws.get_region().name,
                }
            },
        'environment' : [
            { 'name' : 'ENV', 'value' : config.get('ENV') },
            { 'name' : 'REDIS_URL', 'value' : redis_url }
        ]
    }])

但后来我得到:TypeError: Object of type Output is not JSON serializable

有没有办法将两个输出值传递到该函数定义中,还是我做错了什么?

4

1 回答 1

1

您可以使用Output.all组合多个输出。就像是

def generate_container_definition(log_group_name, redis_url):
    ...

container_definitions = Output.all(cloudwatchgroup.name, redis.cache_nodes)
    .apply(lambda args: generate_container_definition(args[0], args[1][0].get('address')))
于 2020-06-26T14:29:40.310 回答