#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. Так просто. Я не знаю, почему я делал! Функция соединения, так меня учили. Это работает намного лучше, и теперь я чувствую себя неловко. Спасибо!