新人研修用 AWS基礎学習+演習課題サンプル

## なにこの記事？
新人研修担当になったけれど、AWSの基礎を教える前例が社内になかったので
オリジナルで課題を作りました。
回答は用意していません。ご承知ください。
同じ悩みを持つ方にどんな感じのことをしたのかが伝わればいいなと思います。

## 学習方針

- 概要を理解する
- 実践する
  - AWSコンソールから実践する
  - AWS CLIから実践する
  - AWS CloudFormationから実践する
  - AWS SDKから実践する

---

## AWS全体解説

会議体でホワイトボードを利用して実施

- クラウドの概要
- オンプレとクラウドの違い

---

## Code commit

※すべての学習で生成するコードを管理するために先に学習

### 概要勉強

- AWS blackbelt資料

  <https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-aws-code-services-codecommit-codebuild>

### 課題

- Gitの認証情報を作成する
- リポジトリを作成する
- ローカルPCにクローンする
- ソースをローカルに配置する
- ADDする
- commitする
- pushする

---

## S3

### 概要勉強

- AWS blackbelt資料  

  <https://aws.amazon.com/jp/blogs/news/webinar-bb-amazon-s3-glacier-2019/>

### 課題

- AWSコンソールからバケットを作成
- AWSコンソールからバケットにローカルのファイルをアップロード
- AWS CLIでコマンドでバケットを作成する
- AWS CFnを利用してバケットを作成する
  - 【参考】CloudFormationでいろいろなS3バケットを作成してみた  
    デフォルト設定のS3バケット  

    <https://dev.classmethod.jp/cloud/aws/cloudformation-s3bucket-type/>
- s3を利用して静的ホスト配信をする
  - 【参考】AWS S3で静的Webページをホスティングする  

    <https://qiita.com/dogwood008/items/a92abae789f4b0466f38#ファイルのアップロード>

- javaを利用してs3のバケット作成、ローカルファイルを作成したバケットに配置する
  - 【参考】Amazon S3 バケットの作成、一覧表示、削除  
    バケットの作成  

    <https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/examples-s3-buckets.html>
  - 【参考】Amazon S3 オブジェクトに対するオペレーションの実行  
    オブジェクトのアップロード  

    <https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/examples-s3-objects.html#upload-object>


### 復習

- 作成したコードをGITにPUSHする
- CloudFormationのサンプルコードについて詳細を理解する

---

## IAM

### 概要勉強

- AWS blackbelt資料

  <https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-iam-part1-2019/>

### 課題
- S3のfullaccess権限をもったロールを作成する  
  目的：ロールの作り方を理解する
- EC2へのS3full権限のロール割当をし、EC2上からS3バケット生成コマンドを発行する  
  目的：EC2へのロール設定の仕方、及びEC2ロールがどのように利用できるか理解する


---

# VPC

### 概要勉強

- AWS blackbelt資料

  <https://aws.amazon.com/jp/blogs/news/webinar-bb-amazon-vpc-basic-2019/>

- IPアドレスについて

  <https://www.infraexpert.com/study/ip5.html>

### 課題

- AWSコンソールからVPCを一つ作成する  
  ※public subnet 2つ、private subnet 2つ
    インターネットGW,NatGW お忘れなく
    動作確認はEC2の課題にて実施

- CloudFormationでVPCを一つ作成する  
  ※public subnet 2つ、private subnet 2つ
    インターネットGW,NatGW お忘れなく
    動作確認はEC2の課題にて実施

---

# EC2

### 概要勉強

- AWS blackbelt資料

  <https://aws.amazon.com/jp/blogs/news/webinar-bb-amazon-ec2-2019/>

### 課題

- public subnetの中にEC2を立てる  
  - ローカルPCからteratermでSSHでアクセスしてEC2内にログインできることを確認する  
    目的：EC2が正しくpublic subnet内に作成されたことを確認するため  
  - EC2内からインターネットにアクセスできることを確認する
    curlコマンドを利用して、「https://www.google.com/webhp?hl=ja&sa=X&ved=0ahUKEwid-bnDiaDlAhXzNKYKHcAwBNwQPAgH」にアクセス  
    コード200がかえってくればok  
    目的：VPCのpublic subnetが正しく作成されているか確認するため  
- private subnetの中にEC2を立てる
  - ローカルPCからSSHでアクセスしてEC2内にログインできないことを確認する  
    目的：VPCのprivate subnetが正しく作成されているか確認するため  

- <追加課題> public subnetのEC2を踏み台にしてprivate subnetのEC2にSSH接続する
- <追加課題> private subnetのEC2のSGのインバウンドをpublic subnetのレンジからのSSH(22)だけにする
  ※変更後もpublic subnetのEC2を踏み台にしてアクセスできることを確認する

- <任意課題> private subnetの内のEC2にSession Managerを導入して  
  AWSコンソール上からEC2に接続する  
    ※動作確認用linuxコマンド： pwd  

  <https://qiita.com/to_su/items/28f0619504a4960c856d>
    目的：prvate subnetのEC2に対しコマンドを発行する手段を覚える


---

# API GW

### 概要勉強

- AWS blackbelt資料

  <https://aws.amazon.com/jp/blogs/news/webinar-bb-amazon-api-gateway-2019/>


### 課題

lambdaに集約

---

# Lambda

### 概要勉強

- AWS blackbelt資料

  <https://www.slideshare.net/AmazonWebServicesJapan/20150701-run-codeinthecloud>


### 課題

- AWSのLambdaとDynamoDBとAPIGatewayの連携させたサンプルアプリを作成する

<https://qiita.com/tentatsu/items/c45bcc4062f1a6d4cf2a>


---

# DynamoDB

### 概要勉強

- AWS blackbelt資料

  <https://www.slideshare.net/AmazonWebServicesJapan/20170809-black-belt-dynamodb>

### 課題

lambdaに集約

---

# RDS

### 概要勉強

- AWS blackbelt資料

  <https://aws.amazon.com/jp/blogs/news/webinar-bb-rds-2018/>

### 課題
- private subnet内にRDS(mysql)を作成する  
- RDSのSGを設定する  
  private subnetのEC2のIPを指定して、3306ポートのTCP通信のみ通す
- private subnet上のWEBサーバーから、RDS内にデータベース+ユーザーマスタテーブルを作成する  
  データベース名：任意

    - user_id(数値)          ：ユーザーID  
    - last_name(文字列)      ：名  
    - first_name(文字列)     ：姓  
    - email_address(文字列)  ：メールアドレス  

  ※参考
  <https://qiita.com/na0AaooQ/items/7c69a88c80f1efb4cad3#amazon-ec2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%8B%E3%82%89%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9Famazon-rds-for-mysql%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A%E6%89%8B%E9%A0%86>

- private subnet上のWEBサーバーから、RDSの対象テーブルにデータを投入する  
  Insert文の発行

---

# CodeBuild

### 概要勉強

- AWS blackbelt資料

  <https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-aws-code-services-codecommit-codebuild>

---

# CodeDeploy

### 概要勉強

- AWS blackbelt資料

  <https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-deployment-on-aws>

---

# CodePipeline

### 概要勉強

- AWS blackbelt資料

  <https://dokumen.tips/technology/aws-black-belt-online-seminar-2017-aws-code-services-codecommit-codebuild.html>