【AWS】AWS EC2でCentOS＆git＆Docker環境を最速で構築する

# はじめに
個人的な開発でEC2インスタンスを用いたコンテナ環境を構築する事になったのでまとめてみました
手順は少し長いですが思ってるより簡単なので是非やってみましょう
AWSのアカウントは既に持っている前提で書いていきます

# EC2インスタンスの作成

## AWSコンソールにアクセス
まずは[AWSマネジメントコンソール](https://aws.amazon.com/jp/console/)にアクセスしましょう

## EC2ダッシュボードにアクセス
EC2ダッシュボードにアクセスします
<img width="1353" alt="スクリーンショット 2019-10-10 10.11.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/652ef50c-d822-cf4a-26c4-503819565ae0.png">


## EC2インスタンスを作成
インスタンスを作成ボタンを押下します
<img width="1420" alt="スクリーンショット 2019-10-10 10.11.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/eb2666e6-95c9-29ae-b832-846ed10a50ec.png">

## マシンイメージの選択
マシンイメージを選択します
今回はCentOSでの構築なのでサイドバーのAWSMarketplaceを押下して
<img width="1426" alt="スクリーンショット 2019-10-10 10.11.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/2ca82038-9794-a138-a68a-ea15977ce3c5.png">

検索欄に **centos** と入力しイメージを選択します
今回はCentOS7系でいきます
<img width="1421" alt="スクリーンショット 2019-10-10 10.13.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/d1c32877-04a6-daaf-16b0-771ff633767d.png">

選択したら **Continue** を押下します
<img width="1410" alt="スクリーンショット 2019-10-10 10.14.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/155a9268-ae3a-69fd-fe03-5f7da4d0ec9c.png">

## インスタンスタイプの作成
実際に構築するインスタンスのタイプを選択します
今回はt2.microで構築します

インスタンスタイプを選択したら確認と作成ボタンを押下します
<img width="1426" alt="スクリーンショット 2019-10-10 10.14.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/1860e1bf-cee9-ed1d-9c6b-727cf4547347.png">

確認画面が出るので起動ボタンを押下します
<img width="1425" alt="スクリーンショット 2019-10-10 10.14.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/74b32fec-0a11-284c-98cc-a13dae7afd73.png">

## キーペアの作成
インスタンスに接続する時に必要になる鍵を作成します

プルダウンから **新しいキーペアの作成** を押下して
お好きなキーペア名を入力します

入力したら **キーペアのダウンロード** からキーペアをダウンロードしてください
ダウンロードが終わったら **インスタンスの作成** を押下します
<img width="1426" alt="スクリーンショット 2019-10-10 10.15.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/6cb1bb26-ce3a-394e-f086-99b924022ae5.png">

インスタンスは現在作成中ですという緑のメッセージが出ていたらOKです
EC2ダッシュボードに戻りましょう
<img width="1427" alt="スクリーンショット 2019-10-10 10.16.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/09af8249-f8e5-8b50-1b92-f2ffe642292d.png">

EC2ダッシュボードに戻ると作成したインスタンスのステータスチェック欄に「初期化しています」というメッセージが表示されていると思います

インスタンス名が空になっていると思うのでお好きな名前をつけてください
<img width="1315" alt="スクリーンショット 2019-10-10 10.17.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/0cc77165-e0f4-f03c-7d32-06e5fe0b0533.png">

## セキュリティグループの設定
セキュリティグループとはEC2インスタンスに適用可能なAWS標準のファイアウォール機能です
EC2インスタンスへのアクセスを許可しトラフィックを制御するファイアウォールとして動作します

作成したインスタンスのステータスチェックが「2/2のチェックに合格しました」と表示されたら左の□にチェックをいれてインスタンスを選択してください

説明タブの中にあるセキュリティグループというリンクを押下します
<img width="1431" alt="スクリーンショット 2019-10-10 10.19.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/a7e99567-dfe1-b181-67d1-22eddecd4bc6.png">

インバウンドタブの中の編集を押下します
<img width="1430" alt="スクリーンショット 2019-10-10 10.20.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/539f1e0e-1cd5-57b4-3be2-f2f4bfbe71b7.png">

インバウンドのルールの編集から **ルールの追加** を押下します
<img width="1428" alt="スクリーンショット 2019-10-10 10.20.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/4da408d2-113a-e876-f1b8-317fcef36d45.png">

以下のように80番ポートを追加します
編集が終わったら保存ボタンを押下します
<img width="1430" alt="スクリーンショット 2019-10-10 10.21.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/83d2b949-966c-0af5-c9b6-22d4a8a833f1.png">

先程のインバウンドタブに作成した要素が追加されていたら完了です
<img width="1426" alt="スクリーンショット 2019-10-10 10.22.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354659/4ed74515-2c3e-74b9-cc88-3f71ab4b829d.png">

# SSHでアクセス
作成したEC2インスタンスにSSHを使ってアクセスしてみます

## configファイルの作成
SSHアクセスする際に使用する `configファイル` の作成方法については以前書いた記事のなかに書いてあるので参考にしてください

[https://qiita.com/NishimuraRisuto/items/50b377167be4bdb4702a](https://qiita.com/NishimuraRisuto/items/50b377167be4bdb4702a)

## エラー発生
configファイルを作成してアクセスしようとすると以下のようなエラーが発生しました

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
```

定番のパーミッションエラーですね
パーミッションを `600` に設定することで解決します

```
$ chmod 600 キーペアファイル名
```

これで無事にアクセス出来ると思います

# CentOSの初期設定
インスタンスに無事入れたらCentOSの設定を行っていきます

## パスワードの設定
まずはroot用パスワードを設定します

```
$ sudo su
$ passwd
```

パスワードを聞かれるので入力してください
これだけでは `sudo` 実行時にパスワードを聞かれないので `vi` を使用して以下を設定します

```
$ sudo visudo -f /etc/sudoers.d/cloud-init
```
以下を `vi` で記入

```
#centos ALL = NOPASSWD: ALL
centos ALL = (ALL) ALL
```

設定後再度ログインするとsudo時もパスワードを要求されるようになります

## 時刻設定
初期状態のままだとUTC時間が設定されていると思います
以下のコマンドで確認できます

```
$ date
```

JST時間に変更します

```
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime 
```

これだけでは再起動時に設定が変わってしまうので `vi` を使ってシステムに変更を記述します

```
$ sudo vi /etc/sysconfig/clock 
```
以下を `vi` で記入

```
ZONE="Asia/Tokyo"
UTC=false
```

## 言語設定
ついでにデフォルトの文字コードも設定しておきましょう
先程と同様に `vi` を使ってシステムに変更を記述します

```
$ sudo vi /etc/sysconfig/i18n 
```

以下を `vi` で記入

```
#LANG=en_US.UTF-8
LANG="ja_JP.UTF-8"
SYSFONT=latarcyrheb-sun16
```

以上でCentOSの初期設定が完了です

#　Docker環境の構築
次にDockerの駆動環境を構築しましょう

## yumで管理しているパッケージをアップデートする

```
$ yum update
$ yum upgrade
```

## Dockerのインストール
公式の安定版 Yum リポジトリを設定します

```
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

## DOCKER CE のインストール
Dockerには CE(コミュニティエディション) と EE(エンタープライズエディション) があります
簡単にいうと無償版と有償版ですね

以下コマンドで最新バージョンのDocker CEをインストールします

```
$ yum install -y docker-ce docker-ce-cli containerd.io
```

## Dockerの起動

インストールしたDockerを起動しましょう

```
$ systemctl start docker
```

OS起動時に自動的に起動するように設定します

```
$ systemctl enable docker
```

以下コマンドを入力してバージョンが表示されたら完了です

```
$ docker --version
```

# Docker Composeのインストール
Dockerだけでは物足りないのでDocker Composeも入れてしましましょう
[ここから](https://docs.docker.com/compose/compose-file/)最新のバージョンを確認して以下コマンドを入力してください

```
$ curl -L https://github.com/docker/compose/releases/download/インストールするバージョン/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```

バイナリ実行権限を付与します

```
$ chmod +x /usr/local/bin/docker-compose
```

先程と同様にバージョンを確認して完了です

```
$ docker-compose --version
```

※rootユーザーに昇格したままだと `docker-compose` コマンドが実行できないので注意してください

# gitのインストール

yumでインストールします

```
$ yum -y install git
```

バージョンを確認して完了です

```
$ git --version
```

yumでインストールされるのはgit1系です
今回は1系でも特に問題が無いので触れませんが2系がいい人はGoogle大先生に教えてもらいましょう

指摘事項等ありましたらコメントお願い致します