diff --git a/.github/workflows/clean-aws-resources.yml b/.github/workflows/clean-aws-resources.yml index ef308ec7d9..6134c5727b 100644 --- a/.github/workflows/clean-aws-resources.yml +++ b/.github/workflows/clean-aws-resources.yml @@ -234,6 +234,24 @@ jobs: working-directory: tool/clean run: go run ./clean_auto_scaling_groups/clean_auto_scaling_groups.go --tags=clean + clean-launch-configs: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ secrets.TERRAFORM_AWS_ASSUME_ROLE }} + aws-region: us-west-2 + + - name: Clean old launch configuration + working-directory: tool/clean + run: go run ./clean_launch_configuration/clean_launch_configuration.go --tags=clean clean-iam-roles: runs-on: ubuntu-latest permissions: diff --git a/tool/clean/clean_launch_configuration/clean_launch_configuration.go b/tool/clean/clean_launch_configuration/clean_launch_configuration.go new file mode 100644 index 0000000000..4c52cc4872 --- /dev/null +++ b/tool/clean/clean_launch_configuration/clean_launch_configuration.go @@ -0,0 +1,59 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: MIT +package main + +import ( + "context" + "errors" + "log" + "strings" + "time" + + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/autoscaling" + + "github.com/aws/amazon-cloudwatch-agent/tool/clean" +) + +func main() { + err := cleanLaunchConfiguration() + if err != nil { + log.Fatalf("errors cleaning %v", err) + } +} +func cleanLaunchConfiguration() error { + expirationDate := time.Now().UTC().Add(clean.KeepDurationSixtyDay) + ctx := context.Background() + defaultConfig, err := config.LoadDefaultConfig(ctx) + if err != nil { + return err + } + autoScalingClient := autoscaling.NewFromConfig(defaultConfig) + describeLaunchConfigurationsInput := autoscaling.DescribeLaunchConfigurationsInput{} + launchConfigOut, err := autoScalingClient.DescribeLaunchConfigurations(ctx, &describeLaunchConfigurationsInput) + if err != nil { + return err + } + if len(launchConfigOut.LaunchConfigurations) == 0 { + return errors.New("no launch configuration found") + } + log.Printf("Found %d launch configurations", len(launchConfigOut.LaunchConfigurations)) + for _, launchConfig := range launchConfigOut.LaunchConfigurations { + log.Printf("Found %s with creation date: %v", *launchConfig.LaunchConfigurationName, *launchConfig.CreatedTime) + // if not cwagent-integ-test ignore it + if !strings.Contains(*launchConfig.LaunchConfigurationName, "integ") { + continue + } + if expirationDate.After(*launchConfig.CreatedTime) { + log.Printf("Try to delete %s", *launchConfig.LaunchConfigurationName) + _, err := autoScalingClient.DeleteLaunchConfiguration(ctx, &autoscaling.DeleteLaunchConfigurationInput{ + LaunchConfigurationName: launchConfig.LaunchConfigurationName, + }) + if err != nil { + return err + } + log.Printf("Succesfully deleted %s", *launchConfig.LaunchConfigurationName) + } + } + return nil +}