AWS1年目無料期間でやったこととハマったこと


昨年のJAWS DAYS（3/22）のハンズオンでAWSアカウントを作り、そこから1年間の無料期間でいろいろやったことを書き出す。正直言ってきちんと活用し切れなかったなぁという思いがあるので参考にならないかも。

最初にやること
====

気を付けるポイントとしては **セキュリティ** と **課金** かと。以下、だいたいがよく言われていることではある。

## IAMユーザーを作成する

[IAM](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html)はAWSの権限管理のためのサービス。最初にAWSアカウントを作成したときに使った、メールアドレスをユーザー名とするユーザーはいわゆるrootユーザーにあたるので、AWSコンソールへのログインにはIAMで新たにユーザーを作成して使用するのが適切。またGoogle Authenticator等で他要素認証も設定しておく。

## Trusted Adviserを設定する

[Trusted Adviser](https://aws.amazon.com/jp/premiumsupport/trustedadvisor/)はAWSの使用状況がコスト、セキュリティ、パフォーマンス等の面で適切な状態にあるかチェックしてくれる。例えば`0.0.0.0/0`に向けてオープンなポートのあるセキュリティグループを作ったりすると警告してくれる。サポートプランをグレードアップしない限り、すべてのチェック項目を有効化することはできないが、ベーシックサポートのままで使える項目だけでかまわないので有効化が推奨。

## CloudTrailを設定する

[CloudTrail](https://aws.amazon.com/jp/cloudtrail/)はAWS APIへのアクセスをロギングしてくれるサービス。不適切なアクセスがないか監視する、という意味でも、自分の操作を記録しておく、という意味でも、有効化がベター。ただし、S3に保存されたログが課金される。

## CloudWatchで利用料金を監視する

AWSの監視サービスであるCloudWatchを使って、利用料金の監視が可能なのでセットする。

[Amazon CloudWatchでAWSの利用料金を監視する - Masteries](http://papix.hatenablog.com/entry/2015/08/06/224502)

AWS1年目だと基本的には「0円運用」を意図していると思うので、0円を閾値にアラートが上がるようにするのが普通。推奨としては、これに加えて500円か1000円ぐらいのラインでも監視をした方がいい。アラートは閾値を突破したとき1回発報されるだけなので、例えば0円を一度超えてアラートが上がり、それに対応した後、また課金が発生した場合、「0円」閾値だけだとそれには気付けなくなってしまう。

## VPCとセキュリティグループについて正しく理解する

VPSを借りる場合は、いわゆる基本的なLinuxの「要塞化」によってセキュリティを担保したと思うが、AWS自体のアーキテクチャーでセキュアにすべきところなので、AWSのセキュリティ構成は早めに理解した方がいい。ポイントはVPCとセキュリティグループ。VPCはAWS内に閉じられた、プライベートなネットワークセグメントを切るための設定であり、セキュリティグループはファイアウォールにあたる。オンプレのネットワーク機器の設定と同様、これを理解しておかないと、まともにAWSリソースへのアクセスすらできなかったりもするので。。。

[AWS Black Belt Techシリーズ Amazon VPC](http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-vpc-47025202?qid=f7de5f8b-627c-4499-864f-2d407ef688ba)

ハマったこと
====

特に課金方面を中心に、AWS利用の上でハマったポイントをいくつか上げておく。

## EC2が最初の関門

「No EC2」だとかサーバーレスアーキテクチャーだとか言われる時代にはなったけど、やっぱり最初に触るのはEC2で、それ故ハマりやすいのもEC2だった。

* EIPを設定しない限りは終了→起動のたびにDNS名とIPが変わる。
* セキュリティグループに穴を開けないと、firewalldでいくら穴開けても通信できない。
* VPCがインターネットに出られるようになっていないと、EC2にパブリックIPが振られない（＝外からアクセスできない）。
* 後述の通り課金上ハマった罠がいくつかあった。
* EC2 Amazon Linuxデフォルトの状態では開発系のツールがほとんど入っていない。Development Toolsをまとめて入れると楽。
  * [ソフトウェアのコンパイル準備 - Amazon Elastic Compute Cloud](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/compile-software.html)

## 課金が発生しても特にお知らせはない

普通の感覚だと、課金が発生したら月末に請求書でも来そうなものなのだが、AWSの場合はデフォルト設定だと特に通知はなく、黙って登録クレジットカードから決済だけされている。CloudWatchでアラートを掛けていたとしても、さすがに精神に悪いので、請求書の取得は設定しておくのがオススメ。

[メールで送付された請求書の取得 - AWS 請求情報とコスト管理](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/emailed-invoice.html)

## 無料使用可能な条件は正しく確認する

何が無料使用可能なのかは当たり前ではあるが正しく理解しておく。

例えば自分の場合EC2で課金が発生してしまったのだけど、あれは（本記事執筆時点では）t2.microに限り750時間/月の稼動まで無償になる。つまりはインスタンス1台をずっと起動しっぱなし（24時間×30日＝720時間）ぐらいを想定しているわけだが、自分はこの時間制限を見落としていて、EC2インスタンスを2台立ち上げっぱなしにしてしまって課金になった。

あるいはEC2に固定IPを付与するElastic IPは、 **起動中のインスタンス** に紐付けられている間に限り無償である。インスタンスを落としたり、割り当てをせずにいたりすると少額だが課金対象となる。

## リージョンへの注意

AWSコンソールだと右上に表示されているリージョン（DCの場所）、当初はあまり意識していなくてオレゴンにインスタンス立ててレイテンシーに頭を悩ませるみたいなこともあった。リージョンの概念を理解して意識する。

* リージョンによってサービスの価格は異なる（東京はわりと高め）。
* 特定リージョンじゃなければリリースされていないサービスがある。そのようなサービスに飛んだときは、自動でコンソールの表示リージョンが変更される。
* コンソール内で表示されるのは基本的に1リージョンごと。
  例えば東京リージョンのEC2を表示しているとき、オレゴンで立っているインスタンスは見えない。

## 情報がすぐ陳腐化する

新しいサービスがどんどん追加されているのも当然ながら、細かいアップデートもちょこちょこと入るので、ネットで見つけたAWS系のtipsが実はすでに使えないですなんてことも少なくなかった。AWSだけに言える話じゃないけど、まずはブログやQiitaより公式のdocsを確認する習慣をつけるようになった。

1年間でやったこと
====

JAWS-UGに参加する
----

日程の都合もあったりしてそれほど参加はできなかったけど、Japan AWS User Group、通称JAWS-UGのイベントに何度か参加させていただいた。

[JAWS-UG – AWS User Group – Japanは、Amazon Web Servicesの利用促進や情報交換のためのユーザーグループです。 | JAWS-UG](http://jaws-ug.jp/)

地域別、あるいは分野別（コンテナ、IoT、CLIなど）に複数の支部があり、それぞれがそれなりの頻度で勉強会や懇親会を開催しているので、探せば来週にでも行かれたりするはず。昨年立ち上がったところだと「初心者支部」なんてのもあるから、AWS1年目だと良いかも。私は立ち上げの第1回だけ参加してます（その後は日程合わず。。）今年はCLI支部とOpsJAWSに頻繁に行ってみたいなと思っている。

参考書を読む
----

AWSは単なる「クラウドサービス」と言うより、数多のXaaSサービスが連関して構成された「クラウドアーキテクチャー」であって、ただ1つ1つのサービスを使っていてもなかなか全体像が見えにくい。なので実際の構成パターンを交えて紹介された書籍を読み、活用イメージを付けた方が良いと思う。

* [Amazon.co.jp： Amazon Web Services パターン別構築・運用ガイド: NRIネットコム株式会社, 佐々木 拓郎, 林 晋一郎, 小西 秀和, 佐藤 瞬: 本](http://www.amazon.co.jp/dp/4797382570/)
* [Amazon.co.jp : Amazon Web Services実践入門 (WEB+DB PRESS plus) : 舘岡 守, 今井 智明, 永淵 恭子, 間瀬 哲也, 三浦 悟, 柳瀬 任章 : 本](http://www.amazon.co.jp/dp/4774176737)

注意すべきはAWSのサービスリリースがめちゃくちゃ速いので、1年前の書籍であっても記述が古くなっている場合があるという点。必ず最新の状況とは照らし合わせるべき。

AWSの公開資料を読む（2016-06-08追記）
----

AWSがかなりの数の技術文書（主にベストプラクティス）を公開している。

* [AWS アーキテクチャーセンター | AWS](http://aws.amazon.com/jp/architecture/)
  * 特に「Well-Architected Framework」、クラウドのアーキテクチャーを考える前提として良い。
* [AWS クラウドセキュリティ | AWS](https://aws.amazon.com/jp/security/)
  * 「リソース」に各種資料あり。
* [ホワイトペーパー | AWS](https://aws.amazon.com/jp/whitepapers/)
  * 興味あるもの、関係のあるものを読むだけでも。

Webinarを受ける
----

AWSが開催しているオンラインセミナー（Webinar）が存在する。

[国内のクラウドセミナー・イベントのスケジュール | AWS](https://aws.amazon.com/jp/about-aws/events/)

だいたい（毎週？）火曜のお昼と水曜の夜の開催で、 ~~初心者向けと、中級者向けであるBlack Beltの2種類~~ **（⇒2016年4月からBlack Beltに1本化されたとのこと：[AWS Solutions Architect ブログ: 4月(前半)のAWS Black Belt Online Seminarのご案内](http://aws.typepad.com/sajp/2016/03/black-belt-online-seminar.html)）** がある。自分のレベルと興味関心に合わせておこのみで。

また「Black Belt」で検索すると過去資料もSlideShareなどで見られるのでオススメ。

セルフペースラボを活用する
----

正確には自分は使っていないのだけど、AWSが公式に公開している[セルフペースラボ](https://aws.amazon.com/jp/training/self-paced-labs/)という学習環境があるので、実際にAWSアカウント取得しても作るものがないしハンズオンできない！という場合には活用すると良さそう。

とにかく何か作る
----

どうせ無料なんだから、何に使うでなくてもとにかくリソースを作る。触ってみる。何か作るものがあるならAWSで出来ないか？と考えてみる。とはいえ自分もなかなかハンズオンできなかったのだが、やったのはこんなところ。

* EC2を立ててクラウド開発環境にする（今の使用中）
* EC2でウェブサーバーやDBサーバーを立ててみる。
* S3（Glacier）にMacの写真をバックアップする。
* SESを使おうとしたがメールの審査で弾かれてよくわからなくて断念。
* hubotからAPI Gateway経由でLambdaを叩き、EC2を起動する。
* CloudWatchのアラートをSNS、SQSを通じてslackに流す。
* RDSを立ててEC2からmysqlコマンドで叩いてみる。
* Config Rulesでルールに沿わないEC2の起動を禁止する。 ※無料じゃないです。
* AWS CLIですべての操作ができないか試してみる。
* Elasticsearch ServiceにEC2からデータを流す（今やってる。近日中にQiitaに上げる）
  ⇒2016-04-12 上げました [ZaimのデータをLogstashでAmazon Elasticsearch Serviceへ投入する - Qiita](http://qiita.com/chroju/items/d46a9b2ce9374b676681)

Redshiftを個人で使うといっても使いようがなかったり、無料枠をすべて使い切れるわけでもないと思うが、とにかく片っ端からいじってみたら良いと思う。AWSは既存インフラの単なる代替ではなく、まったく異なるアーキテクチャーと操作性を持っているので、とにかく触って感覚を掴むことが一番大事だなと、この1年を通じて思った。

現状と今後について
====

まだまだ知識が足りたとは言い難いので、継続して個人環境も用いた学習は進めていくが、自分が現在Opsに身を置いているということも鑑みて、注力すべき方向は見えてきたかなと。

* AWSの最適な運用を考える。Config Rules等を用いてシステマチックに縛る。
* Infrastructure as Codeともうちょっと上手いこと絡めたい。Terraformとか試したい。
* 個人的にLambdaを極力活用する。hubot経由でいつでもいろんなものを叩けるような環境がほしい。
* JAWS-UGにもっと絡む。

2年目も頑張る :raised_hands: