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

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

あわせて読みたい
AWS CLIでLightsailのインスタンス情報を取得してみた 時々「Amazon Lightsail」でインスタンスを立てます。 安価でいろいろセットになっていて手軽なのでちょっとしたテスト用途のときは専らLightsailです。 Lightsailにつ...
あわせて読みたい
Go言語でAWS EC2インスタンスを制御してみた AWS EC2インスタンスをいじる際、AWSコンソールを使うことが多いかと思います。 しかし、起動中/停止中の確認や、起動/停止をするためだけにAWSコンソールにアクセスす...

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

GitHub
aws-doc-sdk-examples/gov2 at main · awsdocs/aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more inform...
GitHub
aws-sdk-go-v2/service/lightsail at main · aws/aws-sdk-go-v2 AWS SDK for the Go programming language. . Contribute to aws/aws-sdk-go-v2 development by creating an account on GitHub.
目次

結論

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インスタンスを制御しようとしている方の参考になれば幸いです。

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次