2017-06-05 5 views
0

私は削除する必要がある雲のロググループのかなり長いリストを持っています....百に近いように....あなたは一度に一つずつ削除しなければならないので、私は少しのpythonスクリプトが私を助けてくれると思ったが、今は止まっている。ここに私のスクリプトは、これまでだBott3を使ってCloudwatchロググループを削除する - delete_log_group

...

import boto3 
from botocore.exceptions import ClientError 
import json 

#Connect to AWS using default AWS credentials in awscli config 
cwlogs = boto3.client('logs') 

loglist = cwlogs.describe_log_groups(
    logGroupNamePrefix='/aws/lambda/staging-east1-' 
) 

#writes json output to file... 
with open('loglist.json', 'w') as outfile: 
    json.dump(loglist, outfile, ensure_ascii=False, indent=4, 
sort_keys=True) 

#Opens file and searches through to find given loggroup name 
with open("loglist.json") as f: 
    file_parsed = json.load(f) 

for i in file_parsed['logGroups']: 
    print i['logGroupName'] 


# cwlogs.delete_log_group(
#  logGroupName='string' <---here is where im stuck 
# ) 

は、どのように私は私に「logGroupName」の値を取り、delete_log_groupコマンドを使用してのすべてを削除するために反復処理できる文字列に変換します私のロググループは消えなければなりませんか? 私はjson.loadsを使用してみました、それは次のよう...

トレースバック(最後の最新の呼び出し)を用いてエラーが発生した: ファイル "CWLogCleaner.py"、ライン18、 file_parsed = json.loadsで(F ) ファイル "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/ init .py"、行339、ロード中 戻り値_default_decoder .decode(s) ファイル "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py"、行364、デコード中 obj、end = self.raw_decode(s、idx = _w(s、0).end())

これは間違っていると思いますか?

TIA

答えて

0

あなたは、特に、おそらくあなたは、単にこのコードの一部バリアントを使用することができ、他の目的のためにディスクにJSONレスポンスを保存する必要がない限り:

HERESに
import boto3 

# -------------------------------------------------------------- 
# Delete all CloudWatch log streams. 
# -------------------------------------------------------------- 
def delete_log_streams(): 
    next_token = None 
    logs = boto3.client('logs') 
    log_groups = logs.describe_log_groups() 

    for log_group in log_groups['logGroups']: 
     log_group_name = log_group['logGroupName'] 
     print("Delete log group:", log_group_name) 

     while True: 
      if next_token: 
       log_streams = logs.describe_log_streams(logGroupName=log_group_name, 
                 nextToken=next_token) 
      else: 
       log_streams = logs.describe_log_streams(logGroupName=log_group_name) 

      next_token = log_streams.get('nextToken', None) 

      for stream in log_streams['logStreams']: 
       log_stream_name = stream['logStreamName'] 
       print("Delete log stream:", log_stream_name) 
       # delete_log_stream(log_group_name, log_stream_name, logs) 

      if not next_token or len(log_streams['logStreams']) == 0: 
       break 
+0

。それは私と一緒に作業する何かを与える。ありがとうございました 私は誰かがそれを使用したい場合に私が終わるものを投稿します。 – TheRedSeth

+0

あなたがフィルタリングを追加すると仮定して、私はフレームワークを提供していました。あなたのAPI呼び出しはレート制限されているので、それに対処する準備ができていることに注意してください。awscliには指数バックオフが組み込まれていますが、補足する必要があります。 – jarmod

0

私は私のために働いて得たもの。イムは確かにこれは...指定された接頭辞で始まるものだけhackeyで、何の開発者イムないが、それは私のために働いた...

すべてのログを削除するには見ていないが、閉じるイム
cwlogs = boto3.client('logs') 

loglist = cwlogs.describe_log_groups(
    logGroupNamePrefix='ENTER NAME OF YOUR LOG GROUP HERE' 
) 

#writes json output to file... 
with open('loglist.json', 'w') as outfile: 
    json.dump(loglist, outfile, ensure_ascii=False, indent=4, 
sort_keys=True) 

#Opens file and searches through to find given loggroup name 
with open("loglist.json") as f: 
    file_parsed = json.load(f) 

for i in file_parsed['logGroups']: 
    print i['logGroupName'] 

for i in file_parsed['logGroups']: 
    cwlogs.delete_log_group(
     logGroupName=(i['logGroupName']) 
    ) 
関連する問題