The*_*eth 3 python json amazon-web-services amazon-cloudwatch boto3
我有一个相当长的 Cloudwatch 日志组列表,需要删除......大概有近一百个。因为你必须一次删除它们,所以我想一个小小的 python 脚本可以帮助我,但现在我卡住了。
到目前为止,这是我的脚本...
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
# )
Run Code Online (Sandbox Code Playgroud)
如何获取 i 中“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
除非您出于其他目的特别需要将 JSON 响应保存到磁盘,否则您可以简单地使用此代码的某些变体:
import boto3
def delete_log_streams(prefix=None):
"""Delete CloudWatch Logs log streams with given prefix or all."""
next_token = None
logs = boto3.client('logs')
if prefix:
log_groups = logs.describe_log_groups(logGroupNamePrefix=prefix)
else:
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)
logs.delete_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
# delete_log_stream(log_group_name, log_stream_name, logs)
if not next_token or len(log_streams['logStreams']) == 0:
break
Run Code Online (Sandbox Code Playgroud)