【Go言語初心者】EC2インスタンス作成〜Vscodeで「hello go」するまで

Go言語の勉強をするなら、
いっそのこと、インスタンス上で勉強をしたいと思いhello goを出すまでできたので、
備忘録として記録しております。

##  環境
・MacOS 
・Visual Studio Code
・Amazon linux2
・Go


[1.インスタンスの作成](#1-はじめに)
[2.EC2にSSH接続する](#2-EC2にSSH接続する)
[3.golangインストール](#3-golangインストール)
[4.vscodeでリモート接続する](#4-vscodeでリモート接続する)
[5.参考](#5-参考)

##1. EC2インスタンスの作成
AWSの画面は日々変わっていきますが、操作自体はそんなに変わらないと思います。
![スクリーンショット 2021-05-29 20.13.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700627/1ca4c898-8e53-4e74-c301-8a584b7c27c6.png)

まず、オレンジボタンの**「インスタンスを起動」**をクリックします

![スクリーンショット 2021-05-29 20.16.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700627/6cc06c0d-1e4f-ef63-0a20-bd7daa21333b.png)

次にAMI（インスタンスを起動するのに必要なOSなどのテンプレート）を選択します。
今回は**Amazon Linux2**を選択します。

※左のサイドバーから、自分で作ったAMIや最初からWordpressが一緒に貼っているAMIなどを選ぶこともできます。

ステップ２: インスタンスタイプの選択は、無料枠の**t2.micro**を選択します。

※規模などにより、タイプが変わるかと思いますが、
勉強用やポートフォリオ用なら、無料枠で十分だと思います。

![スクリーンショット 2021-05-29 20.28.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700627/e8cc1b7c-f9f5-7f15-643d-ff353562f49f.png)

ステップ３：　インスタンス詳細の設定
デフォルトでも問題はないかと思います。
今回は、サブネットを**パブリック**に、
自動割り当てパブリックIPをインターネットから接続ができるようにしたかったので、**有効**にします。

ステップ４：　ストレージの追加
EBS ボリュームやインスタンスストアボリュームをアタッチをアタッチできるそうですが、
これは置いといて、サイズを部分を指定できます。今回はデフォルトの８GBにします。

※終了時に削除は、チェックが入っていればインスタンスを削除した際、このボリュームも一緒に削除されるのですが、
チェックが入っていないと存在したままになってしまい、無駄に課金が続いてしまうようです。

ステップ５：　タグの追加
キーに**Name**、値に**任意の名前**を入れると、
インスタンス一覧画面のNameに反映され管理しやすくなります。
Nameの変更は後からでもすることができます。

![スクリーンショット 2021-05-29 20.43.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700627/52ec9595-2b3c-2818-75e1-d090fb13abfe.png)

ステップ６：　セキュリティグループの設定
[Amazon EC2 セキュリティグループ](https://qiita.com/leomaro7/items/42967c080814dfc82139)
こちらの記事で詳しい説明がされております。

デフォルトでSSH接続はできるようになっているで、
今回は**HTTPとHTTPS**を追加しました。

ステップ７：　インスタンス作成の確認
設定の確認画面です、問題なければ**起動**をクリックします。

起動をクリック後、キーペアの画面が表示されます。
とても大事なものになり、この画面からしかダウンロードができません。
その後、間違えて削除したら、キーペアの再発行はできるのですが、
手順が複雑なため大切に保管しましょう！

※.cerで保存されていた場合は、拡張子を.pemに変更します。

キーペアのダウンロードが終わりましたら、
インスタンスが起動してきます。

インスタンス一覧画面で、インスタンスの状態が**「実行中」**になったらインスタンスの作成は終了です。

##2. EC2にSSH接続する
ダウンロードしたキーペアがあるディレクトリに移動します。

```
// キーペアがちゃんと保存されているか確認する
$ ls -l キーペア名.pem

// ssh接続する
$ ssh -i キーペア名.pem ec2-user@パブリックID
```

Are you sure you want to continue connecting?(接続を続行してもよろしいですか？)
と効かれるので**yes**を入力し、
EC2のロゴが表示されれば、接続完了です。

##3. golangインストール
EC2の中に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
```
バージョンが表示されたら成功です。

##4. vscodeでリモート接続する
VsCodeの拡張機能から、**「Remote SSH」**をインストールします。

インストール後、左のメニューにパソコンマークの
リモート接続アイコンが表示されるので、それをクリックして開きます。

SSH TARGETSの＋アイコンを押して、
出てきたダイアログに、先ほどEC2にSSH接続した時のコマンドを入力します。

```
ssh -i キーペア名.pem ec2-user@パブリックID
```
※ec2-userのところは選択したAMIによって変わります。

次にダイアログからどのconfigファイルを利用するか選択します。
どちらでも大丈夫です。

その後、右下にファイルを開くかどうかポップアップが出るので、
**Open Config**で開きます。

![スクリーンショット 2021-05-29 21.21.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700627/da92d51e-f833-e9b0-9d72-9daf472ef63e.png)

configファイルが開きますので、
UserはAMI、IndentityFileはキーペア.pemのディレクトリを書きます。

あとは、左のメニューのSSH TARGETSの下に今作成した
configファイルのHost名が表示されているので、
右クリックから、**Connect to Host in Current Window**をクリックします。

しばらく待ちますと、
![スクリーンショット 2021-05-29 21.26.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700627/98453e72-d2f6-451e-e0fd-3ab3fd726c9b.png)

上記のような画面が表示されるので、
goファイルを作成し、hello worldを書いて、
ターミナルにhello worldが表示されました。
よかったです(ｏ'∀')ﾉ

##5. 参考
[VSCodeを使ってAWS EC2のソースコードを編集する](https://qiita.com/takao-takass/items/9f81d5095924280966ae)
[VSCodeを使ってAWS EC2のソースコードを編集する[(https://qiita.com/takao-takass/items/9f81d5095924280966ae)