【AWS、golang】

2022/03/30に公開

EC2にsshログインしてHelloWorld

1:VPCを作成する
2:サブネットを作成する
3:セキュリティグループを作成する
下記のEC2インスタンス作成時に作れる
SSH,TCP,22,マイIP
4:EC2インスタンスを作成する
先ほど作成したVPC、サブネットを選択して「自動割り当てパブリック IP」を有効にする
自動割り当てパブリック IP
5:SSH接続をする

ssh-keygen -t rsa

(aaaの部分は自分のPC名になるはず)
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/aaa/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/aaa/.ssh/id_rsa
Your public key has been saved in /Users/aaa/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:yGsrzqjk5P0uIETSJiUZI6SdVsVdFr10ZJ9M9TZBMm0 aaa@aaa.local
The key's randomart image is:
+---[RSA 3072]----+
|**. .o.. .+o +=+o|
|*=oo  . ..  o.*E+|
|+o+        . o.++|
| o   . .    .  ..|
|.     o S        |
|..     .         |
|.o.   o          |
|= .+.. .         |
|.+.o*+.          |
+----[SHA256]-----+
mv ~/Downloads/sample2.pem ~/.ssh/sample2.pem 
ls

id_rsa		id_rsa.pub	sample2.pem
chmod 600 ~/.ssh/sample2.pem


デフォルトUserが「ec2-user」のため
ssh -i ~/.ssh/秘密鍵 ユーザー名@54.199.20.230

ssh -i ~/.ssh/sample2.pem ec2-user@54.199.20.230


       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-4-131 ~]$ 


go version
go version go1.15.14 linux/amd64

git clone https://github.com/kazuki-shimura/go_hello.git
ls
go_hello
cd go_hello
go run main.go
もしくは
go build ./
./main
amazon-linux-extras list | grep golang

sudo amazon-linux-extras install golang1.11
Installing golang~~~
exit

ログアウト
Connection to 54.199.20.230 closed.

これ以上使う必要がなければ削除

rm -r sample2.pem
rm -r id_rsa
rm -r id_rsa.pub

ls

S3へのファイルアップロード

前提としてAWSコンソールからS3バケットを作成しておく。

aws-sdk-goを使用するためimportしておく

terminal
go mod init s3_go      
go get -u github.com/aws/aws-sdk-go
go mod tidy

変数を定義の定義を行う。

オブジェクト名=key
image/をつけることで、imageフォルダの中に「xxxxx」というオブジェクト名で保存できる。

s3_go.go
package main

import (
	"log"
	"os"

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

var awsRegion = "ap-northeast-1" // awsのリージョン名
var bucket = "xxxxxxxxxxx" // S3のバケット名
var key = "image/xxxxx" // S3に保存するオブジェクト名
var filePath = "./xxxxx.jpeg" // 画像のローカルのファイルパス

session,S3クライアントの作成

S3にアップロードに必要なセッションとS3クライアントを作成。
オプションの「SharedConfigState」に「SharedConfigEnable」を設定することで、
自分で設定している ~/.aws/config内を参照できるようになる。
また、Configでリージョンを指定しつつsessionを使用してS3クライアントを作成。

func main() {

	// 画像の読み込み
	imageFile, err := os.Open(filePath)
	if err != nil {
		log.Fatal(err)
	}
	// 画像ファイルを閉じる
	defer imageFile.Close()

	// sessionの作成
	newSession := session.Must(session.NewSessionWithOptions(session.Options{
		SharedConfigState: session.SharedConfigEnable,
	}))
	
	// S3クライアントの作成
	svc := s3.New(newSession, &aws.Config{
		Region: aws.String(awsRegion),
	})

S3へのアップロード

paramsにアップロードする内容を詰める。

	// アップロード内容をparamに代入
	params := &s3.PutObjectInput{
		Bucket: aws.String(bucket), // アップロード先のS3のバケット
		Key: aws.String(key), // アップロードする際のオブジェクト名
		Body: imageFile, // アップロードする画像ファイル
	}

	// S3へアップロード
	_, err = svc.PutObject(params)
	if err != nil {
		log.Fatal(err)
	}
	log.Println("S3へアップロード完了")
}

参考資料
https://dev.classmethod.jp/articles/creation_vpc_ec2_for_beginner_1/#toc-4
https://dev.classmethod.jp/articles/creation_vpc_ec2_for_beginner_2/
https://qiita.com/takuma-jpn/items/b2c04b7a271a4472a900
https://qiita.com/wakahara3/items/52094d476774f3a2f619
https://qiita.com/gurensouen/items/7382c2d14763436466d2
https://qiita.com/yuta_vamdemic/items/3e16d16c63f4a76a43cc
https://www.youtube.com/watch?v=C_QzIpPsexs

Discussion