EKS Workshopでクラスターを作成するまでのまとめ

##EKS Workshop始めるまでの一苦労を解消したい

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/43c1425a-e68d-3787-c70e-cf1e3cc64cf9.png)

- EKSは個人でお試しするにはリソースの費用がかかって怖いですよね。なので、EKS Workshopを試そうと思ってクラスターを構築しても、最後にはクラスターを削除することになると思います。
- そうするとクラスター作るので20〜30分かかるし、なによりEKS Workshopを続きからやりたいなって時に、またEKS Workshopを最初から見てクラスター構築して、となってクラスターを構築したことで満足して今日は終了！ってなってしまいなかなか先に進みません、、、

## そこで、クラスター構築の手順をまとめました
- 毎回EKS Workshopを見ながらやっていくのは大変なのでまとめました
- 何よりEKS Workshopは英語だしブラウザで日本語翻訳しても次のページに移動するとまた英語になってるし、、、っていうのが辛いですよね。
    - Chromeで`アプリ`として保存した上で「日本語に翻訳」をすればページが遷移しても翻訳され続ける！っていう解決策もあるのですが、せっかくなので以下にまとめていきます（とは言っても記載している内容はEKS Workshopそのままなのと、詳細は該当ページへのリンクを付けているので、概要として参考にして頂ければという感じです）

### 1.Start the workshop
- ここでまとめている内容は以下のページに該当  
    - [Start the workshop... :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/)  
- ここでは`running the workshop on your own (in your own account)`を選択していきます
    - 「自分のアカウントでワークショップを進めていきます」って意味ですね
- AWSアカウントを作成する
    - 詳細は該当ページを確認
    - `注意点`：AdministratorAccessポリシーを割り当てる  
    - 個人的には、いつも利用しているアカウント(AdministratorAccessポリシーが割当たっている)でEKS Workshopを進めるとkubernetesダッシュボードがうまく表示できなかったので、新規でアカウントを作り直したら成功しました。なのでここでは素直に新規アカウントを作成することをお薦めします
    
### 2.Create a Workspace  
- ここでまとめている内容は以下のページに該当 
    - [Create a Workspace :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/workspace/)
- ここでやっているのは、EKSクラスターを作成するためのワークスペースとしてCloud9を起動しています
    - インスタンスタイプを`t3.small`に変更する以外は全てデフォルトのままでOK
    - テーマを変更しろと記載がありますが、変えても変えなくてもOK
- `注意点`：この後実施する各種設定は、Cloud9での設定内容になっているので、AWS CLI使えるからローカルでやろう！となると手順変わるので、素直にCloud9を起動した方が良いです。
        
## 進捗確認1
- ここまででEKS Workshop的にはここまで進んでいます。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/3cf02444-ee45-0108-85ab-92dbd9be55c1.png)

- 次へ進みましょう。  

### 3.Install Kubernetes Tools
- ここでまとめている内容は以下のページに該当      
    - [Install Kubernetes Tools :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/k8stools/)  
- EKSクラスター構築のために利用するコマンドをインストールしていきます  
- Cloud9上のターミナルで各種コマンドを実行していく流れです
    - kubectlをインストールする  
    
    ``` 
    sudo curl --silent --location -o /usr/local/bin/kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/linux/amd64/kubectl
    ```
    
    - インストールしたkubectlの権限を変更

    ```
    sudo chmod +x /usr/local/bin/kubectl
    ```

    - 次に、`jq`、`envsubst`（GNU gettextユーティリティから）、および`bash-completion`をインストールします
    
    ```
    sudo yum -y install jq gettext bash-completion
    ```
    
    - インストールされたかどうかを確認します
    
    ```
    for command in kubectl jq envsubst
        do
            which $command &>/dev/null && echo "$command in path" || echo "$command NOT FOUND"
        done
    ```
    
    - 以下が表示されればインストールOKです
    
	```
	kubectl in path
	jq in path
	envsubst in path
	```
    
    - kubectl bash_completionを有効にする
    
    ```
    kubectl completion bash >>  ~/.bash_completion
    . /etc/profile.d/bash_completion.sh
    . ~/.bash_completion
    ```

### 進捗確認2
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/5a4c07bb-147a-e51d-660d-4e81ea874afc.png)  

- 次へ進みます

### 4. Create an IAM role for your Workspace
- ここでまとめている内容は以下のページに該当      
    - [Create an IAM role for your Workspace :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/iamrole/)
- ワークスペース(Cloud9)がEKSクラスターを作れるような権限を与えるためのIAMロールを作成します
    - ロール作成の詳細は該当ページを参照
        - `eksworkshop-admin`という名前で`AdministratorAccess`を持ったロールを作成します
            
### 進捗確認3
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/f8cb5e7b-e7da-8d4a-0d16-69fbe39e71c8.png)

- 次へ進みます

### 5.Attach the IAM role to your Workspace
- ここでまとめている内容は以下のページに該当
    - [Attach the IAM role to your Workspace :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/ec2instance/) 
- IAMロールをワークスペースにアタッチします
    - ロールのアタッチの詳細は該当ページを参照
- `注意点`： Cloud9にロールを割り当てるわけですが、Cloud9の実態はEC2なので、ロールの割当を実行する画面はEC2になります。

### 進捗確認4
- 終わりが見えつつあります  
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/9e939ddb-1959-c8af-499c-5e77dc449444.png)

### 5. Update IAM settings for your Workspace
- ここでまとめている内容は以下のページに該当  
    - [Update IAM settings for your Workspace :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/workspaceiam/)
- ここではCloud9からEKSクラスターが作成できるように、Credentialの設定を行っていきます
    - デフォルトで設定されているCloud9の設定を無効化します
        - 該当ページに画像あるのでそれを見つつ設定（設定の概要は以下）
            - 右上の歯車アイコン -> AWS setting -> CredentialsをOFFにする
       
        - さらに既存の認証情報ファイルも削除
            - `rm -vf ${HOME}/.aws/credentials`
-  無効化と既存のファイルの削除が済んだので、改めてEKSクラスターを作成するためにCloud9にCredentialを設定していきます
   -  アカウントとリージョンの値を以下の手順で取得していきます

        ```
        export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
        ```

       - アカウントIDが取得できているかのテスト(アカウントIDが表示されればOK)
   
            ```
            echo $ACCOUNT_ID
            ```
  
   - Cloud9が存在しているリージョンを取得する

        ```
        export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
        ```

       - リージョンが取得できているかのテスト(リージョンが表示されればOK)
 
            ```
            test -n "$AWS_REGION" && echo AWS_REGION is "$AWS_REGION" || echo AWS_REGION is not set
           ```

- 上記で取得したアカウントIDとリージョンをbash_profileに保存

    ```
    echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile
    echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile
    aws configure set default.region ${AWS_REGION}
    aws configure get default.region
    ```
       
- IAM情報の確認

    ```
    aws sts get-caller-identity
    ```
       
    - `確認`：上記コマンドのレスポンスに以下の情報が記載されていればOK
        - ロール名：`eksworkshop-admin`が含まれている
        - インスタンスID：`Cloud9の元になっているEC2のインスタンスID`

- ここで、上記の条件を満たすように権限が当たっていないと、次に進まないでください的な警告が記載されているので注意してください。

### 進捗確認5
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/f4501bfc-105e-5b3e-d883-6be923a8a58c.png)

### 6.Clone the Service Repos 
- ここでまとめている内容は以下のページに該当
    - [Clone the Service Repos :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/clone/)

- ここは大したことはしていません。githubから素材を取得するだけです。
   
    ```
    cd ~/environment
    git clone https://github.com/brentley/ecsdemo-frontend.git
    git clone https://github.com/brentley/ecsdemo-nodejs.git
    git clone https://github.com/brentley/ecsdemo-crystal.git
    ```

### 進捗確認6
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/16d97d8c-12e4-d72e-cb34-b2b26e5d9ca5.png)

- 最後の手順です。

### 7.Create an SSH key
- ここでまとめている内容は以下のページに該当
    - [Create an SSH key :: Amazon EKS Workshop](https://eksworkshop.com/020_prerequisites/sshkey/)
- Cloud9でSSHキーを作成する

    ```
    ssh-keygen
    ```

- 作成したキーペアの公開鍵をインポート

    ```
    aws ec2 import-key-pair --key-name "eksworkshop" --public-key-material file://~/.ssh/id_rsa.pub
    ```

    - `マネージドコンソール -> EC2 -> Keypair` にインポートされます

## まとめ
- あとはeksctlをダウンロードしてインストール。その後にeksctlを実行して、クラスターの作成をすればEKSが使い始められます！

- ここまでの手順とeksctlのダウンロードとインストールまでは1度対応しておけば、2度目にEKS Workshopやろうってなった時に、再度手順を繰り返して設定する必要はありません
    - Cloud9は削除しない前提です（Cloud9は30分間作業しなければ自動で停止してくれるので、削除しなくてもいいかなと個人的には思っています）
    
- これでEKS Workshopのハードルも少し下がったので、Beginner向けのシナリオから1つずつ勉強していきましょう！