- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-12-23T12:45:22+00:00","","")
#author("2019-12-23T12:52:24+00:00","","")
#mynavi(AWSメモ)
#setlinebreak(on);
* 概要 [#baf9a431]
#html(<div class="pl10">)
[[Grafana]] に関わる機会があったのだが、Grafana ではAWS EC2のメトリクスも表示できる。
一部カスタマイズしたい部分があったのだが、Grafana のサーバ処理は [[Go>Go言語]] で書かれている。
で、EC2のメトリクス表示に関わる部分で一部カスタマイズしたい部分があったのだが、Grafana のサーバ処理は [[Go>Go言語]] で書かれている。
これを機会に [[Go>Go言語]] の基本を学ぶと共に [[AWS SDK for Go>https://aws.amazon.com/jp/sdk-for-go/]] の使い方の勉強用にいろいろ触ってみる。
※ Go の基本的な使用方法など [[Go言語]] に書く事として、こちらの記事では主に AWS SDK for Go の使用方法などを記載していく事にする。
※ Go 自体の諸々は [[Go言語]] に書く事として、こちらの記事では主に AWS SDK for Go の使用方法などを記載していく事にする。
#html(</div>)
* 目次 [#n8f6e596]
#contents
- 関連
-- [[Go言語]]
-- [[AWSメモ]]
- 参考
-- https://aws.amazon.com/jp/sdk-for-go/
* Goのインストール [#a1bc3b7e]
#html(<div class="pl10">)
Homebrew でのインストール
#myterm2(){{
brew install go
}}
~/.bash_profile
~/.bash_profile
#mycode2(){{
export GOPATH=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin
}}
#html(</div>)
* メトリクス一覧を取得する [#c1344765]
#html(<div class="pl10">)
ec2metrics.go
#mycode2(){{
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awsutil"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/cloudwatch"
)
func main() {
region := "ap-northeast-1"
accessKeyId := "XXXXXXXXXXXXXXXXXXXXXX"
secretAccessKey := "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
value, err := getAllMetrics(region, accessKeyId, secretAccessKey)
fmt.Printf("%+v", value)
if err != nil{
fmt.Printf("Error!")
}
}
/**
* メトリクスの一覧を取得する.
*/
func getAllMetrics(region string, accessKeyId string, secretAccessKey string) (cloudwatch.ListMetricsOutput, error) {
namespace := "AWS/EC2"
//metric := "CPUUtilization"
creds, err := GetCredentials(accessKeyId, secretAccessKey)
if err != nil {
return cloudwatch.ListMetricsOutput{}, err
}
cfg := &aws.Config{
Region: aws.String(region),
Credentials: creds,
}
sess, err := session.NewSession(cfg)
if err != nil {
return cloudwatch.ListMetricsOutput{}, err
}
svc := cloudwatch.New(sess, cfg)
params := &cloudwatch.ListMetricsInput{
Namespace: aws.String(namespace),
//MetricName: aws.String(metric),
}
var resp cloudwatch.ListMetricsOutput
err = svc.ListMetricsPages(params,
func(page *cloudwatch.ListMetricsOutput, lastPage bool) bool {
metrics, _ := awsutil.ValuesAtPath(page, "Metrics")
for _, metric := range metrics {
resp.Metrics = append(resp.Metrics, metric.(*cloudwatch.Metric))
}
return !lastPage
})
if err != nil {
return resp, err
}
return resp, err
}
/**
* クレデンシャル取得.
*/
func GetCredentials(accessKeyId string, secretAccessKey string) (*credentials.Credentials, error) {
creds := credentials.NewChainCredentials(
[]credentials.Provider{
&credentials.StaticProvider{Value: credentials.Value{
AccessKeyID: accessKeyId,
SecretAccessKey: secretAccessKey,
}},
//&credentials.EnvProvider{},
})
return creds, nil
}
}}
#html(</div>)
#TODO