Go言語でLightsailインスタンスを制御してみた

Amazon Lightsailのインスタンス情報の取得や各種制御(インスタンスの起動や停止など)はAWS CLIから行うことが可能です。
各種プログラミング言語に対応したAWS SDKも提供されており、AWS EC2の場合はそれを使ってプログラムからインスタンスの制御をすることができます。

関連記事

時々「Amazon Lightsail」でインスタンスを立てます。 安価でいろいろセットになっていて手軽なのでちょっとしたテスト用途のときは専らLightsailです。 Lightsailについてはこちらの記事をご覧ください。 […]

関連記事

AWS EC2インスタンスをいじる際、AWSコンソールを使うことが多いかと思います。 しかし、起動中/停止中の確認や、起動/停止をするためだけにAWSコンソールにアクセスするのもそれはそれで手間がかかります。 AWS CLIを使えば[…]

Lightsailについてはサンプルコードのページに記述がありません。
非対応なのかと思いましたがSDKのソースを見てみるとそれらしいディレクトリがあり「もしかしたらいけるのでは…」ということで調べてみました。

GitHub

Welcome to the AWS Code Examples Repository. This repo cont…

GitHub

AWS SDK for the Go programming language. . Contribute to aws…

結論

EC2用のサンプルコードをLightsail用のメソッドなどに変更することで制御できます。

コード例

コードは下記のようになります。
(インスタンス情報の取得部分を一部抜粋)

package main

import (
	"context"
	"errors"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/lightsail"
	"github.com/aws/aws-sdk-go-v2/service/lightsail/types"
	"github.com/aws/smithy-go"
)

type LSGetInstancesAPI interface {
	GetInstances(ctx context.Context,
		params *lightsail.GetInstancesInput,
		optFns ...func(*lightsail.Options)) (*lightsail.GetInstancesOutput, error)
}

func getLsStatus(config aws.Config) (*lightsail.GetInstancesOutput, error) {
	client := lightsail.NewFromConfig(config)
	input := &lightsail.GetInstancesInput{}

	return getLsInstances(context.TODO(), client, input)
}

func getLsInstances(c context.Context, api LSGetInstancesAPI, input *lightsail.GetInstancesInput) (*lightsail.GetInstancesOutput, error) {
	return api.GetInstances(c, input)
}

getLsStatusメソッドを呼び出すことでインスタンス情報の入ったJSONが返ってきますので必要に応じてパースします。


まとめ

今回の記事ではIAMユーザーの認証周りなどについては言及しておりません。
そのあたりの情報は前述の記事に記載してありますのでご覧ください。

大雑把に言えば前述の記事において「ec2云々」となっている部分を「lightsail云々」に変えれば動く感じです。

この記事がGo言語でLightsailインスタンスを制御しようとしている方の参考になれば幸いです。