EC2起動からLaravelプロジェクトのデプロイまで

### 1. elastic ipをインスタンスに割り当て & security groupにhttp追加
-elastic ipをインスタンスに割り当て
-security groupのruleにHTTPを追加

### 2. ssh ログイン
ssh ec2-user@${elastic ip} -i ~/.ssh/***.pem

### 3.ec2-user グループ
$ sudo groupadd www
// ユーザー(ec2-user)を www グループに追加
$ sudo usermod -a -G www ec2-user
$ groups

### 4. rootユーザpass変更
$ sudo su –
$ passwd

### 5. git install
// 省略

### 6. Node.js install
// 省略

### 7. Apache HTTP Server
// 省略

### 8. php 7.3 install
// 省略

### 9. MySQL 8.0 install
// 省略 インスタンスタイプがnanoだとmemory不足となるので要注意

### 10. ansible install
// 省略

### 11. date time変更
// 省略

### 12. *.conf の設置
$ sudo mkdir /var/www/log
$ sudo vi /etc/httpd/conf.d/custom.conf

# エラーログ
ErrorLog "/var/www/log/error_log"

# アクセスログ
<IfModule log_config_module>
    CustomLog "/var/www/log/access_log" combined
</IfModule>

### 13. git clone
$ sudo git clone https://github.com/***/***.git

// ドキュメントルート変更
$ sudo vi /etc/httpd/conf.d/custom.conf

DocumentRoot "/var/www/hoge/public"

# .htaccess 有効化
<Directory /var/www/hoge/public>
    AllowOverride All
</Directory>         

### 14. パーミッション変更
$ sudo chmod -R 777 hoge/storage
$ sudo chmod -R 775 hoge/bootstrap/cache
// /var/www とそのコンテンツのグループ所有権を www グループに変更
$ sudo chown -R root:www /var/www

### 15. project
$ curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar install
$ sudo php composer.phar dump-autoload
$ sudo php artisan key:generate
// 省略

### 16. Elastic ipにアクセスし、動作確認
http://***/login
http://***/register

EC2の起動からSSH接続までの一連の流れ

### 前提条件
– MFA認証のIAMユーザ作成済
– VPC、public subnet、InternetGateway、RouteTable作成済
– セキュリティグループ作成済
– Key Pairsで秘密鍵・公開鍵作成済

### EC2
1. launch instance
2. Amazon Linux 2 AMI (HVM), SSD Volume Type 64bit(x86)
3. Choose instance type
4. networkで作成したVPC、public subnetを設定(InternetGateway紐付け済)
  Auto-assign Public IPをenableにする disableのままだと、privateしか割り当てられない
5. storage sizeはdefaultの8GiB
6. Add tag: keyにdev, valueにdev-testとする
7. Configure Security Groupで作成したsecurity groupを紐付け(ssh許可)
8. 作成したkey pairを選択
※VPCのDNS resolution、DNS hostnamesがEnabledになっていることを確認。desabledの場合はactionで変更。instanceを再起動

接続

ssh ec2-user@${public ip} -i  ~/.ssh/***.pem

cyberduckでも同様に、ssh-private keyで.pemを指定すると、接続できる。

お、お、お、お疲れ様でしたー

EC2のKey Pairs作成(mac編)

### Key Pairs作成
– EC2のleft paneのNetwork & Security -> Key Pairsを選択
– Create key pair
– Name: aws-dev(file formatはpem)

### macの.sshに保存
$ pwd
/Users/${username}
$ ls -a
$ cd .ssh
$ ls
aws-dev.pem

アクセス権限の変更: オーナーのみ読み出しができる400(所有者:R)
$ sudo chmod 400 aws-dev.pem 
$ ls -l
-r——–@

pemファイルは秘密鍵
流れとしては
1. ssh接続要求
2. aws側でランダムデータを生成し、公開鍵を使ってクライアントに送る
3. 受け取ったクライアント側は秘密鍵でデータを復号化して送り返す
4. aws側でランダムデータと受け取った復号化データを比較して認証する

このような仕組みから、key parisはAWSで生成するのではなく、ローカルマシンでの生成が望ましい。
$ ssh-keygen -t rsa -f hoge.pem

linux timezone変更手順

$ date
$ cat /etc/localtime
TZif2UTCTZif2?UTC
UTC0
$ sudo cp /etc/localtime /etc/localtime.org
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo cp /etc/sysconfig/clock /etc/sysconfig/clock.org
$ sudo vi /etc/sysconfig/clock

ZONE="Asia/Tokyo"
UTC=false

$ strings /etc/localtime
$ date

php build-in serverでhttpsサーバーを起動

ローカル環境で、httpsの挙動を確認したい時に使えるのが、hyper-builtinというライブラリ
https://github.com/mpyw/php-hyper-builtin-server

opensslでサーバー証明書を生成し、composerでhyper-builtinを入れて起動
※下はawslinuxだが、centosでも同様

### sslモジュールインストール(centOSの場合はmod_ssl)
$ sudo yum install mod24_ssl
$ httpd -M | grep ssl

### 秘密鍵作成
$ openssl genrsa > server.key

### CSR作成
$ openssl req -new -key server.key > server.csr

### サーバー証明書作成
$ openssl x509 -req -signkey server.key < server.csr > server.crt
$ rm server.csr

### 秘密鍵&サーバー証明書配置
$ sudo mkdir /etc/httpd/conf/ssl.key
$ sudo mkdir /etc/httpd/conf/ssl.crt
$ sudo mv server.key /etc/httpd/conf/ssl.key/
$ sudo mv server.crt /etc/httpd/conf/ssl.crt/

### ssl.conf編集
sudo vi /etc/httpd/conf.d/ssl.conf

# SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
# SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key

### apache再起動
$ sudo service httpd restart

### composerでhttps用のphp buildin-server libraryインストール
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar require –dev mpyw/php-hyper-builtin-server:^2.0

### httpsサーバー起動
$ vendor/bin/hyper-run -s 192.168.33.10:8000

うおおおおおおおおおおおおおお、めんどくせええええええええええええ
これ、playbook.ymlで一括管理してーーーーーーーーーーーーー

EC2のCPUはインテル? AMD?

EC2ってiシリーズ使ってるの?
AMDのEPYCを使っているらしい。x86-64マイクロプロセッサ
EPYCのシリーズをみるとL1, L2, L3をみると、L3が拡大化してるな。
—-
Amazon Elastic Compute Cloud (Amazon EC2) は、安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービスです。開発者がウェブスケールのクラウドコンピューティングを簡単に利用できるように設計されています。 AWS は、AMD とのパートナーシップを通じて、最も広くかつ深いインスタンスポートフォリオを強化する追加的な EC2 インスタンスを提供し、ワークロード要件に対するコストとパフォーマンス両方の最適化を実現します。
—-
AMD EPYC プロセッサ
Amazon EC2 インスタンスには現在、全コアターボのクロック速度が 2.5 GHz の AMD EPYC 7000 シリーズプロセッサが搭載されています。AMD ベースのインスタンスは、お客様に新たな選択肢を提供します。コンピューティングリソースが十分に活用されていない多くのワークロードに、よりぴったりなものが見つかる可能性があります。コンピューティングリソースと使用率の間のバランスを最適化することにより、これらのインスタンスでは類似のインスタンスと比べコストを 10% 節約できます。
——
https://aws.amazon.com/jp/ec2/amd/

あれ、GCPもAzureもEPYC? これまじ?
Intelじゃなくて、CPU=AMDなんだ。。

AWS AMI

AMIは”Amazon Machine Image”の略。
AMIはインスタンスのルートボリュームのテンプレートが含まれ、インスタンスの丸ごとバックアップが取れる。

EC2のイメージの作成からAMIを作成する

AMIをローンチすると、EC2が立ち上がる。
なるほど、これは凄い便利ですねー

AWS MFA(多要素認証)

– AWSのアカウント申請お願いします
→ 終わりました、MFA認証しといてね
→ え、MFAって何?
→ は? 自分で調べろよ
→ 。。。

よくある会話ではないでしょうか? ということでして、AWSのMFAを調べます。
https://aws.amazon.com/jp/iam/details/mfa/

AWSのページだと、IAM配下にありますね。
MFA (Multi-Factor Authentication)は、ユーザーとパスワードに加えて、保護レイヤーを追加。サインインする際に、認証コードの入力が必要になる。

MFAのフォームファクタ
– 仮想MFAデバイス
– ユニバーサル第2因子(U2F)セキュリティーキー
– キーホルダータイプのMFAデバイス
– ハードウェアのディスプレイカードMFAデバイス
– SMS MFAデバイス(プレビュー)
– ハードウェアのキーホルダータイプ MFAデバイスAWS GovCloud向け
なんだこれは?とりあえず、SMS MFAデバイスのことか??

公式のポリシーサンプル

{
	"Version": "2012-10-17",
	"Statement": [{
	  "Effect": "Allow",
	  "Action": "["ec2:*"]",
	  "Resource":["*"],
	  "Condition": {"NumericLessThan": {"aws:MultiFactorAuthAge": "3600"}}
	}]
}

ん?

{
	"Version": "2012-10-17",
	"Statement": [
	{
		"Sid": "AllowAllActionForEC2",
		"Effect": "Allow",
		"Action": "ec2:*",
		"Resource": "*"
	},
	{
	    "Sid": "DenyStopAndTerminateWhenMFAIsNotPresent",
	    "Effect":"Deny",
	    "Action" : [
	    	"ec2:StopInstances",
	    	"ec2:TerminateInstances"
	    ],
	    "Resource": "*",
	    "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": false}}
	}
	]
}

EBS、インスタンスタイプの最適化

AWSのEC2のインスタンスタイプやEBSを見直したいとする。さて、どこから見直す?

まず、現状を調べるところから。
モデル、VCP, CPUクレジット、メモリ(GiB), ストレージからか。
現状把握 → 検証方法検討 → パフォーマンス測定 → レビュー → インスタンスタイプ・EBS変更 → 事後レビュー
こんなところか。 

rtc_cmos: probe of rtc_cmos failed with error -16

rtc_cmos: probe of rtc_cmos failed with error -16

Error related to time synchronization at OS startup

https://forums.aws.amazon.com/thread.jspa?threadID=87634

Re: Linux EC2 instance unresponsive! crashed?
Posted by: msloc016
Posted on: Feb 23, 2012 2:15 PM
in response to: msloc016 in response to: msloc016
 	Click to reply to this thread	Reply
I did just see that logwatch gave me this:

WARNING: Kernel Errors Present
http://2230098.568434 rtc_cmos: probe of rtc_cmos failed with error -16 ...: 1 Time(s)
http://8424538.017762 rtc_cmos: probe of rtc_cmos failed with error -16 ...: 1 Time(s)
Don't know if that means anything to anyone.

なるほどな、コミュニティのスレッドで調べるのか、勉強になります。