⛳
【AWS、golang】
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へアップロード完了")
}
参考資料
Discussion