Goの開発環境にAWS Cloud9をつこうてみる

どうも、moriです。

AWS SDK for Goを使う開発で開発環境 (IDE)としてAWS Cloud9を使ってみたので、作成方法と実際にコードを書いてデバッグ実行するところまでを紹介したいと思います。

AWS Cloud9概要

ブラウザのみでコードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE) です。

  • コードエディタ
  • デバッガー
  • ターミナル

が内包されており、多くの言語ツールがサポートされています。サポートされているブラウザは、Google Chrome、Safari、Firefox、Microsoft Edge の最新バージョンです。

大きな特徴として、以下が挙げられます。

ペアプログラミングサポートをサポートしている

開発環境をチームと共有し、ペアプログラミングを一緒に行うことができます。

リアルタイムで確認できるので、拠点の離れたメンバーともやりやすいかと思います。

サーバーレスアプリケーションとの親和性

サーバーレス開発に必要な SDK、ライブラリ、プラグインのすべてを使用して開発環境が事前設定されます。AWS Lambda 関数をローカルでテストおよびデバッグするための環境を利用することができます。

Lambdaをローカルで動かせるのは便利ですね。

多くの言語に対応

Node.js (JavaScript)、Python、PHP、Ruby、Go、C++ など、40 以上のプログラミング言語をサポートしています。多くの一般的なプログラミング言語のシンタックスハイライト、アウトラインビュー、コードヒント、コード補完、アプリケーション実行機能、ステップスルーデバッグなどの機能が含まれています。

IDEにプラグインを入れる手間が省けるのでは無いでしょうか。

キーバインドモード

  Vim, Emacs, Sublimeのキーバインディングもサポートされています。

  愛好家も安心ですね。

料金

AWS Cloud9 には追加料金はかかりません。

EC2インスタンスを使用して環境を作成した場合、コンピューティング とストレージのリソース分の料金がかかります。

AWS Cloud9 料金 をご参照ください。

セットアップ方法

前提条件として、以下のことが必要です。

  • AWSアカウントの作成
  • IAMユーザーの作成

環境の作成

1. ウェルカムページにアクセス

https://ap-northeast-1.console.aws.amazon.com/cloud9/home/product にアクセスし、Create enviroment をクリックします。

2. 環境に名前をつける

name, descriptionを入力する画面に遷移するので、必要な情報を入力します。

3. 環境の設定を行う

AWS Cloud9では、新規にEC2を立てるか、既存のLinuxサーバー上に環境を作るか選択できます。今回はEC2を新規に立てる方法を使いました。

Environment type EC2を新規に立てるか、既存のLinuxサーバーにssh接続して使うか選択
Instance type EC2を新規に立てる時のインスタンスタイプを選択
Platform OSの選択
Cost-saving setting 環境のIDEに接続されているすべてのウェブブラウザインスタンスが閉じられてから、AWS Cloud9 によって環境の Amazon EC2 インスタンスがシャットダウンされるまでの時間を選択。デフォルトは30分。
Network settings (advanced) EC2を起動するVPCを選択。

使用していない時間帯はEC2をシャットダウンして無駄な課金を発生させないようにCost-saving settingは必ず設定します。

4. 設定内容の確認

確認ページで設定した内容を確認し、Create enviroment をクリックします。環境が作成されるまでは数分かかります。

起動が完了すると、IDEの画面に遷移します。

IDEを使う

無事にIDEが起動できたので、golangを使って、EC2の情報を引っ張ってくるプログラムを書いてみます。

AWS Cloud9のgoのバージョンは

$ go version
go version go1.12.8 linux/amd64

でした。

AWS SDK for Go をインストール

AWS Cloud9のターミナルから ~/.bashrcを開いて以下のコードを記述。

GOPATH=~/environment/go
export GOPATH

~/.bashrcを実行し、ターミナルが今参照した GOPATH 環境変数を見つけられるようにします。

. ~/.bashrc

GOPATH 環境変数を読めるか確認します

echo $GOPATH
/home/ec2-user/environment/go

go get コマンドでsdkを入手します。

go get -u github.com/aws/aws-sdk-go/...

ls -la $GOPATH/src/github.com/aws/aws-sdk-go 

コードを追加

AWS SDKを使い、EC2のインスタンスタイプとインスタンスの状態を表示するコードを追加してみます。

AWS Cloud9 EC2開発環境に設定されているcredentialを使用します。

AWS Cloud9 EC2開発環境の場合、AWS管理の一時認証情報は、呼び出し元のAWSアカウント内のすべてのAWSリソースに対してすべてのAWSアクションを許可します

今回は ec2 describe-instance の権限が必要なのですが、呼び出し元のAWSアカウント内で許可されているので実行できます。

EC2開発環境に認証情報を保存する場合は、AWS Cloud9 の環境から AWS のサービスを呼び出す をご参照ください。

AWS Cloud9で以下の内容のファイルを作成し、main.goという名前で保存します。

package main

import (
	"fmt"

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

func main() {
	sess := session.Must(session.NewSession(&aws.Config{
		Region: aws.String("ap-northeast-1"),
	}))

	ec2 := ec2.New(sess)
	res, _ := ec2.DescribeInstances(nil)

	for _, r := range res.Reservations {
		for _, i := range r.Instances {
			fmt.Println(*i.InstanceType, *i.State.Name)
		}
	}
}

コードの実行

AWS Cloud9 IDE のメニューバーのRunボタンをクリックします。

実行すると、IDEの下に実行結果が表示されるタブが作成され、実行結果がわかります。

最後に

クラウド開発環境の作成、コードの実行まで行いました。

各個人のローカル環境に左右されず、比較的簡単に、そして早く導入できるため開発環境として利用する価値はあると感じます。 ぜひ活用してみてください。

皆様の開発が捗りますように。

参考