ただのアニメ感想ブログ

主にアニメの感想を書いていきます。

GoLangを触ってみた#おまけ

先日、GoでAWSを動かすと早いと言う話をしました。
その際にGoでは最初に認証を行っているのに対して、AWS CLIは都度認証を行っているから早いのではないか?と結論付けました。
その仮説が本当に正しいのかを確かめてみました。


確認用に作成したのは以下のスクリプトです。

ファイル名:aws_time2.go
package main

import (
    "fmt"
    "strings"
    "time"

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

const (
    debug = false
    loop = 100000000
)

func main() {
    svc := iam.New(session.New(), &aws.Config{})
    
    users, err := svc.ListUsers(nil)
    if err != nil {
        panic(err)
    }
    
    t1 := time.Now()
    for count := 0; count < loop; count++ {
        for i := 0; i < len(users.Users); i++ {
            if strings.Index(*(users.Users[i].UserName), "TestUser") > 0 {
                attachUserPolicyInput := &iam.AttachUserPolicyInput{
                    PolicyArn: aws.String("arn:aws:iam::<アカウントID>:policy/AmazonIAM-ReadOnly"),
                    UserName:  aws.String(*(users.Users[i].UserName)),
                }
                svc = iam.New(session.New(), &aws.Config{})
                _, err = svc.AttachUserPolicy(attachUserPolicyInput)
                if err != nil {
                    panic(err)
                }
                
                detachUserPolicyInput := &iam.DetachUserPolicyInput{
                    PolicyArn: aws.String("arn:aws:iam::<アカウントID>:policy/AmazonIAM-ReadOnly"),
                    UserName:  aws.String(*(users.Users[i].UserName)),
                }
                svc = iam.New(session.New(), &aws.Config{})
                _, err = svc.DetachUserPolicy(detachUserPolicyInput)
                if err != nil {
                    panic(err)
                }
            }
        }
    }
    t2 := time.Now()
    fmt.Println(t2.Sub(t1))
}


変更点としてはAttachUserPolicyとDetachUserPolicyの前にiam.Newを呼んでいる点です。
ここでセッションを新しく張り直すのでその分時間がかかるはず。


・・・で、時間の計測をしてみた結果ですが、変更前とあまり変わりませんでした。
1,000,000回のループで0.16秒、100,000,000回のループで15.22秒とほぼ同じ。


結論:GoはGoだから早い。
本当にGo自体が早いのか、認証は実は別の箇所で行っているのか、あるいは何らかの最適化で省略されているのか。
う~ん、なんだか腑に落ちない結論だなぁ。


そんなわけで、今日はこれまで。
それでは、ごきげんよう。