何をするか?
ここでは、Go 言語用の AWS SDK V2 をセットアップして、各種 AWS サービス用の API を呼び出す準備をします。
Go 言語は Google が開発したプログラミング言語で、ライブラリインポートの手軽さや、生成された実行バイナリの実行速度に定評があるため、今後も利用ユーザーは増えていきそうです。
Go の実行環境は Go のインストーラー で簡単にインストールできます。 これ以降の説明では、Go の実行環境はインストール済みであると想定しています。
テスト用の Go プロジェクトを作成する
Go プロジェクト用に適当なディレクトリを作成し、その中で go mod init
コマンドを実行して go.mod
(依存関係などが保存されるファイル)を作成しておきます。
このファイルが存在するディレクトリを、Go はモジュールとして認識します。
$ mkdir aws-study
$ cd aws-study
$ go mod init aws-study
上記の例では、go mod init
の引数(モジュールパス)を aws-study
としましたが、GitHub リポジトリで管理する前提であれば、github.com/<user>/aws-study
のようなモジュールパスを指定するようにしてください。
これで、Go 言語プロジェクトの準備完了です。
AWS SDK でコンフィグ情報を参照してみる
AWS SDK を使って AWS のサービスにアクセスするには、認証情報として IAM ユーザーの「アクセスキー ID」や「シークレットアクセスキー」などが必要になります。
これらは、一般的には AWS CLI の aws configure
コマンドによって、~/.aws/credentials
や ~/.aws/config
に保存された情報です。
AWS SDK にはこれらの設定ファイルから認証情報(クレデンシャル情報)を読み取る API が用意されています。
まず、go get
コマンドを実行して、設定情報を読み込むための github.com/aws/aws-sdk-go-v2/config パッケージ の依存情報を追加します。
$ go get github.com/aws/aws-sdk-go-v2/config
go get
コマンドを実行すると、パッケージの依存情報が記載された go.mod
と go.sum
ファイルが更新されるので、これらは忘れずに Git などにコミットするようにしてください。
下記のサンプルコードでは、AWS のコンフィグ情報を取得して、画面上に出力しています。
次のように実行してアクセスキーの情報が表示されれば、各種 AWS サービスの API を呼び出す準備は整っています。
config.LoadDefaultConfig 関数 は、次のような外部リソースを情報源として AWS のコンフィグ情報 (aws.Config
) を構築しています。
コンフィグ情報がうまく表示されないときは、これらの設定を確認すると原因が分かるかもしれません。
- 環境変数
export AWS_REGION=ap-northeast-1
export AWS_ACCESS_KEY_ID=TAZASBDCD4ASIAVTXAP4
export AWS_SECRET_ACCESS_KEY=S2VmkhmfeN8n9TXe7G2L1XAOVhK80jui/eNcdgna
export AWS_SESSION_TOKEN=Ub7oU0AhI0k4NIGo3J(省略)D9f3YiTZ2xyyqi44w=
export AWS_PROFILE=default
- Shared Credentials ファイル (
~/.aws/credentials
) - Shared Configuration ファイル (
~/.aws/config
)
AWS サービスの API を呼び出してみる
コンフィグ情報 (aws.Config
) を取得できるようになったら、あとは各 AWS サービス(S3、API Gateway、DynamoDB など)の API を呼び出すだけです。
例としては何でもよいのですが、ここでは、S3 バケットの情報を取得してみます。
各 AWS サービス用のパッケージは github.com/aws/aws-sdk-go-v2/service/サービス名
という名前で提供されているので、これを go get
しておきます。
$ go get github.com/aws/aws-sdk-go-v2/service/s3
下記のサンプルコードを実行すると、S3 バケットの一覧(作成日とバケット名)を出力します。
このサンプルコードでは S3 サービスの API を使用しましたが、他の AWS サービスに関しても同様に操作することができます。