toto_1212

技術のログをツラツラ書きます。自分用ですが参考にしていただけたら嬉しいです。間違ってたらドンドン突っ込んでください。

【勉強会】AWS勉強会 at IPROS ~IPROSさん~

IPROS Tech Meetup 「AWS勉強会 at IPROS」 http://atnd.org/events/41438 
IPROSさんが主催するAWS勉強へ参加してきましたのでメモベースで備忘録を。

初級者向け、中上級者向けという構成でLTがありました。

【初級編】

初級者向け@竹内さん


・AWSの概要
AWSはWeb経由でアクセスできるよう整備されたサービス群の総称

・主なサービス
Amazon EC2→VPSサービス。
Amazon S3→ストレージサービス。
Amazon CloudFront→コンテンツ配信サービス。
Amazon RDS→データベースサービス。
Amazon Elastic MapReduce→Hadoopを利用したデータ処理サービス。

・IPROSさんでの用途
EC2
 ・フロントエンド
 ・バックエンド
 ・インデクシング
 ・監視サーバー
 ・バッチ実行環境
 ・テスト環境など
RDS
 ・データベース
S3
 ・静的ファイル
 ・ログ
EMR
 ・ログ解析
CloudFront
 ・キャッシュ
CloudWatch
 ・監視

・他のVPSとの比較
全く同じスペックのサーバが各社あるわけではないので、同等のスペックで
比較を算出。
720時間で計算すると各種社コスト的にあまり変わらない。

ではなぜ、AWSなのか。
・AWSを使うと良い場面
アクセスの増減が激しい
運用期間が短い
アクセス数が予測不能
一時的な大量アクセスに対応する
開発環境を構築する

・AWSを使うと悪い場面
規模が小さい場合
規模が非常に大きい場合
社内システム

とここで勉強会に参加されていたAWSの@shot6さんから釈明が。

規模が非常に大きい場合
 →運用の柔軟性、スケールの柔軟、各社大規模システムでの利用が
  目立って来ているので、決して大規模に向かないわけではない。
社内システム
 →開発機/テスト機にはもってこいのAWS、夜間は停止させる等の
  運用を行えばコストメリットは高い。

・AWSでRailsサーバー構築
デモ

・S3について
AWSが提供するオンラインストレージサービスの名称

・S3の使い道
ファイルの管理
静的WEBサイトの利用

・S3を使って静的WEBサイト構築
デモ

・初級編のまとめ
AWSはamazon社提供のWebサービス群の総称。
EC2はサーバーのリソースをレンタルできるサービス。
S3はオンラインストレージサービス。
インスタンスはブラウザから簡単に作れる
バケットはブラウザから簡単に作れる

【中上級編】

AWS中上級編@外山さん

・問い:AWSと他のVPSやクラウドサービスとの違いはなんですか?
  →プログラマブルなこと(API重視、UIはあとからついてくる)@shot6さん
 回答:インフラをプログラミングできる。(プログラマブルなインフラ)@外山さん
 APIが豊富でたくさんのSDKがある。

AWS SDK
Java
Ruby
Node.js
.NET
PHP
Python

・AWS-CLIの特徴
ほぼ全てのサービスが網羅されている。
アクセスキーやシークレットキーの設定が1箇所でよい。
サブコマンドの補完が可能。(これ結構重要!)
結果がJSON(textも可能)
IAM ROLEを使って認証情報をサーバーから隠蔽できる。

・環境設定方法
①サーバーの環境変数

# アクセスキー
export AWS_ACCESS_KEY_ID=
# シークレットキー
export AWS_SECRET_KEY_ID=
# リージョンを省略したい場合
export AWS_DEFAULT_REGION=ap-northeast-1

①はちょっといけてない
 ■開発環境と本番環境で認証情報を分けている場合、
  毎回環境変数を切り替えなければいけない。
 ■リージョンが異なる環境で開発をしている場合、
  リージョンを切り替えなければいけない。

②設定ファイル

export AWS_CONFIG_FILE=/path/to/config_file

[default]
aws_access_key_id=
aws_secret_access_key=
region=ap-northeast-1

[setting2]
...

[setting3]
・・・
aws ec2 describe-instances -profile setting1
aws ec2 describe-instances -profile setting2

さらにイケてる方法
③IAM ROLEによる設定
アクセスキーをサーバーに置かなくて良い。
権限を集中管理できる。
リージョンの指定は必要

・IPROSでのAWS-CLI利用用途
RDSの本番環境 → ステージングへの同期処理
EC2ダウン時にELBから切り離す処理

#ロードバランサーから切り離し
aws elb deregister-instances-from-load-balancer --load-balancer-name ${ELB} --instances `cURL http://169.254.169.254/latest/meta-data/instance-id`

・AWS-CLIをインスタンスメタデータと組み合わせる
■インスタンスメタデータ
自分自身のデータを自分で取得できる
自分自身のElasticIP、インスタンスID、リージョン、アベイラビリティゾーンなど。(※後述)
主にEC2で使用
cURLなどでデータを取得できる。

・取得できるメタデータ
AMI-ID
インスタンスID
プライベートIPアドレス
所属しているセキュリティグループ
アベイラビリティゾーン
アクセスキー、シークレットキー

・Jqコマンド
command-line JSON processor
インデントやカラー処理でJSONを見やすく整形してくれる

# 最も簡単な例
echo ‘{“id” : 1 , “name” : “toyama”}’ | jq .
# awsコマンドと連携
aws ec2 describe-instances | jq .
# もちろん外部のJSONとも連携可能
curl -s https://graph.facebook.com/toyama0919 | jq .

・AWS-CLIの問題点
CloudFront、DynamoDB、SimpleDB未対応

・中上編のまとめ
AWS-CLIでAWSの運用を自動化する。
認証情報は極力サーバーに置かない。
IAM ROLE利用推奨。