AWS導入からEC2 LAMP環境でCodePipelineによる自動ビルドまでざっくり手順書

自分用です。間違っている部分があるかも。わからないところは検索してね。

// 導入

注: 様々な名称にはシステムが付けるものに似た名称を付けないこと。sg-で始まるセキュリティグループを作成しようとしてエラーになったことがある。

1. AWS アカウントを作成する。

2. コンソールにルートユーザ(1で作ったアカウント)でサインイン

3. 料金発生アラームを設定する
	billingで検索→「請求情報とコスト管理ダッシュボード」を開く
	「請求設定」メニューを開く
	「無料利用枠の使用アラートを受信する」「請求アラートを受け取る」にチェック。前者にメールアドレスを入力。
	「設定の保存」ボタンを押す

4. CloudWatchを設定する
	サービス一覧>ガバナンスにあるCloudWatchをクリック
	リージョンを「米国東部(バージニア北部)」に変更。
	アラーム>アラーム状態を選択。
	「アラームの作成」を押す。
	「メトリクスの選択」を押す。
	「メトリクス」から「請求」を押す。
	「概算合計請求額」を押す。
	「USD」にチェックを入れ、「メトリクスの選択」を押す。
	条件を設定。5ドル以上など。
	「SNSトピックの選択」から「新しいトピックの作成」を選択。
	トピック名を入力。
	メールアドレスを入力。
	「トピックの作成」を押す。
	「SNSコンソールで表示」を押す。
	承諾メールが来ていることを確認し、メールに記載されているリンクをクリックすることで承諾する。
	承諾すると、SNSコンソールのサブスクリプションのステータスが「確認済み」になる。
	AWSコンソールに戻り、「次へ」を押す。
	アラーム名と説明を入力して「次へ」を押す。
	「アラームの作成」を押す。

5. IAMユーザログインURLの設定
	サービスメニュー>セキュリティ、ID、およびコンプライアンス>IAMを選択。
	AWSアカウント>アカウントエイリアス>作成を押す。
	わかりやすい名前を入力し、作成を押す。

6. 管理者IAMユーザグループを作成
	「ユーザーグループ」を選択。
	「グループを作成」ボタンを押す。
	ユーザーグループ名を入力。
	ポリシーをアタッチする。(adminならAdministratorAccess)
	「グループを作成」ボタンを押す。

7. 管理者IAMユーザを作成
	「ユーザー」を選択
	「ユーザーを追加」を押す。
	ユーザー名を入力。
	認証タイプを選択。(プログラムからのアクセスかユーザのアクセスか)
	ユーザパスワードなどを入力
	「次のステップ」を押す。
	所属するグループを選択し、「次のステップ」を押す。
	タグが必要なら入力して「次のステップ」を押す。
	内容が良ければ「ユーザの作成」を押す。
	ルートユーザをサインアウトして、5で作成したサインインURLから管理者IAMユーザで入り直す。
	
8. Cliのインストール
	aws cli version 2で検索し、インストール。linuxの場合はcurlが入っていなければインストールしてから。 sudo snap install curl ついでに sudo snap install jqも　snapはドッカー方式のパッケージ。 aptは通常のインストール方式。
	
// 環境構築
9. Virtual Private Cloud(VPC)の確認
	「サービス」>「ネットワーキングとコンテンツ配信」>VPCを選択。
	リージョンを使用するリージョンに変更。
	「VPC」を選択。
	「ルートテーブル」を選択。0.0.0.0/0はインターネットへとルートされる。
	NACLはファイアウォールのような役割を果たし、セキュリティグループはVPC内でのアクセス管理に利用される。
	publicとprivateサブネットがあり、publicはインターネットにアクセスできる。privateはpublicにNATを用意すれば間接的にインターネットにアクセスできる。
	//作成する場合
	VPCから作成する。サブネット・インターネットゲートウェイも作成する必要がある。
	VPC設定でDNSホスト名とDNS解決を有効にするとパブリックURLが作られるようになる。
	publicにするには「サブネット」からサブネットを選択し、アクション>IP4の自動割り当てを選択。
	ルートテーブルにサブネットを明示的に関連付ける。
	インターネットゲートウェイを作成して、VPCに関連付ける。
	ルートテーブルにインターネット行きルート0.0.0.0/0とインターネットゲートウェイを関連付ける。

10.	EC2用CodeDeployロールを準備
	IAMから「ロール」を選択。「ロールの作成」ボタンを押す。ユースケースとしてEC2を選択。
	AmazonEC2RoleforAWSCodeDeployポリシーを付けたRoleを作成。
	
11. EC2の作成
	サービス>コンピューティング>EC2を選択。
	「インスタンス」を選択。
	「インスタンスを起動」を押す。
	例としてAmazon linux2を選択。
	例としてt2.microを選択。
	「次のステップ」を押す。
	基本設定で使用するVPC、EC2用CodeDeployロールを付与し「次のステップ」を押す。
	ストレージ設定を確認し「次のステップ」を押す。
	タグを確認し「次のステップ」を押す。
	アップロードに使用するセキュリティグループ名を入力し、「確認と作成」を押す。
	確認し、「起動」を押す。
	キーペアを作成を選択し、キーペア名を入力(リージョンなど)し、「キーペアのダウンロード」を押し、pemファイルを保存する。
	EC2に名前を付ける。デプロイ時にデプロイ先を見つけるのに使用される。
	「インスタンスの起動」を押す。
	「インスタンスの表示」を押す。
	ステータスチェックが「2/2のチェックに合格しました」と表示されるまで待つ。
	「接続」ボタンを押す。
	「SSHクライアント」を選択。
	表示されているアカウント情報でSSHクライアントからアクセスする。
	gitをインストールするとgit for bashがVSCodeに追加される。ここからssh接続することも可能。
	「状態」から「終了」を選択するとEC2自体が削除されるので注意。
	
12.	WinSCPからEC2にアクセス
	SCPプロトコルで接続。
	パスワードには入力せず、「設定」ボタンを押し、環境>SCP/シェルでシェルを「sudo su-」に変更することによってroot権限が必要なディレクトリでファイル操作が行えるようになる。
	SSH>認証を選択、秘密鍵で作成したpemファイルを指定。自動的にppkファイルを生成してくれる。

13. Apacheのインストール
	インスタンス作成時に基本設定のユーザーデータに以下のコマンドを付ける。上手くいかなければsshで接続して手動で実行。
　#!bin/bash
	yum update -y
	yum install httpd -y
	systemctl start httpd
	systemctl enable httpd
	cd /var/www/html
	echo "テスト用ページ" > index.html
	セキュリティグループを選択
	紐付けたセキュリティグループにチェックを入れ、「編集」を押す。
	「ルールを追加」を押す。
	タイプでHTTPを選択。必要ならHTTPSも選択。
	リソースタイプでanywhere-IPv4を選択。
	「ルールを保存」を押す。
	EC2にssh接続する。
	.htaccessを使用する場合、sudo vim /etc/httpd/conf/httpd.confを実行。またはWinSCPで編集。
	vimの場合、iで編集モード。
	<Directory "/var/www/html">
		AllowOverride None → ALLに変更。
	</Directory>
	vimの場合escでコマンドモード。:wq[Enter]で保存して閉じる。
	systemctl restart httpdでリスタート。
	ページなどは/var/www/htmlにおく。
	エラーは/var/log/httpd/conf/httpdなどを確認

14. CodeDeployエージェントをインストール。
	yum update
	yum install ruby　// rubyが必要
	cd /home/ec2-user
	wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
	chmod +x ./install
	./install auto
	実行確認はservice codedeploy-agent status
	スタートしていない場合はservice codedeploy-agent start

15. php7.4のインストール
	sudo amazon-linux-extras install php7.4を実行。		

16. phpに必要なパッケージのインストール
	日本語処理用にmbstring、phpMyAdmin用にphp-xmlをインストールする。
	yum list installed |grep フィルタ(phpなど)で一覧表示。
	インストール可能パッケージを探すには、yum search キーワード|grep フィルタ
	例えば yum search mbstring|grep php
	インストールするには yum install パッケージ名
	systemctl restart httpdでapacheを再起動する。
	systemctl restart php-fpmでphpを再起動する。

17.	php.iniの設定
	/etc/php.iniの設定を行う。比較ツールを使うと良い。
		理由: Amazon linux2は PHP-FPM 環境を使用しており、.htacess内のphp_valueおよびphp_flagを使用できない。
		また代替としての.user.iniも/etc/httpd/conf.d/php.confで禁止されている。
		よってphp.iniに書くのが最も単純。(ただし回避方法があるかも)
	
18. 作業ディレクトリの権限設定
	phpからファイルを作成する場合、置き場の権限が正しくないと失敗する。
	mkdir ディレクトリ名
	chown apache:apache ディレクトリ名
	chmod 777 ディレクトリ名
	ls -laで確認。
	
19. MySQL(RDSサービス)のインストール
	VPCでDB用セキュリティグループを作成。
	名称・説明を入力。(sg-から始まる名称を付けるとunknownエラーになるのでやらない)
	インバウンドルールを追加、タイプに「MYSQL/Aurora」、ソースにWebアクセス用セキュリティグループを指定して「セキュリティグループを作成」ボタンを押す。
	サービスから「RDS」を選択。
	「サブネットグループ」を選択。
	「DBサブネットグループを作成」ボタンを押す。
	名前と説明を入力して「作成」を押す。
	VPCを選択。(デフォルトで選択されているように見えるがされていない)
	アベイラビリティゾーン・サブネットを選択。
	「作成」ボタンを押す。
	「ダッシュボード」を選択。
	「データベースの作成」を押す。
	MySQL・無料利用枠を選択。
	識別子・ユーザーパスワードを入力。
	VPC・作成したDBサブネットグループ・作成したDBアクセス用セキュリティグループを選択。
	「データベースを作成」を押す。数分後に使用可能になる。
	データベース名をクリックすると詳細が表示される。エンドポイント文字列をコピーする。

20. MySQLアクセス機能のインストール	
	EC2にssh接続。
	sudo yum install mysqlを実行。
	mysql -h エンドポイント -P 3306 -u　ユーザ名 -pを実行。パスワードを入力すると接続できる。
	ログイン後、create database データベース名;でデータベース作成。
	ログアウト後、mysql -h エンドポイント -P 3306 -u ユーザ名 -p データベース名 < エクスポートしたsqlファイル　を実行するとインポートできる。
	再度ログインし、use データベース名 で選択。desc テーブル名; でインポートされているか確認できる。
	php からRDSへ接続するには、以下の接続文字列をpdoに渡す。
	mysql:host=エンドポイント;port=3306;dbname=データベース名;charset=utf8mb4
	
21. phpMyAdminのインストール
	ダウンロード＆解凍する。
	cd /var/www/html
	wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
	mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
	rm phpMyAdmin-latest-all-languages.tar.gz
	設定ファイルを作成して書き換える。
	cd /var/www/html/phpMyAdmin
	cp config.sample.inc.php config.inc.php
	$cfg['Servers'][$i]['host'] = 'RDSのエンドポイント' に変更。
	RDSのユーザでログインする。
	
22. gitリポジトリを用意。
	アプリのルートにbuildspec.ymlファイルとappspec.ymlを作成する。buildspecはビルドの挙動、appspecは生成物の配置を指示する。
	ymlファイルはインデントを正確に揃えなくてはならないので注意。タブは使えない。
	-のあとはスペース必須。

23. デプロイ用ロールの作成
	IAMを開き、Roleの作成を押す。ユースケースからCodeDeployを選択。
	次へを押して行き、ロール名を入力。「ロールの作成」を押す。	

24. アプリケーションの作成
	CodeDeployを開き、「アプリケーション」を選択。EC2アプリケーションを作成する。

25. デプロイグループの作成
	アプリケーションページ下部にある、デプロイグループを作成。	名称、ロール、デプロイタイプ(インプレースはデプロイ中オフラインになる。Blue-Greenは検証・本番を都度交代する。これを使用するにはロードバランサの設定が必要)
	環境設定でEC2インスタンス、タグからインスタンス名を選択。
	デプロイエージェント設定で更新を選択

26. パイプラインを作成。
	新しいサービスロールを選択してパイプライン名を入力	ソースプロバイダをGithubバージョン2(会社のgithubなどでアプリをインストールする権限がない場合はgithubバージョン1を選択)、接続を作成、リポジトリとブランチ名を選択。
	ビルドステージでAWSCodeBuildを選択。プロジェクトを作成
	デプロイプロバイダにAWS CodeDeploy、アプリケーション名、デプロイグループを選択。
	パイプラインを作成を押すと最初のビルドが走る。失敗する場合はbuildspec.yml,appspec.ymlを見直してみよう。