楽になるためのエンジニアリング

楽に暮らせることを目指すエンジニアのインプット&アウトプット

技術書レビュー : Amazon Web Servicesクラウドデザインパターン設計ガイド 改訂版

AWSをしばらく使ってきたけど、今までAWS関連の技術書は読んだことなかったので読んだ一冊。

本について

AWSを使ってできることを一部紹介してくれている本。

  • EC2やS3個別なサービスについて応用的な使い方の紹介。

  • EC2とS3など複数サービスを利用してのサービスにおけるバックエンドデザインパターンの紹介。

など、WEBサービスにおける使い方を色々と紹介してくれている。 これさえ読んでおけばある程度はAWSを利用したWEBサービスの構築方法をしることができる。

参考になった度 : 70/100

AWSはとりあえず業務で使用するレベルだったのでとりあえず色々と参考になった。 例えば↓な感じですぐに参考になるものもあった。 AWSのAMIを利用して開発環境を簡単に用意する - 楽になるためのエンジニアリング

詳細な操作方法等は記載されていないためそれは自分で調べる必要がある。 また、料金も記載されていないので 「とりあえず記載されている通りに構築したら後々の明細にびっくり」 なんてこともありえるので注意。

いつかもう一度読みたい度 : 60/100

直近でAWSで新しくサービスのバックエンドの構築をする必要があるならば見るかもだけど、それ以外はもしかしたら読まないかも。 AWSを利用したデザインパターンは日々変わっていくと思うので、こればっかり参考にするわけではなく都度最新を追っていく必要はある。

お勧めしたい人

  • AWSを少し触ってある程度EC2インスタンスの構築やS3バケットの利用方法を覚えた人。

  • AWSを利用してこれからバックエンドの構築を考えている人。

WEBサービスにおいてAWSを利用しているけど、どうしたら便利に使えるかわからない時に読むと解決できることがあるかも。

本自体は図もデザインパターンごとに記載されているのでわかりやすく、ページ数も少ないためサクッと読める。

MUSTで読んでおく必要のある本ではないけど、AWSを使い始めたなら読んでおくと良さげ。

ビジネス書レビュー : 7つの習慣 人格主義の回復

超有名なこの本。

先に言ってしまうとこの本は一生私の本棚に入れて置きたい一冊となった。

本について

ビジネス書というよりかは、教科書。人生の。

生きていく上でほとんどの人は人と何かしらの形で関わる訳で、 その際にどのような考え方や習慣を身につけていれば、互いを成功へ導くことができるかを教えてくれた。

単純に7つのテクニックが記載されている訳ではなく、 良い人生を送る為に必要な自己形成の方法を納得のできるフローで説明してくれている。

身につけておくと人生が100%良くなると思える方法を記載している一冊。

参考になった度 : 100/100

個人的には、最初から最後まで納得感のある内容だった。

  • 人に依存している状態からの自立

  • 自立し、一人で完結しているところから、人と良い相互関係になる

という流れで成長の仕方を7つの章に分けて段階的に説明してくれている。 そのため、 「自分はここまではできている」 「ここでちょうど自分はつまづいている」 「次はこうすれば良いのか」 と、現状の把握から、次どうしていけば良いのかを導き出せるので日常的な行動・考え方に反映しやすかった。

突出した内容はなく、勉強・私生活・仕事・スポーツとどのようなことにも当てはまりそうな内容だった為、どんな人でも参考にできる内容となっている。

読みやすさ : 60/100 例がや図が多く使われていて、難しい表現もそこまでなく、章節も比較的小さめになっているので本としては読みやすい。

しかし、ボリュームが結構ある為、気軽に読もうとして読み切れる本ではなかった。

なので読む場合はゆっくり時間をかけて継続的に読める時に読むことをお勧めする。

いつかもう一度読みたい度 : 100/100

定期的に自分を見つめ直すために読みたい。

「現状自分はどのようなことができていて、何が足りなく、次はどのような行動や考え方を意識すれば良いか」

という形で自分を見直す為に使っていこうと考えている。

おすすめしたい人

  • 自分の子供にはいつか絶対読んでもらいたい。

  • 社会人2~3年目の人にお勧めしたい。(1年目はこれよりも業務内容を覚えることの方が大切。)

  • 人間関係で悩みを抱えていたり、仕事でのパフォーマンスをうまく出せていないと思っている人。

読み終えて自分が尊敬している人や、身近で活躍している人は確かにこの本に書かれている内容に当てはまっている(もしくは部分的に当てはまっている)と感じた。

まだ読んでいない人はAmazon Prime会員であればKindleで無料で読めるので是非一度目を通すだけでも良いのでおすすめします。

AWSのAMIを利用して開発環境を簡単に用意する

概要

共同で同じサービスやシステムを開発している際、作っている機能によっては環境に必要なパッケージや設定値などを細かく設定する必要がある。 都度、1から設定していると設定漏れ等により同じ環境を作れなくなったりする。

また、行っている作業によっては作業ミスにより環境を壊してしまって・・・

なんて、事はよくある話だと思われる。

そのような問題を解決する方法はいろいろあるけど、(vagrantとかだとこれ : vagrant環境のboxをバックアップする方法 - Qiita 等) 今回はAWS環境にて行う。

今回行う事

AWS環境のAMIというサービスを利用する事により、使用している環境のバックアップを作成し、複製する。

今回の要素

手順

すでに環境はAWS EC2インスタンスで作成済みのものとします。

Amazon マシンイメージ(AMI)の作成

バックアップの元となるイメージを作成する。

  • EC2 => インスタンスと選択

  • 複製したいインスタンスのメニューから、イメージ => イメージの作成 を選択する

    AMIの作成
    AMIの作成

  • 以下のような作成画面が出てくるので、AMI名、AMIについての説明、作成するAMIに紐づくEBSのスナップショットの設定を入力し、イメージの作成を行う。

    AMIの作成画面
    AMIの作成画面

  • 左側サイドメニューのAMIを選択すると、作成したAMIが表示される。(ステータス = pendingは、現在作成中のAMI)

    AMI一覧
    AMI一覧

  • 使用可能になると、ステータス = availableになる。

    AMI available
    AMI available

これで、AMIの作成完了。

AMIからインスタンスを複製する

作成したAMIをベースにインスタンスを複製する。

  • 左側サイドメニューのAMI => インスタンス作成時のベースとなるAMIを選ぶ。その後AMIのメニューから起動を選択する。

    AMIからインスタンスを起動
    AMIからインスタンスを起動

  • 作成するインスタンスのタイプ等設定を決めてインスタンスを作成する。

    インスタンスの作成
    インスタンスの作成

  • 認証鍵は以前使用していた鍵と同じ鍵でも、新しい鍵をつくるのでもよい。(使用者が自分で、今までの鍵の使用に問題なければ既存の物を使用すれば早い)

    認証鍵の設定
    認証鍵の設定

  • 作成の確認時にAMIが使用されている事を確認できれば、作成を行う。

    ここでAMIが使用されているか確認する。
    ここでAMIが使用されているか確認する。

複製完了

AMIを使用してでの作成完了
AMIを使用してでの作成完了

注意する点

  • インスタンス内での設定は完璧にコピーされるため、インスタンスごとで異なる設定を行う必要がある時にはそれぞれの対応が必要。

  • Route53等DNSの設定等は複製されない。

  • AMIは作成された時点から更新が行われるわけではないので、環境の更新が頻繁に行われるようであれば、どこかでAMIを更新する作業が必要となる。

  • 今のところAMI作成については料金がかからないが、AMI作成の過程にあるEBSのスナップショットの作成については料金が発生する。

これで、いつでも環境を壊す準備ができた。

  • 新しいメンバーが入ってきて環境構築のサポートをしてあげたり

  • 環境を壊してしまって細かい設定を検証しながら復旧させたり

と、細かい問題から

  • サービスの負荷が耐えられないのでインスタンス数を増やして対応する

というところまで、幅広く問題を解決できるため、AWSのEC2インスタンスを使用しているなら是非とも使って置くことをお勧めします。

参考書籍

Amazon Web Servicesクラウドデザインパターン設計ガイド

技術書レビュー : リーダブルコード

有名な一冊。

いつか読もういつか読もう・・・と思い続けて5年間。 今やっと読んだ。

先に言ってしまうと、もっと早く、できれば新卒の時に読んでおけばよかった。

本について

"どういうことに意識したらコードを読みやすく、理解しやすく書けるか"

ということの重要な点を簡潔にまとめた一冊。

読み手の使用するプログラミング言語関係なく読める。

以下感想---

参考になった度 : 100/100

まだコーディングを始めたばっかりでテクニックや、気をつけるポイントを自分の中でまだ定められていない人は是非とも一度読んでみるべき。 すでにコードレビュー担当を任されていたり、それなりに書いている人でも読んでなければ一度読んでみるべき。

とにかく一度読んでみるべき。

「なるほどー」と思うようなテクニックや、「そうだよなー」と改めて見直させられる考え方が満載。

読みやすさ度 : 100/100

  • ページ数は少なめ

  • 1ページあたりの文章量も少なめ

  • 挿絵やコードサンプル多め

なため、ものすごい読みやすい。 頑張れば1日、のんびり読んでも2~3日で読み終えられる。

表現方法も難しい単語等は使用されていなく、スイスイ読める。

もう一度読みたい度 : 50/100

いつかもう一度読むかも。

いろいろなコードを読んだり、意見を聞いたりする度にいろいろな考えが出てくると思う。 そんな時に、一度基本を思い返すために読むかなーぐらい。 読みやすいし。

けど、その時はもしかするとコードコンプリートの方を読み返すかもしれない。

おすすめしたい人

自分の周りにお勧めするとするならば、

  • 新卒

  • チームメンバーの中でまだ読んでいない人

かなーと。

新卒は一度読んで置いた方が良い。

チームメンバーの人には、コードレビューの際に記載されている内容をベースにコメントすることも出てくると思われるため、

  • できるだけ修正を無くしたり、

  • コードの形式を統一するために この本にチームみんなで準拠して書いても良いと思った。 (自分らでコーディング規約を作っても良いかもしれないけど、その労力が大変なため)

また、オフショア開発などで外部に開発を依頼する際、自分らのチームのコーディング規約を伝える労力が出てくるため(海外だとすごく大変)、英語版もあるこの本を伝えてしまった方が楽なケースも出てくる。

誰でも自分の中でコーディングを行う際のポリシーは出てくる。 その際にポリシーのベースを作るための参考として役立つ一冊なので、誰でも一度は読んでおくべき一冊だと思いました。 読みやすいし。

新卒の時にしっかり調べておきたかったweb知識 ~ssh編~

新卒の時になんとなく調べて、そのままなんとなく使っていたのでちゃんと調べて残しておく

SSHとは?

Secure Shellの略。 安全にリモート通信を行うための"クライアント"でプロトコルの1種。

プロトコルにはいくつかの階層がある。 同じ階層にいるのはPCよりweb閲覧等を行う際に使用するHTTP通信など。 (参考 : TCP/IPプロトコルとは パソコン初心者講座)

sshdについて

ssh通信を受けるデーモン。 リモート側で起動され、sshクライアントからのリクエストをlistenする。 これが動作していないとローカル等からのsshを利用したログインを受けることができない。

aws等でインスタンスを立ち上げた場合、最初からインストールされ立ち上げ時に自動的に起動されている。 起動確認

$ ps aux | grep sshd
root     15340  0.0  0.7 119912  7280 ?        Ss   22:43   0:00 sshd: admin [priv]
root     31275  0.0  0.3  80460  3176 ?        Ss   May22   0:00 /usr/sbin/sshd
$ sudo service sshd status
openssh-daemon (pid  31275) is running...

起動する必要がある場合サンプル

sudo service sshd restart

設定ファイルはこちら

/etc/ssh/sshd_config

sshのやり方

以下の2つの方法がある

  • パスワード認証

  • 公開鍵認証

パスワード認証

基本推奨されていない。 sshdの設定ファイルでは、デフォルトでNOとなっている

事前準備

ユーザーのパスワードを設定する

$ passwd
ユーザー admin のパスワードを変更。

現在の設定の確認

$ cat /etc/ssh/sshd_config | grep PasswordAuthentication
PasswordAuthentication no

yesにし、sshdを再起動する

$ sudo vim /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config | grep PasswordAuthentication                                                                                                                 
PasswordAuthentication yes

$ sudo service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
ssh実行

パスワードでsshできた。

$ ssh [:username]@[:hostname]
[:username]@[:hostname]'s password: 
Last login: Wed May 22 00:50:01 2019 from xxxxxxxxxxxxxxxxxxxx

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

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
49 package(s) needed for security, out of 70 available
Run "sudo yum update" to apply all updates.

*確認できたら、安全ではないためsshdの設定を戻しておく*

公開鍵認証のやり方

1. 鍵の作成
# 生成コマンド
$ ssh-keygen -t rsa
Generating public/private rsa key pair.

# 生成する鍵のファイルを指定する
# 何も入力せずEnterすれば、( )にて指定されているファイルにて生成される
Enter file in which to save the key (/Users/[:user_name]/.ssh/id_rsa): /Users/[:user_name]/.ssh/id_rsa_test

# 鍵のパスフレーズを2度入力する
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

# 作成完了
Your identification has been saved in /Users/[:user_name]/.ssh/id_rsa_test.
Your public key has been saved in /Users/[:user_name]/.ssh/id_rsa_test.pub.
The key fingerprint is:
16:89:2b:9c:c8:39:b8:15:6d:e7:11:49:b7:9b:eb:0d [:user_name]@[:user_pc_name]
The key's randomart image is:
+--[ RSA 2048]----+
|     .o..        |
|   .  .+ o       |
|  . o + +        |
| o * + o +       |
|. * + o S        |
| o . . . .       |
|.       E        |
|       . o       |
|        . .      |
+-----------------+
# 確認
$ ls .ssh/id_rsa_test*
.ssh/id_rsa_test     .ssh/id_rsa_test.pub
2. 鍵の設置

リモート(接続先)の/home/[:user_name]/.ssh/authorized_keysに公開鍵を設置する

  • vi 等で生成した公開鍵(.pubが付いている方)を開き、内容を直接/home/[:user_name]/.ssh/authorized_keysに書き込む

  • 公開鍵(.pubが付いている方)をscp等でリモート(接続先)に設置できるならば下記コマンドで書き込む

cat id_rsa_test.pub >> /home/[:user_name]/.ssh/authorized_keys
3. 接続

ローカルからsshコマンドで接続を行う

ssh -l [:user_name] -i [:private_key_path] [:host_name or ip]

ssh -l admin -i ~/.ssh/id_rsa_test 12.345.678.90

パスプレーズを聞かれるので入力 (鍵を盗まれてもパスプレーズがわからなければ接続できないということ)

ssh鍵認証時のパスフレーズ入力画面
ssh鍵認証時のパスフレーズ入力画面

認証が通れば接続完了

Last login: Fri May 24 12:14:04 2019 from xxxxxxxxxxxxxxxxxxxxxx

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

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
49 package(s) needed for security, out of 70 available
Run "sudo yum update" to apply all updates.

よく使うsshコマンドのオプション

全てを確認したい場合は man ssh で調べる。

# ssh時に使用する秘密鍵を指定する。秘密鍵ファイルのパスをオプションに続いて記載する。
ssh -i [:path_to_ssh]
# sshするユーザーを指定する。ユーザー名をオプションに続いて記載する。
ssh -l [:user_name]
# リモートの接続する際のポート番号を指定する。ポート番号をオプションに続いて記載する。
ssh -p [:port_number]
# sshする際に認証エージェントの転送を許可する。ssh接続先で認証エージェントを引き続き使用したい場合、指定する。
ssh -A

.ssh/configを記載する

.ssh/configにリモートへの接続に使用する設定を記載しておくといろいろな接続が楽になる。 サンプル

# .ssh/config
Host my_remote_host                                                                                                                                                       
    HostName 12.34.567.890                                                                                                                                                     
    IdentityFile    ~/.ssh/id_rsa                                                                                                                                        
    User            admin
    ForwardAgent yes

# sshする際のコマンド
ssh my_remote_host

よく使用する記載方法

  • Host : ssh接続する際に使用するホスト名

  • HostName : 接続先を指定するためのhostname または IP

  • User : ログインするユーザー名

  • ForwardAgent yes : 認証エージェントを引き続き使用する場合に記載する

  • Port : 接続先の使用するポート番号

  • IdentityFile : 接続時に使用する認証鍵ファイルパス

その他sshコマンドでできること

踏み台サーバーを経由してリモートアクセスをする

場合によっては、特定のホストAからしsshできないようIP等に制限をかけているホストBがある。 その場合 ローカル => ホストA => ホストB という流れでsshを行う。

コマンドは以下の形となる

ssh -oProxyCommand='ssh -W %h:%p -i [:host_A_key_file] -l [:host_A_user] [:host_A]'  -i [:host_B_key_file] -l [:host_B_user] [:host_B]

.ssh/config に記載する場合

Host host_A
    HostName [:host_A_name/ip]                                                                                                                                                
    IdentityFile [:host_A_key_file]                                                                                                                     
    User [:host_A_user]
    ForwardAgent yes
Host host_B
    HostName [:host_B_name/ip]                                                                                                                                                
    IdentityFile [:host_B_key_file]                                                                                                                     
    User [:host_B_user]
    ProxyCommand ssh -W %h:%p host_A

リモートで指定したコマンドを実行する

sshコマンド後に "" でコマンドを囲って記載すれば指定したリモート先に都度ログインせず実行できる

ssh [:remote_host_name] "[:command]"
$ ssh my_remote_host "ls .ssh/."
authorized_keys
id_rsa_test.pub

こんな感じで複数サーバーのログ取得とかもできる。

https://github.com/rakuraku0615/server_tools/blob/master/tail_hosts_phplog.sh

ビジネス書レビュー : ロジカル・プレゼンテーション――自分の考えを効果的に伝える戦略コンサルタントの「提案の技術」

プレゼンが苦手なので読んだ一冊。

軽い気持ちで読んだつもりが意外にためになったので、読書感想を書いてみる。

本について

1つのストーリーに沿って相手に "提案する" ことの本質やテクニックについて説明していくビジネス書。

  • 資料の作成方法
  • 発表での技術

はもちろんのこと、

  • "提案" や "説明" など、プレゼンを行う本質

について説明している。

以下感想---

参考になった度 : 70 / 100

練習は必要だけど、いくつかの技術はすぐに実践することができ、参考になった。

提案・報告・説明と形式の違いについても話しており、自分のプレゼンのゴールを明確にして行うというところは今までにない考えだったのでこの本を読んで良かったと思う。

しかし、そもそも自分がエンジニアをやっていることもあり、あまりプレゼン経験が無いため「そんな感じなのかー」と流してしまうところもあった。

読みやすさ度 : 60 / 100

1つのストーリーをケーススタディとして、各シーンごとにポイントを解説してくれているのでとても読みやすかった。

図も要所要所で使われていて、イメージもつきやすい。

もう一度読みたい度 : 60/100

次は通して読むというよりかは、プレゼンに関する技術書として利用していきたい。

おすすめしたい人

  • 自分のプレゼンに自信が持て無い方
  • プレゼンをする必要があるけど、どのような資料を作成すれば良いか/どんなプレゼンをすれば良いか 悩んでいる方
  • プレゼンで失敗した方

あたりかな? うまくできている人は「そうだよねー」で終わりそうかも。

自分の考えている構成や説明方法で正しいのかわからなかったので、読んでみたところ思いの外読んで良かったと思えた。 達成したいことを論理的に噛み砕きつつ、プレゼンへの落とし込み方を説明していて内容にもすごい納得感があった。

当たり前だけど、プレゼンをすることが目的におくと失敗するんだよなー・・・ 最後の「何か質問はありますか?」でシーン・・・となるあの感じ、辛いよね。

ビジネス書レビュー : マネジメント[エッセンシャル版] - 基本と原則

読書感想初回はさっき読み終わった "マネジメント[エッセンシャル版] - 基本と原則"。

P.F.ドラッガー著の有名なあの本

本について

ビジネス書。 企業で働いていると"マネージャー"とか、"管理する"とかよく聞くけど、この本では

  • 何をどうすることか
  • 何を目指しているのか
  • どうあるべきか

ついて例を交えて説明し、マネジメントについて企業と個人の正しい振る舞い方を学ぶことができる。

以下感想---

参考になった度 : 50 / 100

現在自分はプロジェクト単位でのチームの管理を任されている立場。 特にマネージャー等の役職を持っているわけではないけど、参考になったものがあった。

参考にはなったが、今の自分では本の半分ぐらいかなーと・・・

その理由としては

  • 企業の社会での役割について等、企業単位の話など自分が考えたことの無い範囲での話はそこまで参考にならなかった。

  • しかし、チーム単位での話では、疑問に思っていたところの解決や自分になかった考え方を身に付けることができた。

  • また、上司等1つ上の役職の人の考えや、自分がその役職を目指すために必要な知見・意識することを知ることができた。

というところから、自分の立場では本の半分ぐらい参考になったということで50点。

読みやすさ度 : 30 / 100

正直かなり難しい。 図などは一切入っていなく、文章のみの説明なため理解しづらい箇所も多くある。

また、表現方法や例が専門的なものも多く、自分の立場ではシチュエーションをすぐに理解できないものがあり何度も読み替えした。

いつかもう一度読みたい度 : 100/100

自分の管理する範囲が広くなったり、今一度自分のチーム/企業での振る舞い方や考え方を見直したい時に見返したい。

おすすめしたい人

以下の人におすすめしたい

  • チームの管理を意識するようになった人
  • 企業の目的やあるべき姿について知りたい人・知る必要がある人

社会人になりたての方よりかは、組織について考える必要が出てきたから読み始めると良いと思った。

ということで、難しいけど勉強になった一冊でした。

管理をする立場・マネジメントを考える人には、必ず「真摯さ」が必要ということが自分の考えと一致していて少し自信を持てた。