python
  • python-2.7
  • amazon-web-services
  • boto3
  • amazon-route53
  • 2017-12-11 15 views 0 likes 
    0

    route53을 쿼리하고 IP와 각 서버 호스트 이름의 일부인 "서버 역할"을 얻기 위해 boto3을 사용하는 Python 코드를 작성하고 싶습니다.특정 정보를 표시하기 위해 route53-list-record의 출력을 포맷하려면 어떻게합니까?

    저는 파이썬에 매우 익숙하며, 출력물을 포맷하는데 문제가 있습니다.

    #!/usr/bin/python 
    import boto3 
    
    region = 'eu-west-1' 
    hostedzoneid = 'XXXXXXXX' 
    stackvpcid = 'vpc-xxxxxxx' 
    
    r53client = boto3.client('route53') 
    
    response = r53client.list_resource_record_sets(
         HostedZoneId=hostedzoneid, 
         StartRecordName='dev', 
         StartRecordType='A' 
         ) 
    
    #dict = {} 
    for resource in response['ResourceRecordSets']: 
        print(resource) 
    

    출력이 너무과 같습니다 : 그래서

    {u'ResourceRecords': [{u'Value': 'ns-512.awsdns-00.net.'}, {u'Value': 'ns-1536.awsdns-00.co.uk.'}, {u'Value': 'ns-0.awsdns-00.com.'}, {u'Value': 'ns-1024.awsdns-00.org.'}], u'Type': 'NS', u'Name': 'vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 172800} 
    {u'ResourceRecords': [{u'Value': 'ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400'}], u'Type': 'SOA', u'Name': 'vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 900} 
    {u'ResourceRecords': [{u'Value': '172.58.38.137'}], u'Type': 'A', u'Name': 'dev-analytics1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.17.224'}], u'Type': 'A', u'Name': 'dev-analytics2.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.32.16'}], u'Type': 'A', u'Name': 'dev-api1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.26.94'}], u'Type': 'A', u'Name': 'dev-api2.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.14.88'}], u'Type': 'A', u'Name': 'dev-api4.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '52.154.154.22'}], u'Type': 'A', u'Name': 'dev-bastion.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.41.124'}], u'Type': 'A', u'Name': 'dev-batch1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.39.163'}], u'Type': 'A', u'Name': 'dev-cassandra1.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.14.5'}], u'Type': 'A', u'Name': 'dev-cassandra2.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.31.112'}], u'Type': 'A', u'Name': 'dev-cassandra3.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.38.137'}], u'Type': 'A', u'Name': 'dev-kafka-10.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.41.124'}], u'Type': 'A', u'Name': 'dev-kafka-20.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.32.16'}], u'Type': 'A', u'Name': 'dev-kafka-30.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': '172.58.26.94'}], u'Type': 'A', u'Name': 'dev-kafka-31.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    {u'ResourceRecords': [{u'Value': 'dev-mysql-14-vpc-XXXXXXXX.c1te7xcziik1.eu-west-1.rds.amazonaws.com'}], u'Type': 'CNAME', u'Name': 'dev-mysql.vpc-XXXXXXXX.eu-west-1.company.private.', u'TTL': 300} 
    

    지금은 "이라는 단어를 포함하는 모든 라인 출력에서 ​​제거하기 위해 노력하고있어

    내 현재 코드는 다음처럼 보이는 kafka ", CNAME 및 NS 레코드를 사용하여"list_resource_record_sets() "에서 필터를 구성한 이유가 처음에 왜 표시되는지 이해할 수 없습니다.

    그런 다음, 예를 들어이 각 호스트 이름에서 :

    Name': 'dev-cassandra3.vpc-XXXXXXXX.eu-west-1.company.private.' 
    

    서버 역할은 문자열 "카산드라"또는 다른 서버에있을 것입니다 : 분석, API, 요새, 등 ...과를 IP는 "가치"가 될 것입니다. 이 방법을

    172.58.31.112 : cassandra 
    52.154.154.22 : bastion 
    

    를 수행됩니다

    그래서 나는 그렇게 모양을 텍스트 목록을 작성하는 코드를 하시겠습니까? 내 문제는 내가 "가치"에 액세스하는 방법을 모르는 것 같아요 ...

    답변

    1

    response['ResourceRecordSets']은 ResourceRecord의 목록입니다. 각 ResourceRecords는 사전입니다. 다음은 작동하거나 필요에 맞게 조정할 수 있습니다. 레코드를 반복하고 이름에 패턴이 dev-([a-z]*)인지 확인하고 이름과 값을 인쇄하십시오.

    import re 
    
    for resource in response['ResourceRecordSets'] 
        records = resource['ResourceRecords'][0] 
        if 'Name' in resource: 
        name = re.findall('dev-([a-z]*)', resource['Name']) 
        if name: 
         print records['Value'], name[0] 
    

    출력

    172.58.38.137 analytics 
    172.58.17.224 analytics 
    172.58.32.16 api 
    172.58.26.94 api 
    172.58.14.88 api 
    52.154.154.22 bastion 
    172.58.41.124 batch 
    172.58.39.163 cassandra 
    172.58.14.5 cassandra 
    172.58.31.112 cassandra 
    172.58.38.137 kafka 
    172.58.41.124 kafka 
    172.58.32.16 kafka 
    172.58.26.94 kafka 
    dev-mysql-14-vpc-XXXXXXXX.c1te7xcziik1.eu-west-1.rds.amazonaws.com mysql 
    

     관련 문제

    • 관련 문제 없음^_^