AWSセルフペースラボのクエストを試してみた

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

AWSの自習ができるサービスです。
よろしければ前投稿を参考に。
[AWSを無料でさわれるセルフペースラボを試してみた](http://qiita.com/kijibato/items/06f3a3566574e8c1e4e9)

# クエスト？
qwikLABSで公開されている特定のトピックに関する自習用講座（ラボ）を順番に受けていくと、体系だってAWSが学べるようになっているものです。クエストのラボを全部受けると、（特にメリットはなさそうですが）称号がもらえます。

# 無料ラボとの違い
無料のラボと、有料のラボの比較です。

- 有料ラボは、日本語化されているものが多い
- 無料ラボは、そのサービスだけの基本操作な感じ
- 有料ラボは、いくつかのサービスを組み合わせているので実用的かも

有料なので当然ですが、やってみて勉強になるので楽しめます。
基本的な内容でも微妙にためになります。

- 同じようなEC2インスタンスを作るラボでも、インスタンス作成時にバッチを実行するようにするとか。
- 同じようなS3のラボでも、コンテンツを置くだけじゃなく、ブラウザからつないで確認するとか。

# ちょっとわかりにくかった部分のメモ

ラボガイドの記載の一部が古かったりで、ちょっとつまった内容をメモ。2016年3月時点。AWS10周年を記念して2016/3/14〜3/31の間、無料期間だったのでその時の内容です。

## Working with Elastic Load Balancing（日本語版）
インスタンス起動時に実行するコマンドで、コピペできるテキストの方が、

```
#!/bin/sh	#!/bin/sh
```

になっているので注意。ラボガイド手順と見比べる。

## Maintaining High Availability with Auto Scaling (for Linux)（日本語版）
- Auto Scalingを試すときに１つのインスタンスで負荷をかけるボタンをクリックするけど、インスタンスが３台に増える前に負荷をかける処理が終わっていたかも？場合によっては再度ボタンをクリックして負荷をかけないといけないかも。

## Building Your First Amazon Virtual Private Cloud (VPC)（日本語版）

- VPCを最初作るとき、NATゲートウェイを使う場合はElastic IPが必要？右の方にNATインスタンスを使うみたいなのがあったので、それをクリックすると手順どおりキーペアの設定項目がでた。
- 途中Windowsサーバはm1.mediumを選択するようになっているけど、m1.mediumはすべての世代を表示みたいなボタン(現行世代だったかも)を押さないと選べない？
- バックエンドのSQL Server用のセキュリティグループのインバウンド設定で、一度既存のRDP用ルールを削除して、再度追加するときにRDPの指定を忘れずに。手順的に、sourceだけ踏み台WindowsサーバのセキュリティグループのIDを設定するだけかと思って進めたら最後接続できなかったので。
- 最後の方で、踏み台Windowsサーバにリモートデスクトップ接続する場面があるので、Windows以外のPCを使っているひとは事前にリモデ接続用ソフト必要。(MacならMicrosoft Remote Desktopなど)

## Working with AWS Elastic Beanstalk

- Elastic Beanstalkでアプリが動く環境を構築するラボ。ひととおり手順が終わってデプロイの確認後の接続確認ができるまで、10〜20分程度待つ必要ある。なので、先に手順を終えてから、最初の機能説明をじっくり読むのもありかも。英語なので。

## Caching Static Files with Amazon CloudFront Lab Instructions

- S3のデータを複数のエッジロケーションに置いて海外ユーザからのアクセスを効率化する機能。エッジロケーション間でデータ同期が終わるのを待つ時間が結構長い。15分程度待って。待っている間に少し手順を進められる。

## Launching Amazon EC2 Spot Instances with Auto Scaling and Amazon CloudWatch（日本語版） 

- CLI多めです。

## Using Dynamic Registration and Dashboards for Amazon EC2 Instances

- 最後、インスタンス状態をみるデモ用画面が見れるのは、EC2インスタンスが正常に起動できた後くらいから。インスタンス削除直後は、アクセス拒否のままでした。

## Building a Media Sharing Website - Part 1: Media Upload（日本語版）

このラボはラボガイドどおりにできなかったので、いろいろ試行錯誤。EC2インスタンスが普通に作れなかったのは、何が原因？

- DynamoDB設定項目が違ってた、とりあえずプライマリーキーのパーティションキーをeib(文字列)に。それ以外は、テーブル名を指定しただけでデフォルト設定のまま。
- EC2インスタンス作成時に、デフォルトVPCがないと言われたのでVPCを作った。
- パブリックDNSがなかったので、Elastic IPを割当て。
- 起動後web画面見れなかったので、インスタンスにSSHログインして、コマンドをsudoとかで実行。

## Building Scalable Web Applications with AWS Elastic Beanstalk

- pythonアプリをダウンロードして、Gitにコミット。
- そのあと、Boto(AWS SDK for Python)を使ってElastic Beanstalkの設定と構築。
- アプリエンジニア向け？
- 使っているSSHクライアントのKeepAlive設定を事前にしておいた方がよいかも。（Botoのeb startコマンド実行中にセッションタイムアウトしました。※AWS側の処理は続いていたので、コマンド結果が途中で切れるだけ。）

## Hosting WordPress Using Amazon S3（日本語版）

- EC2上の動的なWebサイト(このラボではWordPress)から、静的なウェブサイトを再生成して、そのファイルをS3に定期的にプッシュするラボ。プッシュはcron実行設定しているけど、EC2側で更新したあとに、静的コンンテンツを再生成(wpstatic.sh実行)しないと、S3側には反映されない？

## Streaming Dynamic Content using Amazon CloudFront

- S3に置いたmp4ファイルを、Amazon Elastic Transcoderを使って、マルチビットレートファイルに変換して見られるようにするラボ
- 変換後のファイルは、(iPhoneなどの)iOS端末かAndroid4.x端末でみる。
- 手順どおりにやったが、動画はアクセス拒否で見られず。なので、Elastic Transcoderが生成したS3上のoutputファイルを全部公開設定にすると動画再生できました（正しい公開設定方法ではないと思いますが）。

## Auditing Your Security with AWS Trusted Advisor

- セキュリティに関するラボ。管理者であれば知っておいた方がいい内容かも。
- Trusted Advisorでセキュリティチェック。Excludeの操作がわかりにくいけど、Excludeにしたい行にチェックをした状態で、非表示＆更新を押すと警告から非表示になった。
- 手順書にない？RDP用ポートの3389が残っていたので、SSH(22)と同じくとりあえずExludeに。（本当であれば、sourceを制限する？）
- Multifactor Authentication(MFA)、AWSログイン時に、携帯端末に送られてくる番号の入力も必要にする場合の手順(2段階認証)。
- 仮想MFAデバイスとしてスマホ使えるけど下記アプリが必要。
  - Android(AWS Virtual MFA, Google Authenticator)
  - iPhone(Google Authenticator)
- デバイス登録時は、端末に表示される6桁数字をスペースなしで1つ目に入れる。30秒後に別の数字が端末に表示されるので2つ目に入力して、登録ボタンを押す。（つまり、1分間に2回6桁の数字が表示されるので、その両方とも正しく入力できたらOKというしくみぽい）
- 再ログイン時は、アカウントとパスワードの認証画面の後に、そのとき携帯端末に表示された数字を入力できればよいみたい。

## Auditing Changes to Amazon EC2 Security Groups（日本語版）
- どちらかというとAWSの情報を効率的に情報取得したいひと向け？
- Pythonとかスクリプト経験ある方がいいかも
- Pythonとboto SDKを使うと、こんな感じにセキュリティグループ情報が一括でとれます的な内容
- 後半は、セキリティグループの変更をトラッキングするためのサンプルアプリ紹介。収集した情報をうまく使えば、こんなこともできますよ的な内容

## Deploy a Java EE Application on AWS Elastic Beanstalk Using Docker Containers

- AWS Elastic BeanstalkでDockerコンテナをデプロイするラボ。（Amazon EC2 Container Service (ECS) ではなく）
- 手順の３分の２以上は、Dockerに関する内容でした。
- 途中のセキュリティグループのインバウンド設定は、docker psの結果(0.0.0.0:xxxxx->8080/tcp, 0.0.0.0:xxxxx->9990/tcp)のxxxxxの値が小さいポート番号から、ちょっと広めに指定する。
- 後で、再度コンテナ起動する手順があるけど、その時ポート番号が変わるので。
- 管理画面確認するときのポート番号と、デプロイしたアプリの確認するときのポート番号は違うので注意
- eb initでDockerのバージョンきかれたけどデフォルトのまま(Docker 1.9.1)にした
- eb createは長いので、SSHクライアントのキープアライブ設定しておいた方がよいかも

## Building Search into your Applications with Amazon CloudSearch

- Amazon CloudSearchに、JSONファイルをアップロードして、検索できる状態にするところまでが手順に書いてある。
- その後、HTTP/RESTリクエストでの検索結果の取得方法については、なぜかEC2インスタンスにブラウザで接続して勉強する形式になってます。

## メディア共有ウェブサイトの作成 – パート 2: トランスコーディング

- 別ラボの「Streaming Dynamic Content using Amazon CloudFront」と内容が似ている？このラボでは、EC2インスタンス上のメディア共有ウェブサイトからアップロードされた動画が、Amazon Elastic Transcoderで変換されるようになっているので、よりウェブサービスっぽいかも。
- 「Streaming Dynamic Content using Amazon CloudFront」だと、マルチビットレートを考慮したファイル変換でしたが、こちらではそこまでやっていないです。
- 別ラボの「Building a Media Sharing Website - Part 1: Media Upload（日本語版）」と同じで、設定項目が違ってた？とりあえずプライマリーキーのパーティションキーをeib(文字列)に。それ以外は、テーブル名を指定しただけでデフォルト設定のまま。
- アップロード確認するためのサンプル動画のリンク先がみれず、サンプル動画がダウンロードできない？試す場合、著作フリーなmp4ファイルを事前に用意しておく？

## Automating AWS Services with Scripting and the AWS CLI

- 操作をマネジメントコンソール、CLI、SDK(Python + boto)のそれぞれで試すラボ。マネジメントコンソールのGUI操作が面倒だと思うひと向け。
- 用意されているスクリプトを実行していくけど、Python知っている方が何をしているのかわかりやすいかも。
- EC2インスタンスを止めるためのスクリプト（bastion-close.py）は、最初の実行ではEC2は止まらない。以降の手順に進むと、タグをつけていないから止まりませんと書いてあります。タグをつけた後、実行すると止まります。

## Working with Amazon Redshift（日本語版）

- Amazon Redshiftは、データウェアハウスサービス。
- 規模の大きいデータをデータベースに入れて、分析するのに使う。
- Redshiftではインデックスを使わない。でも高速なクエリ実行ができる。
- このラボだと、約１億行のデータ対して計算を行うクエリの実行時間が数秒くらい。（普段１億行のデータを扱わないので、速いのか実感ない…）
- PCにDbVisualizer（GUIのSQLクライアント）をインストールして確認する手順。
- Redshift作成時のインスタンス指定のdw2.largeは、dc1.largeで。dw2.largeは古い名前らしい。

## Launching GeoServer on AWS（日本語版）

- GeoServerを作成するラボ。最終的に、そこそこ可用性を考慮したインフラができるため、AWSの主要サービスのおさらいにぴったり？
  - ELB（不可分散、AutoHealing）
  - Webサーバ（一度構築してカスタムAMIとして登録するとか）
  - RDS（PostgreSQLサーバ）
  - セキュリティーグループ設定
- 手順説明はやや省略気味なので、マネジメントコンソールでの基本操作を知っておいたほうがよいかも。

## Launching Microsoft HPC Pack on AWS

- AWS上のWindowsサーバで分散処理をするための環境をつくるラボ
- Head NodeとCompute Nodesのクラスタをつくるところまで、ほとんどMicrosoft HPC Packの初期設定
- セットアップが20分ぐらい、しかも見たことない画面操作が多かったので、１回目は時間切れでした。
- 踏み台(bastion)サーバにはすぐリモデ接続できましたが、そこからさらにリモデでつなぐのはセットアップが終わらないとだめっぽいです。なのでセットアップ終わるまで待ちが長い。
- 踏み台から、リモデ接続用するときはAWSLAB\HPCUserで。AWSLAB¥HPCUserではないので注意。Windowsサーバのキーボードのキー配置が日本語キーボードではないので、ちょっと面倒。

## Exploring Google Ngrams with Amazon EMR（日本語版）

- N-gram、Hiveを知っているひと向け。
- 手順でつまるところが多かったのでメモ。
  - クラスタ作成時に、AMI versionとAdditional applicationsを選択する手順が書いてあったけど、今だと選択項目が違っていたのでソフトウェア設定のリリース、アプリケーションをデフォルトのままにした。
  - Hardware ConfigurationでMaster,Coreで違うタイプ(m1.medium, m1.large)を設定する手順だけど、
今は同じものしか選べないので、大きい方のm1.largeを選択。
  - クラスタ作成後、待機中になるまで13分くらいかかる。
  - 現バージョンだとマスターノードへのSSHログインができない設定？みたいだったので、マスターのセキュリティグループ:sg-xxxxxxxx (ElasticMapReduce-master)のインバウンドにSSHを任意0.0.0.0から許可する設定を追加。本当であればもっと絞る？
  - Hiveの実行コマンドは、bin/hiveがダメだったのでhiveで。
  - hive.base.inputformatの設定でエラーになったけど、無視して続行。時間があれば、確認するべきだけど、いろいろ手順どおりでないので今回は無視しました。下にエラー文。
  - Hiveでのコマンド実行が待ち時間長めです、5分以上かかるものもあります。

```
hive> set hive.base.inputformat=org.apache.hadoop.hive.ql.io.HiveInputFormat;
Query returned non-zero code: 1, cause: hive configuration hive.base.inputformat does not exists.
```

## Working with Amazon DynamoDB（日本語版）

- TwitterのツイートをDynamoDBに詰め込んで、Webサーバに表示するラボ。
- Twitterアカウントが必要（Twitter Appsを利用するので、**Twitterアカウントに電話番号の登録が必要**）。
- ラボの手順確認が終わったら、**このラボで作ったTwitter Appsは（手順に記載はないけど）Deleteしておいた方がよいかも**。
- DynamoDBの設定項目が手順と違う？
  - プライマリキーの設定
      - Primary Key Type : Hashの設定欄はないみたいなので無視する
      - Hash Typeをパーティションキーの右側に設定
      - キーが２つある場合はソートキーの追加で

  - Read Capacity Units、Write Capacity Unitsは、下の方のデフォルト設定の使用のチェックを外して、読み込み容量ユニット、書き込み容量ユニットに設定する。
  - スループットの容量の拡張は、テーブルを選択して右側に容量タブがあるのでそこから変更？