AWSを無料でさわれるセルフペースラボを試してみた

# 2017年1月　追記
ここで書いている内容は、ラボを試した時点(2016/3頃)の内容を書いています。
2017/1に確認すると、価格設定がすでに変更されていました。
**下記に記載されたものに、2017/1時点有料になっているものがあります。**
個人的な意見となりますが、AWSの基本的な機能を試すものも有料化されてしまった印象です。

# AWS セルフペースラボとは

練習用環境で演習を行って、AWSの使い方を学べる自習用のサービスです。

[qwikLABS.com](https://run.qwiklab.com/)が提供しているサービスで、アカウント作成後、演習を選択すると時間限定ですがAWSが試せます。有料の演習もありますが、基本的なものは無料で受けられるためAWSを無料でさわることができます。ちなみに無料演習は何度も受けられるので、何度も練習ができます。

無料で使える仕組みが気になりますが、amazonでも紹介されているのでその辺は大丈夫かなと（[AWS セルフペースラボ](https://aws.amazon.com/jp/training/self-paced-labs/)）。AWSアカウント取得前に、ちょっと試したい場合便利です。

2016年3月時点で、94講座中31講座が無料です。無料講座のうち日本語で提供されているのは6講座です（実際は5講座？）。

この投稿では無料できる範囲についてです。有料ラボについては、こちらでまとめています。

[AWSセルフペースラボのクエストを試してみた](http://qiita.com/kijibato/items/b9df8deb7b123c346137)

# 演習の始め方

qwikLABSのアカウント取得と演習の始め方は、すでにまとめられている方がいるのでこちらを参考にして下さい。

参考：[セルフペースラボで気軽に始めるAWS - SlideShare](http://www.slideshare.net/snihei/selfpacedlab)

# 無料講座を試す

セルフペースラボの紹介はあるけど、各講座でどんな内容が学べるかあまり情報がないようなので、実際に試してまとめていきます。個人的な備忘録的な感じです。

一部有料なものも表示されていますが、
https://run.qwiklab.com/searches/lab?keywords=introduction
で、無料(かFree)となっているものが無料講座です。

各講座あたり、30〜60分くらいAWSサービスが使えるアカウントが払い出されます。利用可能時間をすぎると、途中でも終了するので注意です。

## まずは日本語対応の講座から
2016年3月時点で、日本語対応の無料講座は6講座あります。
個人的にこの順番で受けた方がよいかなと思う順番で紹介します。おすすめ順とかではないです。

### Amazon Elastic Compute Cloud（EC2）入門
- EC2インスタンスとは
  - AWS上で動く仮想サーバ
- 手順で試せること
  - EC2インスタンスの作成
  - 作成したEC2インスタンスにSSHでログイン

### Amazon EC2 スポットインスタンスの起動（日本語版）
- スポットインスタンスとは
  - EC2インスタンスの起動にかかる価格を入札形式で決める仕組み
  - 実価格が希望価格を下回れば、実価格でEC2インスタンスが使える
  - つまり、EC2インスタンスを使っている人が少ない期間（時間帯）に安く使える？
  - 強制中断もあるため、中断されたくない場合は通常のオンデマンドインスタンス推奨
- 手順で試せること
  - 過去の価格を確認する
  - 希望価格を決めてスポットリクエストをだす
  - スポットリクエストで入札できた場合、EC2インスタンスが起動される

### [:ja] Amazon Simple Storage Service（S3）入門
- S3とは
  - httpでアクセスできるファイルサーバみたいなもの
- 手順で試せること
  - ファイルを置くための領域（バケット）の作成
  - バケットにファイルをアップロード
  - 別のバケットにファイルをコピー
  - アップロードしたファイルを消す
  - バケットを消す

### [:ja] Elastic Load Balancing 入門
- Elastic Load Balancingとは
  - AWSでのロードバランサー
  - リクエストをバランス良くEC2インスタンスに振り分けたり（負荷分散）、異常が起きたEC2インスタンスには振り分けないようにしたりできる（ヘルスチェック機能）
- 手順で試せること
  - Elastic Load Balancing(ELB)を作成する
  - ELBのURLにアクセスして、テストページが表示されるか確認する
  - (手順にはないけど)ELB配下のEC2インスタンスへのSSH接続はできる
- 備考
  - なぜかラボガイドは英語
  - ELBの振り分け先のEC2インスタンスは、ラボ開始後しばらくすると２つ勝手に作られる
  - ELBの設定順番がラボガイドと違った。ヘルスチェックの設定は少し後のページ
  - URLにアクセスして表示されるテストページが同じなので、実際にEC2インスタンスに振り分けられているかわかりにくい

### Amazon Elastic MapReduce （Amazon EMR）入門
- Amazon Elastic MapReduceとは
  - 大量データを処理するためのクラウドサービス
  - Apache Hadoopが使われている
- 手順で試せること
  - Amazon S3でのバケット作成
  - Amazon EMRでクラスタを作成
  - Amazon EMRの処理結果をAmazon S3のバケットに保存する
- 備考
  - ラボガイドはしっかりしている
  - EMRで実行するワードカウンタは既存のS3にあるみたい
  - EMRで処理する入力データは既存のS3にあるみたい
  - 処理待ち時間がある(9分くらい)
  - 長めのURLを手入力するため入力間違い注意

### AWS Elastic Beanstalk入門
- AWS Elastic Beanstalkとは
  - インフラを気にせず、アプリのデプロイと管理をするための仕組み？
  - デプロイするアプリを指定して最低限の設定をすれば、最適なインフラ構成が出来上がる？
- 手順で試せること
  - Elastic Beanstalkを使ってPythonアプリをデプロイ
  - IAMでのポリシー設定（アクセス許可？）
- 備考
  - ラボガイドとは別に、IAMのポリシー設定用のテキストファイルがある（ラボガイドのタブの隣タブです）
  - デプロイするアプリはラボガイド記載のURLからダウンロードする
  - 他の入門より内容が濃い、ラボガイドがしっかりしている
  - ラボガイドにそって操作すれば、なんとなく動かせるけど具体的に何をやっているか理解するには別途勉強が必要そう

## まだ日本語対応じゃない無料講座

受講後、順次追記予定です。

### Introduction to Amazon Elastic Block Store (EBS)
- Amazon Elastic Block Storeとは
  - EC2インスタンスで使うストレージ
  - SSDとかHDDみたいなもの
- 手順で試せること
  - EBSボリュームの作成
  - EBSボリュームをEC2インスタンスにアタッチする
  - EBSボリュームをEC2インスタンスから強制デタッチする
  - EBSボリュームのスナップショットをとる（丸ごと保存）
  - スナップショットから(容量を増やした)EBSボリュームを作成
- 備考
  - ラボ開始後、ちょと待つ必要ある
  - デタッチは、普通EC2インタンス停止後に行う、演習のため強制
  - アタッチ後、EC2インスタンスからのフォーマット、マウントの手順なし

### Introduction to AWS Identity and Access Management (IAM)
- AWS Identity and Access Management (IAM)とは
  - AWSサービスのユーザ管理機能
  - IAMでユーザごとのアクセス許可・制限を設定する
- 手順で試せること
  - 作成済みのユーザ情報の確認
  - 作成済みのグループ情報の確認
  - グループにユーザを追加する
  - ユーザのパスワード変更
  - 別ユーザでログインして、見られるサービスが違うことの確認
- 備考
  - この演習のセットアップはCloudFormation templateから作られているらしい
  - 自動作成されたユーザなのでユーザ名が長い
  - どのサービスが使えるかは、既存グループにあらかじめ設定されているみたい

### Introduction to Amazon Virtual Private Cloud (VPC)
- Amazon Virtual Private Cloud (VPC)とは
  - （適切な設定をすれば）プライベートクラウドっぽくできる
  - IPアドレス範囲、サブネット、ルートテーブル、ゲートウェイとか？
- 手順で試せること
  - Amazon VPCの作成
  - 作成されたVPCのサブネット、インターネットゲートウェイ、ルートテーブルの確認
  - セキュリティーグループの作成
  - インバウンドルールの変更
  - アウトバウンドルールの変更
  - VPC内にEC2インスタンスを作る(ネットワークの指定で作ったVPCを指定する)
  - EC2インスタンス作成時にセキュリティグループを指定する
  - Elastic IPをEC2インスタンスに関連付ける
  - VPCを削除する
- 備考
  - ネットワークの知識がないときついかも
  - セキュリティグループは、仮想的なファイアウォールみたいなもの
  - セキュリティグループのインバウンド設定は演習なので0.0.0.0/0に設定
  - プロダクション環境とかであれば、インバウンドのIP範囲を制限すること
  - VPCを削除すると関連する設定が消えるので、
    VPC削除前にVPC内のEC2インスタンスを削除する必要がある
  - この演習では、
      - Elastic IPをEC2に関連付けるまで、インターネット経由でEC2にSSH接続できない。
      - Elastic IPの関連づけ前、EC2インスタンスにパブリックDNSがなかった。
      - Elastic IPの関連づけ後、EC2インスタンスにパブリックDNSがついた。

### Introduction to Amazon Relational Database Service (RDS) (Linux)
- Amazon Relational Database Service (RDS)とは
  - AWSで簡単に使えるリレーショナルデータベース
- 手順で試せること
  - RDSインスタンスの作成
  - RDSインスタンス用セキュリティグループのインバウンド設定変更
  - RDSインスタンスへの接続確認をするための、EC2インスタンス作成
  - EC2インスタンスにログインして、MySQLクライアントをインストール
  - EC2インスタンスからRDSのデータベースに接続
  - SQLコマンド実行(show databases;)
- 備考
  - RDSインスタンスへの接続は、エンドポイントで指定
  - 手順で作るRDSは簡易ぽい(バックアップしないとか、可用性は考えない設定)

### Introduction to Amazon Relational Database Service (RDS) (Windows)
- 手順で試せること
  - RDSインスタンスの作成
  - RDSインスタンス用セキュリティグループのインバウンド設定追加
  - EC2インスタンス(Windowsサーバ)にリモートデスクトップ接続
  - MySQL Workbenchの接続設定してRDSのデータベースに接続
- 備考
  - Introduction to Amazon Relational Database Service (RDS) (Linux)のクライアント側がWindowsサーバになった版
  - 用意されたWindowsサーバをさわる以外はLinux版とほぼ同じ
  - Windows以外のOSからだとリモートデスクトップ接続用ソフト必要

### Introduction to Amazon DynamoDB
- Amazon DynamoDBとは
  - AWSで使えるNoSQLデータベース
  - ドキュメントとkey-valueデータモデルの両方対応
- 手順で試せること
  - テーブル作成
  - テーブルにデータを追加する
  - テーブルの既存データの編集
  - テーブルに対してクエリ（条件が一致するものを表示）
  - テーブル削除
- 備考
  - RDSはSQL対応のデータベースインスタンスを作るけど、
    DynamoDBはNoSQLでデータを扱うためのサービスぽい
  - 手順のように手で直接データを登録・検索する機会はなさそう
  - APサーバとかアプリからどうデータを登録・検索するかはこの手順には記載なし

### Introduction to Amazon EC2 Auto Scaling
- Auto Scalingとは
  - アプリケーションを実行するEC2インスタンスを負荷などに応じて増減させる機能
  - Auto Scalingグループを事前に設定
  - 最小インスタンス数、最大インスタンス数を指定する
  - HTTP,HTTPSでのAPI操作も可能らしい
- 手順で試せること
  - 起動設定(どのEC2インスタンスをAuto Scalingさせるか)
  - Auto Scalingグループの作成(最小数、最大数などの設定)
  - Auto Scalingで作成されたインスタンスの履歴確認
  - Auto Scaling対象のEC2インスタンスを削除
  - EC2インスタンスが自動で再生成されることの確認
- 備考
  - Auto Scalingでの生成はデフォルトだと300秒後くらい
  - この手順では処理負荷でのAuto Scalingではなく、Auto Healingぽい

### Introduction to Amazon EC2 Container Service
- Amazon EC2 Container Service(Amazon ECS)とは
  - EC2クラスタ上のDockerを簡単に起動・停止・管理する為のサービス
- 手順で試せること
  - ECSへのタスク定義(準備されたJSON形式のファイルをコピペ)
  - defaultクラスタはCloudFormation templateでセットアップされていた
  - defaultクラスタにサービス作成
  - 起動したサービスに対してブラウザから接続確認
  - 実行中のサービスを更新する
- 備考
  - セットアップ時間はちょっと長め
  - 更新時、タスク定義をqwiklabs-demo:2に変更となっていたけど、
    なぜかqwiklabs-demo:3があったのでそっちを選ぶと更新された。
  - Amazon ECS用の管理画面はまだ英語？
  - EC2クラスタの作成手順の記載ない。準備されているものが多いため、ゼロからやる手順がわからないかも？

### Introduction to AWS OpsWorks
- AWS OpsWorksとは
  - アプリのデプロイと運用を簡単できるアプリ管理サービス
- 手順で試せること
  - AWS OpsWorksでスタック作成
  - スタックにlayer(この手順ではPHPアプリサーバ)を追加する
  - AWS OpsWorksのスタックにPHPアプリをデプロイする
  - アプリがデプロイされたインスタンスのパブリックIPに接続して確認
  - スタックを削除する（Appを削除、インスタンス停止、削除、スタック削除）
- 備考
  - AWS OpsWorksの管理画面はまだ英語？
  - Chefが使われているらしいけど、この手順ではChefの知識は不要でした。

### Introduction to AWS CloudFormation
- AWS CloudFormationとは
  - AWS上にシステムをテンプレートで手軽に作成・構成できる
  - 既存のサンプルテンプレート、自作のテンプレートが使える
  - テンプレートを自作する場合、AWSのリソース、リソースの関連性、必要なパラメータなどを定義する
- 手順で試せること
  - CloudFormationでスタックを作る
  - WordPress blogテンプレートを使う(パラメータを設定する)
  - WordPressにブラウザで接続
  - スタックの削除
- 備考
  - スタックの作成が完了するまで、ちょっと時間がかかる(12分くらい)
  - スタック削除は、完了するまで時間がないかも
  - 手順としては、作って消すだけ 

### Introduction to AWS CloudFormation Designer
- AWS CloudFormation Designerとは
  - AWS CloudFormationテンプレートの編集ツール
  - グラフィカルに編集できる(JSON形式のテンプレートは編集が大変)
  - ただし実行中のスタックの編集、反映はできない
  - テンプレートを作ったり、編集したり、保存するためのもの
- 手順で試せること
  - AWS CloudFormation Designerでテンプレートの作成
      - EC2インスタンスを１つ起動するだけのテンプレート
      - インスタンスタイプ、キーペアの変更できるようにする
      - 作成後のスタックでEC2インスタンスのホスト名を表示するようにする
  - テンプレート作成後に、AWS CloudFormationでスタックの作成
  - スタックの削除
- 備考
  - このラボだとDesignerの良さがわからない？今回はEC2インスタンス１つだけ。
      - リソースをたくさん配置する場合は便利？
      - 細かい設定は、用意されたJSONテキストをコピペしている。
  - ~~最後のSpecify Resource Propertiesは、全部書き換えるとうまくいかない~~
      - ~~全部ではなく、下記のPorpertieseのブロックの中に貼り付ける。~~
      - 2016/5/22にみなおすと、テキストが修正済み？でした。下記のJSONの記載は、無視してください。

```json
{
  "Resources": {
    "ServerInstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "//": "Specify Resource PropertiesはPorpertieseのブロックの中間に追記する"
      }
    }
  }
}
```

### Introduction to AWS CodeDeploy
- AWS CodeDeployとは
  - EC2インスタンスへのデプロイメント(配布作業)を自動化するためのサービス
  - 手操作でのミスをなくし、何台のイスンタンスに対しても簡単にデプロイができる
  - デプロイは１度にすべてのインスタンスに、デプロイするしないが選択できる
      - 1度に1インスタンス
      - 1度に半分のインスタンス
      - 1度にすべてのインスタンス
- 手順で試せること
  - CodeDeployのサンプルからEC2インスタンスを生成する(ちょっと待つ)
  - CodeDeployのサンプルアプリのデプロイ
  - デプロイメントの進捗を確認する
  - アプリがデプロイされたEC2インスタンスにブラウザからアクセス
  - CodeDeployのサンプルで作ったEC2インスタンスを削除する
  - CodeDeployのアプリケーション設定を削除する(関連するデプロイグループ、トリガー、およびリビジョンもすべて削除)
- 備考
  - このラボだとサンプルデプロイの確認のみ。
  - サンプルをデプロイする方法しかやらないです。
  - このラボだけだと、実際に使うカスタムデプロイ(既存のEC2インスタンスに対して、独自のアプリケーションをデプロイする)はやり方不明です。