インフラ

EC2でgolangの開発環境を構築する

こんにちは、ちゃりおです。
golangのリモート開発環境の作り方です。

EC2にgolangを入れて、VSCodeから繋ぎます。

事前準備

  • AWSアカウント
  • awscli
  • VSCode

EC2の準備

golangの開発環境用のEC2を準備していきます。

既存のキーペアを使う場合は、以下のコマンドでキーペア一覧を取得できます。

aws ec2 describe-key-pairs --query "KeyPairs[].KeyName"
[
    "hogekey",
    "fugakey",
    "hoge2key",
    "fuga2key"
]

取得したキーペアをセットして、EC2を起動します。

$ KEY="" #キーペア名
$ aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \ # amazonlinux2
    --instance-type t3a.nano \
    --key-name $KEY
    --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=golang}]'

SSHするためにセキュリティグループに自分のグローバルIPアドレスを追加します。

 #セキュリティグループID取得
$ aws ec2 describe-instances --filter "Name=tag:Name,Values=golang" \
--query "Reservations[].Instances[].SecurityGroups[]"
SGID="" #セキュリティグループID
aws ec2 authorize-security-group-ingress \
  --group-id $SGID \
  --protocol tcp --port 22 --cidr <自分のグローバルIP>

SSHするために、EC2のグローバルIPを取得します。

$ aws ec2 describe-instances --filter "Name=tag:Name,Values=golang" \
--query "Reservations[].Instances[]..PublicIpAddress"

SSHできることを確認します。

ssh -i <キーペアの秘密鍵> ec2-user@<グローバルIP>

golangのインストール

amazon-linux-extrasでもインストール出来ますが、バージョンが古いことがあるのでwgetでインストーラーを取ってきます。

ほぼ公式の手順と同様です。

$ wget https://golang.org/dl/go1.16.2.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go1.16.2.linux-amd64.tar.gz

パスを追加して、バージョン確認できたら完了です。

$ sudo vi /etc/profile 
# 末尾に以下を追記
PATH=$PATH:/usr/local/go/bin
$ source /etc/profile
$ go version
go version go1.16.2 linux/amd64

EC2にVSCode「Remote-SSH」で接続する

VSCodeからEC2に繋ぐために、ssh configを設定しておく必要があります。

vi ~/.ssh/config
Host golang
  Hostname <グローバルIP>
  User ec2-user
  Port 22
  IdentityFile <キーペアの鍵>

VSCodeを開いて、「Remote SSH」の拡張機能をインストールします。

画面左側から「Remote SSH」を選んでssh configで設定したターゲットを選択します。

こんな感じに、EC2側のフォルダーが見えるので適当に選択します。

「hello.go」という名前でファイルを作成して、以下を貼り付けて保存します。

package main

import "fmt"

func main() {
  fmt.Printf("Hello world\n")
}

「Hello world」が出力できたら完了です。

[ec2-user@ip-172-XX-XX-XX ~]$ go run hello.go
Hello world

まとめ

EC2にgolangの開発環境を構築する方法でした。
EC2の構築にをcliで使いましたが、使いまわしたり作成・削除を繰り返すようであればCDKにするのも良いかもしれません。

golangの勉強やっていこうと思います。

Aamzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

cdk_jawsdays2021
JAWS DAYS2021登壇レポート 1年間運用して分かったCDKアンチパターンJAWS DAYS2021で「1年間運用して分かったCDKアンチパターン」というタイトルで登壇させていただきました。 発表内容と登壇レポ...
EC2 AmazonLinux2でyumが失敗するときに疑うこと 3つの解決策こんにちは、ちゃりおです。 適当にEC2作成したら、yumでエラーがでて焦りました。 (よくよく考えたら「それはそうだよな」と思いまし...
aws ssm
AWS SSMセッションマネージャTips AWS CLIこんにちは、ちゃりおです。 SSMセッションマネージャを使えば、EC2インスタンスにSSH不要で入れます。 マネジメントコンソールから...