taisablog

taisa's engineer blog

no image

【15分でできる】EC2(Web+DB)ネットワーク構築 〜画面ポチポチ〜

2020/09/02   -未分類

最近EC2を使うケースは少ないですが、まずは基本としてオーソドックスなEC2+ネットワーク構築の流れをまとめました。 VPCを作成する IPv4 CIDERブロックを「10.0.0.0/16」にしてVPCを作成します。 DNSホスト名を利用するのでVPCのDNSホスト名をONにします。 パブリックサブネットを作成する 作成したVPCを選択し、IPv4 CIDERブロックを「10.0.1.0/24」にして作成します。 プライベートサブネットを作成する 作成したVPCを選択し、IPv4 CIDERブロックを「10.0.2.0/24」にして作成します。 インターネットゲートウェイを作成する 作成したインターネットゲートウェイをVPCにアタッチします。 VPCにパブリックルートテーブルを作成する 作成したVPCにパブリックルートテーブルを作成します。 作成したパブリックルートテーブルに「サブネットの関連付け」からパブリックサブネットを関連付けます。 パブリックサブネットに関連づけたルートテーブルのルートを編集し、送信先を「0.0.0.0/0」としターゲットにインターネットゲートウェイを設定します。 WebサーバーとしてEC2を作成する 作成した VPCを設定とパブリックサブネットを設定します。 IPはパブリックサブネット内の「10.0.1.10」を割り当てます。 「セキュリティグループ」をソース「カスタム」で「0.0.0.0/0」にして作成します。EC2インスタンスが作成できたらElasticIPを関連付けます。 鍵を取得してEC2にSSHアクセスする # 例 $ chmod 400 ~/.ssh/my-key.pem $ ssh -i ~/.ssh/my-key.pem ec2-user@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com Nginxをインストールする # インストール $ sudo yum -y install nginx # サービス起動 $ sudo service nginx start # 自動起動ON $ sudo chkconfig nginx on セキュリティグループ(ファイアウォール)を設定する 「インバウンドルール」にHTTP(80ポート)で「0.0.0.0/0」を設定しWebからのアクセスを許可します。 「パブリック DNS」でブラウザからアクセスができることを確認します。 DBサーバーとしてEC2を作成する 作成したVPCとプライベートサブネットを設定します。パブリックIPは不要なので自動割り当てパブリックIPを無効化します。 内部IPをプライベートサブネット内の「10.0.2.10」に設定します。 プライベートサブネットからしかアクセスしないので「セキュリティグループ」をソースカスタムで「SSH」と「MySQL/Aurora」にパブリックサブネット「10.0.1.0/24」を指定します。 Webサーバーに秘密鍵(my-key.pem)を送り、WebサーバーからDBサーバーにアクセス可能にします。 # 秘密鍵をWebサーバーに送る $ scp -i ~/.ssh/my-key.pem ~/.ssh/my-key.pem ec2-user@ec2-18-178-132-45.ap-northeast-1.compute.amazonaws.com:~/.ssh/ # Webサーバーアクセス $ ssh -i ~/.ssh/my-key.pem ec2-user@ec2-18-178-132-45.ap-northeast-1.compute.amazonaws.com # 権限変更 $ chmod 400 ~/.ssh/my-key.pem # DBサーバーアクセス $ ssh -i ~/.ssh/my-key.pem ec2-user@10.0.2.10 パブリックゲートウェイにNATゲートウェイを作成する DBサーバーにMySQLをインストールするためにパブリックサブネットのNATゲートウェイを通してインターネットへ接続可能にします。 メインのルートテーブルに送信先「0.0.0.0/0」としてNATゲートウェイを設定します。 MySQLをインストールする # インストール …

no image

docker-compose&dockerizeでGo+MySQLのWebサーバーを起動する

2020/08/29   -Go

docker-composeでGo + MySQLを起動する場合、MySQLの起動を待ってGoのWebサーバーを起動する必要があります。実現するにはどうやらスクリプトを書かないとだめらしいですが、dockerizeを使うと簡単に実現できます。 サンプル用Goサーバを作成する 起動時にusersテーブルを作成し、リクエスト時にusersテーブルにレコードをinsertする簡単なサンプルアプリケーションです。 package main import ( “database/sql” “encoding/json” “fmt” “log” “net/http” “os” _ “github.com/go-sql-driver/mysql” “github.com/joho/godotenv” ) type User struct { FirstName string `json:”firstName”` LastName string `json:”lastName”` } var db *sql.DB func main() { err := godotenv.Load() if err != nil { log.Fatal(err) } db = Conn() defer db.Close() _, err = db.Exec(“CREATE TABLE IF NOT EXISTS users(id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(255) NOT NULL, lastname VARCHAR(255) NOT NULL)”) if err != nil { log.Fatal(err) } http.HandleFunc(“/users”, users) err = http.ListenAndServe(os.Getenv(“LISTEN_PORT”), nil) if err != nil { log.Fatal(err) } } func Conn() *sql.DB { db, err …

no image

2020年半年の振り返り

2020/07/14   -未分類

2020年も半年が過ぎたので年初に立てた抱負を簡単に振り返ってみます。 2020年の抱負 2020年の抱負 Golang(◯)業務でやれたのでVueJS(△)業務で少しやれたのでReact(✕)Pending(やりたいけど)TypeScript(△)読書会で少しずつ進めてるのでAWS(◯)業務でやれたのでPython (Flask)(◯)大分理解できたので執筆(◯)遅れつつも着実に進められているのでブログ継続(△)執筆に時間をさいているので少なめなので現時点でこの記事含めると8記事なので6記事Delay会社のDeveloperブログが立ち上げられたのでよかった 中長期的な話 楽しく仕事をする 良いプロダクト(◯)良いメンバー(◯)良い技術スタック(◯) これは今の所継続できていますが、年初に採用もやることになってエンジニア採用ができなかったのは反省点。これまでがっつりやることなかったので良い経験にはなりました。 生活面 腕立て・スクワット・プランク(◯)ランニング(✕)後半もリモートが続きそうなので厳しそう家で飲みすぎない(◯)家でタバコをなるべく吸わない(✕)後半もリモートが続きそうなので厳しそう 会社で週1で走ってましたが、フルリモートになったのでランニングはできなくなりタバコ(IQUOS)の量は増えました。筋トレはやり方を変えつつも継続できています。 まとめ Goを書きつつインフラ周りの作業をすることも多くなってきて、これまでやりたくてもできなかったところでもあるのでだいぶ楽しくなってきました。執筆もあと一息なのでなんとか予定通りに仕上げて年内には完成させたい。

no image

docker-composeでGoのWebサーバーを起動する

2020/07/12   -Go

ミニマムにやっておかないと忘れがちなのでメモ サンプル用Goサーバを作成する package main import ( “encoding/json” “net/http” ) type User struct { FirstName string `json:”firstName”` LastName string `json:”lastName”` } func users(w http.ResponseWriter, req *http.Request) { w.Header().Set(“Content-Type”, “application/json”) user := User{ FirstName: “John”, LastName: “Doe”, } var users []User users = append(users, user) json.NewEncoder(w).Encode(users) } func main() { http.HandleFunc(“/users”, users) http.ListenAndServe(“:8002”, nil) } 普通に起動して動作確認をします。 $ go run main.go http://localhost:8002/usersにアクセスするとJSON結果が出力されます。 [ { “firstName”: “John”, “lastName”: “Doe” } ] Dockerfile FROM golang:1.14 #FROM golang:1.14-alpine # コンテナログイン時のディレクトリ指定 WORKDIR /opt/sandbox-docker-compose-go # ホストのファイルをコンテナの作業ディレクトリにコピー COPY . . # ADD . . # ビルド RUN go build -o app main.go # 起動 CMD [“/opt/sandbox-docker-compose-go/app”] docker-compose.ymlファイル version: ‘3’ …

no image

DockerでGoのWebサーバーを起動する

2020/07/12   -Go

ミニマムにやっておかないと忘れがちなのでメモ サンプル用Goサーバを作成する package main import ( “encoding/json” “net/http” ) type User struct { FirstName string `json:”firstName”` LastName string `json:”lastName”` } func users(w http.ResponseWriter, req *http.Request) { w.Header().Set(“Content-Type”, “application/json”) user := User{ FirstName: “John”, LastName: “Doe”, } var users []User users = append(users, user) json.NewEncoder(w).Encode(users) } func main() { http.HandleFunc(“/users”, users) http.ListenAndServe(“:8002”, nil) } 普通に起動して動作確認をします。 $ go run main.go http://localhost:8002/usersにアクセスするとJSON結果が出力されます。 [ { “firstName”: “John”, “lastName”: “Doe” } ] Dockerfile Dockerfileを作成します。alpineをつけるとよりミニマムなイメージができます。参考(https://hub.docker.com/_/golang?tab=description) FROM golang:1.14 #FROM golang:1.14-alpine # コンテナログイン時のディレクトリ指定 WORKDIR /opt/sandbox-docker-go # ホストのファイルをコンテナの作業ディレクトリにコピー COPY . . # ADD . . # ビルド RUN go build -o app main.go # 起動 CMD [“/opt/sandbox-docker-go/app”] 構成 $ …

no image

【3分で作れる】Goのコマンドラインツール by Cobra

2020/05/16   -Go
 ,

同僚のおすすめでコマンドラインツール作成にCobraを使いました。ものすごく簡単につくれるのですが、それでも少しハマったところがあったので、コマンドラインツールを作るまでの流れを書いておきます。 前提 go version go1.14.2 darwin/amd64利用ライブラリ:https://github.com/spf13/cobra本記事のサンプルコード:https://github.com/taisa831/sandbox-cobra Index 雛形を作成するコマンドを追加するコンフィグを追加するサブコマンドを追加するまとめ 雛形を作成する 雛形作成にはgeneratorを使います。go getしてcobraコマンドを利用可能にします。 go get -u github.com/spf13/cobra/cobra cobraコマンドを実行すると以下のようなusageが表示されます。 $ cobra Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application. Usage: cobra [command] Available Commands: add Add a command to a Cobra Application help Help about any command init Initialize a Cobra Application Flags: -a, –author string author name for copyright attribution (default “YOUR NAME”) –config string config file (default is $HOME/.cobra.yaml) -h, –help help for cobra -l, –license string name of license for the project …

no image

AWS LightsailでVirtual Hostするメモ

2020/05/12   -未分類

AWS Lightsailにwordpressを移行して、LightsailでVirtual Hostを利用したいと思ったけど、bitnami、Apacheということでどこになにがあるかわからず調べたのでメモ。 bitnamiのApache設定 /opt/bitnami/apache2/conf/bitnami/bitnami.conf この中で bitnami-apps-vhost.conf が Include されている Include “/opt/bitnami/apps/wordpress/conf/httpd-vhosts.conf” /opt/bitnami/apache2/conf/bitnami/bitnami-apps-vhosts.conf には wordpress の httpd-vhosts.conf が Include されている Include “/opt/bitnami/apps/wordpress/conf/httpd-vhosts.conf” wordpressのprefixにはDocumentRootが記述されている Include “/opt/bitnami/apps/wordpress/conf/httpd-vhosts.conf” /opt/bitnami/apps/wordpress/htdocs/sampleのようにhtdocsの配下にディレクトリを作成してindex.htmlを置き、sample.taisablog.com ドメインにDNS設定を追加してあげればとりあえず、VirtualHostが追加できる <VirtualHost *:80> ServerName sample.taisablog.com DocumentRoot “/opt/bitnami/apps/wordpress/htdocs/sample” Include “/opt/bitnami/apps/wordpress/conf/httpd-app.conf” </VirtualHost> Apache再起動 sudo /opt/bitnami/ctlscript.sh restart apache

GORMでよく使うSQLの書き方

2020/04/25   -Go

GORMでよく使うSQLの書き方をメモとして残しておきます。詳細は記事最後の参考リンクの公式ドキュメントで確認できます。 CREATE insertするだけであれば create を利用します。 db.Create(&models.User{Name: “user”}) # 実行SQL INSERT INTO “users” (“created_at”,”updated_at”,”name”,”email”) VALUES (‘2020-04-25 11:22:00′,’2020-04-25 11:22:00′,’user’,0) UPDATE 特定のフィールドだけ更新したい場合、 Update と Updates を使います。 update 一つのフィールドだけアップデートします。 user := &models.User{Name: “user”} db.Create(user) db.Model(user).Update(“name”, “user2”) # 実行SQL INSERT INTO “users” (“created_at”,”updated_at”,”name”,”email”) VALUES (‘2020-04-25 11:34:39′,’2020-04-25 11:34:39′,’user’,”) UPDATE “users” SET “name” = ‘user2’, “updated_at” = ‘2020-04-25 11:34:39’ WHERE “users”.”id” = 5 updates updates は map を利用して複数のフィールドをアップデートします。 user := &models.User{Name: “user”} db.Create(user) db.Model(user).Updates(map[string]interface{}{“name”: “user3”, “email”: “g5.taisa831@gmail.com”}) # 実行SQL INSERT INTO “users” (“created_at”,”updated_at”,”name”,”email”) VALUES (‘2020-04-25 11:39:52′,’2020-04-25 11:39:52′,’user’,”) UPDATE “users” SET “email” = ‘g5.taisa831@gmail.com’, “name” = ‘user3’, “updated_at” = ‘2020-04-25 11:39:52’ WHERE “users”.”id” = 6 SAVE Save は SQL を実行する際にすべてのフィールドを含みます。フィールドを指定しなくても空にはなりません。 user := &models.User{Name: …

no image

2020年の抱負

2020/01/09   -Uncategorized

気づけば長年PHPの環境にいましたが、昨年あらたな環境で開発できるようになったのでこれらを軸にビジネスにつなげていきたいと思います。 毎年書いていますが、自分は積んでるエンジンが小さい上に車体も故障気味なので多くのことはできないですが、できる限り工夫してやっていきます。 GolangVueJSReactTypeScriptAWSPython (Flask)執筆ブログ継続 中長期的な話 3~5年スパンで中長期的なことを考えてやりたいこと・やらないことを決めて微調整しながらコツコツやっていますが、昨年環境が変わったこともありあらためて少し考え直しました。 楽しく仕事をする 今がめちゃくちゃ楽しいのでこれを維持したいのが本音です。ビジネスが広がりつつこれを維持しつつ更によくすることに注力します。 良いプロダクト良いメンバー良い技術スタック これが自分の意識する3本柱です。どれがかけてもだめなのでこれらをどうするかを考えて行動します。 生活面 体力の衰え、太りやすさを感じる年齢にもなってきたので昨年末から下記をするようになりました。これらをスモールスタートで継続します。 腕立て・スクワット・プランクランニング家で飲みすぎない家でタバコをなるべく吸わない ブログ書くネタが沢山できて嬉しい限り。そして何より「家内安全」「健康第一」で!

no image

2019年 振り返り

2020/01/01   -Uncategorized

2019年の抱負から今年を振り返ってみます。子供らが遊んでいる中で書いているのでかなり雑です。あとできれいにします。 Google Cloud Platformを使う 2018年後半から2019年前半にかけて副業でFirebaseでスマホアプリのサーバサイドをやりました。感じたことはGCPめっちゃいいということ。メインで利用したのはCloudFirestoreとCloud Functionsでしたが他にも色々できるのですごい進化を感じました。 数学をやる 2019年前半に中学レベルの数学までを復習しました。やってみて思ったことは業務で必要にならない限りは継続が難しいことでした。 宅建をとる 以下で書いたので割愛 http://3.115.145.106.xip.io/archives/1629 体力をつける 会社でランニング部があり今年は多少ですが走ることができました。また、久しぶりに筋トレも再開することができました。2020年はこれらの活動を増やして継続していきたいです。 やらなくてよかったこと 何年かやってみてやらなくてよいことが見えてきました。というより実務で必要にならない限り習得が難しいです。重要だしやりたいけどサブでやるには継続が難しく思ったような成長曲線が描けません。逆に英語のリーディングは日常で使うのでそっちに極振りしています。 機会学習数学英語のスピーキング アウトプット ブログ:22記事QIITA:2記事 合計24記事ということで月2記事のペースは維持できました。特別気にしていませんが月間PVも約1万と少しずつ伸びてきていていい感じ。 まとめ ここ数年はテックリード、スクラムマスター、マネージメント業務が多く業務で開発をする機会が減っていましたが、今年の後半は最高の会社・メンバー・プロダクト・技術スタックでいろんなことがとても充実した1年になりました。 VueJSTypeScriptGolangAWSMicro Servicesコーチング