protected function execute(InputInterface $input, OutputInterface $output)
{
// TODO: refactor this to use \AwsInspector\Model\CloudWatchLogs\Repository
$groupPattern = $input->getArgument('group');
$lambdaArn = $input->getArgument('lambdaArn');
$filterName = $input->getArgument('filterName');
/* @var $cloudwatchLogsClient \Aws\CloudWatchLogs\CloudWatchLogsClient */
$cloudwatchLogsClient = \AwsInspector\SdkFactory::getClient('cloudwatchlogs');
$lambdaClient = \AwsInspector\SdkFactory::getClient('lambda');
$nextToken = null;
do {
$params = ['limit' => 50];
if ($nextToken) {
$params['nextToken'] = $nextToken;
}
$result = $cloudwatchLogsClient->describeLogGroups($params);
foreach ($result->get('logGroups') as $logGroup) {
$name = $logGroup['logGroupName'];
if (preg_match('/' . $groupPattern . '/', $name)) {
try {
$subscriptionFilters = $cloudwatchLogsClient->describeSubscriptionFilters(['logGroupName' => $logGroup['logGroupName']]);
if (empty($subscriptionFilters->get('subscriptionFilters'))) {
continue;
}
$cloudwatchLogsClient->deleteSubscriptionFilter(['filterName' => $filterName, 'logGroupName' => $logGroup['logGroupName']]);
$lambdaClient->removePermission(['FunctionName' => $lambdaArn, 'StatementId' => (string) md5($logGroup['logGroupName'])]);
$output->writeln('Delete lambda trigger for ' . $logGroup['logGroupName']);
} catch (\Aws\CloudWatchLogs\Exception\CloudWatchLogsException $e) {
if ($e->getAwsErrorCode() != 'ResourceNotFoundException') {
throw $e;
}
}
}
}
$nextToken = $result->get("nextToken");
} while ($nextToken);
}