LoginSignup
0
0

More than 5 years have passed since last update.

運用ツールとしてGo言語を使ってAWSの起動設定とAMI数を返すツールを作った

Last updated at Posted at 2018-09-29

運用ツールとしてGo言語を使ってAWSの起動設定とAMI数を返すツールを作ってみた

  • 背景

    • AWS環境でインフラCIとして、CodePipeline + CodeBuild + CodeDeployを使っている
    • CodeDeployでBlue/Greenデプロイをしていると起動設定がどんどん増えていく
    • CodeBuildでPackerを動かしており、AMIがどんどん増える
  • 課題

    • AWSのリソース上限値に達するとデプロイにコケる..
    • 自動で削除することもできるが、AutoScalingGroupで指定している起動設定やAMIを削除すると困る
    • 週1程度でslackに通知して数が増えてきたら消すように運用者に促すようにする

ここでは、起動設定数とAMIの数を取得するツールの部分の紹介 ( 実際はLambdaで定期実行し出力を工夫してSlackに投稿している )

  • 実行環境
    • Mac ( high sierra )
    • go version: go1.10.3
    • aws-sdk-go
    • ローカルにawsのapiを叩くために必要な情報をセットしている必要あり

以下、作成したコードです。 (Goを勉強をしながら作成しています)

main.go
package main

import (
    "fmt"
    "os"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/autoscaling"
    "github.com/aws/aws-sdk-go/service/ec2"
)

const (
    PAGE = 4
)

var (
    config = aws.Config{Region: aws.String("ap-northeast-1")}
    svcEc2 = ec2.New(session.New(&config))
    svcAsg = autoscaling.New(session.New(&config))
)

type Get interface {
    GetAmiNums() int
    GetLCNums() int
}

type Nums struct {
    amiNumbers   int
    lcNumbers    int
}

func main() {
    n := &Nums{}
    fmt.Printf("AMIs %d\n", n.GetAmiNums())
    fmt.Printf("LCs %d\n", n.GetLCNums())
}

func (n *Nums) GetAmiNums() int {
    var owner, images []*string
    var _owner []string = []string{"self"}

    owner = aws.StringSlice(_owner)
    params := &ec2.DescribeImagesInput{
        ImageIds: images,
        Owners:   owner,
    }
    res, err := svcEc2.DescribeImages(params)
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    n.amiNumbers = len(res.Images)
    return n.amiNumbers
}

func (n *Nums) GetLCNums() int {
    pageNum := 0
    sumLcs := 0

    params := &autoscaling.DescribeLaunchConfigurationsInput{}
    err := svcAsg.DescribeLaunchConfigurationsPages(params,
        func(page *autoscaling.DescribeLaunchConfigurationsOutput, lastPage bool) bool {
            sumLcs += len(page.LaunchConfigurations)
            pageNum++

            return pageNum <= PAGE // MAX = 50 * PAGE
        })
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }
    n.lcNumbers = sumLcs
    return n.lcNumbers
}
  • 実行結果
AMIs 3
LCs 1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0