Построение лямбда-функции в yaml — проблема

#python #amazon-web-services #aws-lambda #yaml #amazon-cloudformation

#python #amazon-веб-сервисы #aws-lambda #yaml #amazon-cloudformation

Вопрос:

Я создаю развертывание CloudFormation, которое включает в себя лямбда-функцию, созданную на python 3.9. Однако, когда я создаю функцию, это не позволит мне сохранить одинарные кавычки. Это не было проблемой для большей части скрипта, поскольку я просто импортирую json, и двойные кавычки («) работают нормально, но для одного раздела требуются одинарные кавычки.

Вот код:

 import boto3
import json

def lambda_handler(event, context):
    client = client_obj()
    associated = associated_list(client)
    response = client.list_resolver_query_log_configs(
        MaxResults=1,
    )
    config = response['ResolverQueryLogConfigs'][0]['Id']
    ec2 = boto3.client('ec2')
    vpc = ec2.describe_vpcs()
    vpcs = vpc['Vpcs']
 
    for v in vpcs:
        if v['VpcId'] not in associated:
            client.associate_resolver_query_log_config(
                ResolverQueryLogConfigId= f"{config}",
                ResourceId=f"{v['VpcId']}"
            )
        else:
            print(f"{v['VpcId']} is already linked.")
 
def client_obj():
    client = boto3.client('route53resolver')
    return client
 
def associated_list(client_object):
    associated = list()
    assoc = client_object.list_resolver_query_log_config_associations()
    for element in assoc['ResolverQueryLogConfigAssociations']:
        associated.append(element['ResourceId'])
    return associated
 

любой раздел, который включает f"{v['VpcId']}" в себя, требует одинарной кавычки внутри [] для правильного запуска скрипта. Поскольку yaml требует, чтобы скрипт был заключен в одинарные кавычки для упаковки, как я могу это исправить?

Пример в yaml из другого скрипта:

 CreateIAMUser:
    Type: 'AWS::Lambda::Function'
    Properties:
      Code:
        ZipFile: !Join
          - | 

          - - import boto3
            - 'import json'
            - 'from botocore.exceptions import ClientError'
            - ''
            - ''
            - 'def lambda_handler(event, context):'
            - '    iam_client = boto3.client("iam")'
            - ''
            - '    account_id = boto3.client("sts").get_caller_identity()["Account"]'
            - ''
 

Я полагаю, что мог бы перестроить сценарий, чтобы избежать этого, но я хотел бы использовать эту возможность, чтобы узнать что-то новое, если это возможно.

Ответ №1:

Не уверен, что вы пытаетесь сделать, но обычно вы просто используете для этого канал в yaml:

       Code:
        ZipFile: |
            import boto3
            import json

            def lambda_handler(event, context):
                client = client_obj()
                associated = associated_list(client)
                response = client.list_resolver_query_log_configs(
                    MaxResults=1,
                )
                config = response['ResolverQueryLogConfigs'][0]['Id']
                ec2 = boto3.client('ec2')
                vpc = ec2.describe_vpcs()
                vpcs = vpc['Vpcs']
             
                for v in vpcs:
                    if v['VpcId'] not in associated:
                        client.associate_resolver_query_log_config(
                            ResolverQueryLogConfigId= f"{config}",
                            ResourceId=f"{v['VpcId']}"
                        )
                    else:
                        print(f"{v['VpcId']} is already linked.")
             
            def client_obj():
                client = boto3.client('route53resolver')
                return client
             
            def associated_list(client_object):
                associated = list()
                assoc = client_object.list_resolver_query_log_config_associations()
                for element in assoc['ResolverQueryLogConfigAssociations']:
                    associated.append(element['ResourceId'])
                return associated
 

Комментарии:

1. Так просто. Я не знаю, почему я делал! Функция соединения, так меня учили. Это работает намного лучше, и теперь я чувствую себя неловко. Спасибо!