AWS CodeDeploy でEC2にファイルをデプロイ

AWSのCodeDeployサービスを使用して、EC2にファイルをデプロイ
現行の環境で、複数ファイルをデプロイする際での手順。
（続けてCodePiplineについても追記）

#VPC作成(ネットに接続しているVPCが既にあれば飛ばしてOK)
VPCダッシュボード＞VPCウィザードを起動＞「パブリックとプライベートサブネットを持つVPC」で選択
IPv4CIDRブロック：10.0.0.0/16
VPC名：わかりやすい任意の名前
パブリックサブネットIPv4CIDR：10.0.0.0/24
パブリックサブネット名：わかりやすい任意の名前
プライベートサブネットIPv4CIDR：10.0.0.1/24
アベイラビリティーゾーン：ap-northeast-1a
プライベートサブネット名：わかりやすい任意の名前
Elastic IP 割り当て ID：用意したElasticIPを選択する(別タブでVPC＞Elastic IP＞Elastic IP アドレスの割り当て＞割り当て)

#IAMロール作成
##一つ目作成
IAMダッシュボード＞ロール＞ロールを作成
ユースケースの選択：EC2
ロールの作成：awscodedeployroleを検索して選択
任意のタグと名前(EC2Codedeployroleなど)を付けて作成

##二つ目作成
IAMダッシュボード＞ロール＞ロールを作成
ユースケースの選択：EC2
ロールの作成：awscodedeployroleを検索して選択
任意のタグと名前(deploygroupCodedeployroleなど)を付けて作成

*ロール＞作成したロールを選択＞信頼関係のタブ＞信頼関係の編集
ポリシードキュメント内のService項目を以下に書き換える
```
"Service": "codedeploy.ap-northeast-1.amazonaws.com"
```



#EC2起動
EC2ダッシュボード＞インスタンスを起動
###AMI
Amazon Linux 2
###インスタンスタイプ
t2.micro

###インスタンスの設定
ネットワークとサブネット：インターネットに接続できるもの
自動割り当てパブリック IP：有効
IAM ロール：今回作成したロール

###ストレージの追加
デフォルトの汎用SSD

###タグの追加
わかりやすい任意の名タグ

###セキュリティグループの設定
セキュリティグループの割り当て：新しいセキュリティグループを作成する
セキュリティグループ名:[アプリ名]-sg など
説明：セキュリティグループ名と同じでよい
ルールの追加：HTTP 0.0.0.0/0

###インスタンスにSSHで接続する
*WindowsはTeraTermなどを起動
*つなげたいインスタンスのパブリックIPv4アドレスをコピー
*ホスト(T)：[インスタンスのIPv4アドレス]
*ユーザー名：ec2-usr
*RSA/DSA/ECDSA/ED25519鍵を使う
*インスタンスを起動したときにダウンロードしたキーペアを選択

#ターミナルの操作
```vi install.sh```でviエディタへ

以下を貼り付けて保存
```
sudo yum update
sudo yum install ruby
sudo yum install wget
```
```#!/bin/bash```
```CODEDEPLOY_BIN="/opt/codedeploy-agent/bin/codedeploy-agent"
$CODEDEPLOY_BIN stop
yum erase codedeploy-agent -y
cd /home/ec2-user
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
```

以下コマンドで作成したシェルスクリプトに権限を付与
```chmod +x install.sh```
権限が付与されていることを確認
```ll install.sh```
シェルスクリプトを実行
```./install.sh```

LUMPをインストールしておく
```
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
sudo yum install -y httpd mariadb-server
sudo systemctl start httpd
sudo systemctl enable httpd
```


#githubの操作
自分のgithub上で新しいリポジトリを作成

#gitの操作
gitbashで[こちらのAWSのgihubリポジトリ](https://github.com/aws-samples/aws-codedeploy-samples/tree/master/applications/SampleApp_Linux)のファイルをダウンロードする


```git clone git clone https://github.com/aws-samples/aws-codedeploy-samples.git```
*appspec.yml内のsourceを書き換える（以下PHPアプリケーションなどの複数ファイルの場合）
```
version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html/
```


*必要に応じて新しいディレクトリを用意する
```
mkdir ディレクトリ名
cd ディレクトリ名
```
*ダウンロードしてきたscriptsディレクトリとappspec.yml、デプロイしたいPHPアプリケーションを一つのディレクトリにまとめる
*githubリポジトリに上記ディレクトリの中身をpush
```
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/アカウント名/リポジトリ名.git
git push -u origin main
```

#AWS CodeDeployの設定
##アプリケーションの作成
Codedeployのコンソール＞アプリケーションの作成
アプリケーション名：任意の名前
コンピューティングプラットフォーム：EC2/オンプレミス

##デプロイグループの作成
アプリケーション名：任意の名前
サービスロール：今回作成したIAMロール名のサービスロールを選択
デプロイタイプ：インプレース
環境設定：Amazon EC2 インスタンス
インスタンスに設定したタグを指定する
ロードバランサー：有効にするのチェックをはずす
そのほかはデフォルトでデプロイグループの作成

##デプロイの作成
アプリケーションは GitHub に格納されています　を選択
GitHub トークン名：GitHubアカウント名をで検索し、GitHubアカウントと接続　をクリック
リポジトリ名：アカウント/リポジトリ名
コミットID：最新のコミットIDを入力

「成功」が表示されたらデプロイ完了！