aws関連めも

refs:aws2

■サービス
・ec2(elastic compute cloud)
仮想サーバ
オンデマンドインスタンス。マイクロインスタンス。インスタンスタイプ。ECUはCPU能力の単位。1ECU=Xeonプロセッサ1つ。インスタンスストレージは揮発性ディスク。
ファイアウォールはセキュリティグループ。Inboundはインスタンスに入ってくる通信を制御。デフォでは22番のみ。Outboundはインスタンスから出て行く通信を制御。デフォでは全て許可。
refs:すべてのインスタンスタイプについて

AMIがAmazon Linux の場合、ユーザ名はec2-user。rootはなし。sudo -iでrootになれる。

refs:amazon ec2 よくある質問

・Auto Scaling
起動する仮想サーバ数の自動調整。ELB(Elastic Load Balancing),Simpe Queue Serviceなどの連携してスケーリングする。managemento consoleのec2に、Auto Scaling, Auto Scaling Groups,Launch COnfigurationなどがある。CLIツールがある。

・Amazon CloudFront
コンテンツを配信するためのキャッシュ機構

・Amazon CloudWatch
AWSの各種リソースをモニタリングするサービス。仮想サーバや通信網などを監視し、アラート出したり、「Auto Scaling」と組み合わせてサーバの台数を調整したりする。
例えばbilling alert。類似の他の監視ツールは、Nagios,Cacti,Zabbix,Muninなどがある

・Amazon Route 53
DNSサーバ

・ELB(Elastic Load Balance)
負荷分散機能。CloundWatch、AutoScalingと連携して利用される、
スナップショット。

・Amazon S3(Simple Storage Service)
webストレージサービス。静的なwebページ公開のためにも使える。
少し安全性が低い低冗長サービスもある。リクエストはGET,PUT,LIST,POSTなど。
Static Website Hostingという機能を有効にすると、webサーバとして使える。Bucket(バケット)と呼ばれるs3のファイルを保存する場所が必要。ファイルアップローダのクライアントツールには、cloudberry explorer、bucket explorer、fiefox ad-onのAmazon S3 Organaizer、macならS3Hubなどがある。S3でのユーザ認証するには、アクセスキー、シークレットキーが必要。キーを作るには、メニューのユーザ名▶︎Security Credentail▶︎Access Keys
S3は、特定のユーザや不特定多数の人と共有できる。不特定多数の人と共有する場合、S3に対してポリシーを作る必要があるが、そのときPolicy Generatorという便利なwebツールがある。

s3でwebを公開する場合、でふぉのURLはhttp://hogebucketname.s3.amazonaws.com/みたいになるが、これを独自ドメインにしたい場合、レジストラ、もしくはRoute53のDNS設定でCNAMEレコードを設定する。

s3の認証機構の方法は、IAM(AWS identity and access management)ポリシー、バケットポリシー、ACL。

・IAM(AWS identity and access management)
aws操作をよりセキュアに行うための認証、許可のしくみ。aws利用者の認証と、アクセルポリシーを管理。aws操作のためのグループユーザの作成が可能。開発チーム、運用チームとか。グループごとに実行できる操作を規定。ユーザごとにも認証情報の設定が可能。
アカウント内で複数ユーザを作成し、セキュリテぃクレデンシャルや権限を付与する事が可能。S3のバケットにオブジェクトのPUT/GETとか。IAMではユーザレベルでコントロールできる。アクセスポリシー言語を記述する
json,ARNで記述したりする。IAMポリシーはjson形式で書かなければいけない。Policey Generatorというジェネレータもある。
AWS STS(Sercurity token service):一時的に利用するトークンサービス。動的にIAMユーザを作成する。Temporary Security Credentials。
IAMの権限階層はAWSアカウント、IAMユーザ、Temporary Security Credenitials

・VM import/export
EC2の仮想イメージをVMwareなどの仮想イメージとしてやりとりする

・Amazon EBS(Elastic block store)
 EC2インスタンスで使用するブロックレベルのストレージボリューム。ec2でサーバを起動するにはOSが必要。OSをインストールするためにはディスクが必要。そのディスクがEBSというファイルシステム。EBSのスナップショットをS3に保存できる。

・Glacier
超安価かつ高い耐久性を持つコールドストレージサービス。Glacier APIがある。
Vaultはアーカイブ用コンテナ、格納するアーカイブ数の制限なし、IAMによる制御可能。InventoryはVault内に格納されたアーカイブ情報。Retrieve Jobはアーカイブおよびインベントリ取り出し要求ジョブ。

・AWS DirectConnet(DX)
AWS Direct Connect により、客の設備から AWS への専用ネットワーク接続を簡単に確立することができる。
AWSとデータセンター、オフィス、コロケーション環境間にプライベート接続(VPN)を確立するサービス。VPC,VPNと一緒に使う。IPsec VPN。
AWSにより帯域スループット向上する、また、インターネットベースの接続よりも一貫性がある。1Gbps,10Gbpsがある。
es2などに繋ぐpublic IPを使ったBGP接続によるpublicサービス、amazon VPCに繋ぐvpcサービスがある。

☆IPsec(sercurity architecture for internet protocl)は、インターネットで暗号通信を行うための規格。暗号記述を用いてパケット単位でデータの改竄防止や秘匿機能を提供するプロトコル。
☆VGW(Virtual Gateway)


■AWSすとれーじサービス
・S3,Clacier,StorageGateway,EBSなどがある。

■用語
・Multi-AZ:DBの構成。この構成だと、異なるリージョンにDBを配備して冗長構成(自動フェールオーバー)にできる。
・AMI(Amazon Machine Image):ec2でosが入っているディスクイメージ。ec2でインスタンスを起動するとき、既にOSが入っているディスクイメージを選択して起動するという考え方。
・Billing alarms:一定以上の課金が予想されたときにアラートをだし、メール通知する。
・CloundWatch:AWSを監視するシステム。Billogin alarmsはCWの一つ。
・MFA(Multi-factor authonication):多要素認証
・ARN(amason resource name)
・SSO(Single Sign-On):シングルサインオン。一度の認証処理で複数のシステムやコンピュータ上のリソースが利用可能になる認証機構。
・APN(Access point name):携帯ネットワークのでーた通信で必要になる接続先をして指定する文字列の事。
・VLAN(Virtual local area network):スイッチなどのネットワーク機器により、物理的に接続形態とは別の仮想的なネットワークを構成する事。スイッチの接続ポートやmacアドレスmプロトコルなどに応じて端末のグループ化を実現する。
・BGP(Border Gatewary Protocol):インターネットのようにTCP.IPを用いて複数のネットワークを接続した環境において、各ネットワーク間で接続機器が経路情報をやりとりするためのプロトコルの一つ。
・IOPS(Input/Output per second):ハードディスクの記憶装置の一つで、ある条件のもとで1秒間に読込、書き込みができる回数。
1回の読み書きにかかる時間の逆数で、ハードディスクの場合はシークタイムと回転待ち時間、データ転送時間の和の逆数となる。実際には、読み込み(リード)か書き込み(ライト)か、シーケンシャルアクセスかランダムアクセスか、転送するデータの量がどれくらいかによって1回の動作に要する時間が異なるため、「4KBランダムライトIOPS」(4KBのデータをランダムに書き込んだ時のIOPS)のように計測条件を明示することが多い。
refs:IOPS(IT用語辞典)
・HPC(High perfomance computing):いわゆるスパコン。AWSから新しい世代のHPC向けのAmazon EC2インスタンスが発表されました。"c3.*"からはじまるやつ


■ssh
macでec2にssh接続について。awsで作った鍵をダウンロード。鍵の権限を644から400に変更。あとは下を実行。

~ $ ssh -i ~/.ssh/HogeAWSKey.pem ec2-user@[Public IP]

HogeAWSKey.pemは鍵ファイル。Public IPはec2のPublic IP or Elastic IP or Public DNS。ユーザ名(ec2-user@)を指定しないとpermission denyで接続できない。
windowsの場合、teratermとかを使う

■sftp,scp
windowsでwinscpを使ってsshを使ってファイル転送(sftp,scp)する場合について。とりあえずwinscpをDL&インストール。ただ、winscpからawsからダウンロードした秘密鍵(.pem)は使えない。puttygenを使って、秘密鍵を変換する必要がある。puttyge.exeファイルをputty download pageからダウンロードし実行する。Load an existing private key fileで、.pemファイルを指定し、Type of key to generateは、SSH-2 RSAを指定し、Save Private keyボタンを押す(作るのは秘密鍵だけでおけ)。拡張子が.ppkのファイルが作成される。このファイルをwinscpのログイン設定画面の秘密鍵で指定しログインする。この時接続プロトコルはsftpでもscpでもどちらでもおけ。

apacheをたてて、scp,sftpでファイルをアップロードするときは、/var/www/htmlディレクトリの所有者をrootからec2-userに変更する
# sudo chown ec2-user -R /var/www/html/

*rootでファイルをアップする方法もある。運用ルールはそれぞれ。

■RDS
rdsのsecurity group(ファイアウォール)について。ec2-dbsという構成の場合、ec2-dbs間の接続を無制限に許可する方法と、dbsの3306ポート(mysql)のみ許可する場合がある。前者の場合、外部からrdsのエンドポイントに接続できなくなって不便かも。この接続ができるかどうか試してないから知らんけど。

rdsに停止状態はない。料金が気になるなら、RDSのsnapshotを取得しRDSをdeleteする。使用するときだけ、snapshotからRDSをリストアすればいい。ただ、rdsのdeleteとsnapshotからのリストアは時間がかかる。両方とも5分以上(mysqlの場合)
snapshot からリストアするときは、db instance identifierを入力し、availability zoneをec2と同じ場所を選択する。もちろん、他のスペックを変更してもいい。出来上がったdb instanceを見ると、security groupがdefaultになっているからmodifyで変更必要がある。この際、一番下のapply immediatelyにチェックを入れる。

○rdsにコマンド接続したいとき
rdsのsecurity groupでportを明ける必要がある。例えばec2にwebserverをたてて、そこからrdsとの接続ができるようにしている場合、rdsのsecurity groupはそのec2との通信だけは全て許可している設定にしているかもしれない。その設定の場合、ec2からは接続できる。
そのec2にmysqlのclient toolをインストールする。mysql-server,mysql-develをインストール必要はない。
$sudo yum install mysql
これで接続できる。hgehogehogw..ap-northeast-1.rds.amazonaws.comはRDSのエンドポイント
$ mysql -uユーザ名 -p -h hgehogehogw..ap-northeast-1.rds.amazonaws.com -P 3306
ローカル環境から接続したいなら、security groupに3306を追加する必要がある。ただ、これは危ないからやめた方がいい。

refs:
rdsの起動から停止、そして復元まで
rdsの自動起動、自動停止スクリプトをつくってみた

■AWS API,SDK
AWSはマネジメントコンソール以外にも各種ツールを使って操作できる。これはAWSが各種APIを公開しているから。CloudBerry ExplorerはS3のAPIを使ったツール。これらのAPIは、AWS SDKとして公開されている。SDKには、java,php,ruby,.NET,javascript,node.jsなどがある。javascriptからS3のAPIを呼び出せば、ブラウザ上からamaozn s3の操作ができるようになる。

AWS SDK for Java
AWS SDK for Ruby
AWS SDK for javascript
ruby 開発者センター

■ ruby SDK
rubyのaws-sdkをインストールした時のメモ。環境はOSがwindows7。
>ruby -v
ruby 2.0.0p195 (2013-05-14) [i386-mswin32_100]
>gem -v
2.0.2

>gem install aws-sdk
ERROR:  Could not find a valid gem 'aws-sdk' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - bad response Service Unavailable 503 (https://s3.amazonaws.com/production.s3.rubygems.org/latest_specs.4.8.gz)
ERROR:  Possible alternatives: aws_sdk

エラーが出た。時間を置いて再度実行したら今度はできた。503だからamazonの問題かな。

>gem install aws-sdk
Fetching: uuidtools-2.1.4.gem (100%)
Successfully installed uuidtools-2.1.4
Fetching: mini_portile-0.5.2.gem (100%)
Successfully installed mini_portile-0.5.2
Fetching: nokogiri-1.6.1-x86-mswin32-60.gem (100%)
Successfully installed nokogiri-1.6.1-x86-mswin32-60
Fetching: aws-sdk-1.32.0.gem (100%)
Successfully installed aws-sdk-1.32.0
Parsing documentation for uuidtools-2.1.4
Installing ri documentation for uuidtools-2.1.4
Parsing documentation for mini_portile-0.5.2
Installing ri documentation for mini_portile-0.5.2
Parsing documentation for nokogiri-1.6.1-x86-mswin32-60
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/nokogiri/1.9/nokogiri.so, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/nokogiri/2.0/nokogiri.so, skipping
Installing ri documentation for nokogiri-1.6.1-x86-mswin32-60
Parsing documentation for aws-sdk-1.32.0
Installing ri documentation for aws-sdk-1.32.0
4 gems installed

>gem list

*** LOCAL GEMS ***

aws-sdk (1.32.0)
bigdecimal (1.2.0)
i18n (0.6.9)
io-console (0.4.2)
json (1.7.7)
mini_portile (0.5.2)
minitest (4.3.2)
multi_json (1.8.4)
nokogiri (1.6.1 x86-mswin32-60)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
test-unit (2.0.0.0)
tzinfo (0.3.38)
uuidtools (2.1.4)


■ツール
awsのツール

■クラウドデザインパターン、アーキテクチャセンター
awsでは、さまざまなサービスを組み会わせて複雑な構成なサービスが実現できる。これらはクラウドデザインパターンでまとめられている
refs
Clound Design Pattern
AWSアーキテクチャセンター


■awsクラウドサービス活用資料集
refs:awsクラウドサービス活用資料集

■料金、課金
refs
amazon ec2料金

■ec2にping
ec2にpingを送れるようにするには、ec2が利用しているsecurity groupのinboundでicmpを追加する必要がある。custom icmp ruleとall ICMPがあるが、細かく制御する必要がないなら、All ICMPでおっけ。ちなみにpingが使用しているICMPはポート番号を使わないプロトコル

refs:aws ec2でping応答が得られるようにする設定

■s3fs
ec2からs3のバケットがみれるようにするにはs3fsを使って、ec2からマウントする。
まずec2上で下をインストール
sudo yum install gcc libstdc++-devel gcc-c++ fuse fuse-devel curl-devel libxml2-devel openssl-devel mailcap make

そして、s3fsをダウンロード&ビルドインストール
wget http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz
1.74はこのときの最新版

tar xzvf s3fs-1.74.tar.gz
cd s3fs-1.74
./configure
make
sudo make install

/etc/fuse.confの下の一行のコメントアウトを解除
# user_allow_other

/etc/passwd-s3fsファイルを新規作成し、アクセスきー:シークレットアクセスキーの一行を追加する。そしてパーミッションを640に変更

マウントする。/mnt/s3fs_dirディレクトリにs3bucketnameというバケットをマウントしている
sudo /usr/local/bin/s3fs s3bucketname /mnt/s3fs_dir/ -o allow_other

これでマウントできたんだけど、s3bucketnameの下にあるディレクトリにcdで移動しようとしたら、cdできなかった。ディレクトリのパーミッションが400になっていてこれを変更したらできるようになった・・・

アンマウントするときは umount s3fs

refs
aws s3fsをつかって・・・
s3ってなんじゃ?

■デザイン
aws用の作図用に、PowerPoint形式、svg形式、eps形式、cacoo,creately,lucidchardなどがある
refs:アーキテクチャダイアグラムのAWSシンプルアイコン

■s3cmd
s3とのデータ通信をcuiで実現可能なコマンドツール。mac.linuxなどでも使える。
macの場合、portを使ってダウンロード&インストールできる。linuxならyumでインストール

$ sudo port install s3cmdv

$ s3cmd --configure

ここで登録したアクセスキー、シークレットアクセスキーは、

refs:MacPortsでs3cmdをインストール

これで使えるようになるはず

バケット一覧を表示
$ s3cmd ls
バケットの使用量を確認
$ s3cmd du s3://hogebacketname
ec2やローカルPCからs3にアップロードするには?
s3cmd put -r benchmark/ s3://hogebacketbys3cmd/hogedir/
上はローカルPCのbucnchmarkをs3のhogebacketbys3cmdバケットのhogedirディレクトリにアップしています。
s3からec2にダウンロードs3://hogebacketbys3cmd/hogedir/する場合、
s3cmd get -r s3://hogebacketbys3cmd/hogedir /

refs : awsでAmazon Linuxにs3cmdをインストールしてコマンドラインでs3を操作する

■ec2とsftp
ec2とデータ転送するときのプロトコルに特に制限はない。tcpだけじゃなくてudpでもおけ。普通はsftp,scp,ftpsあたりか。
例としてfilezillaでsftp
ホストURL(orどめいん)、プロトコルはsftp、ログオンの種類は通常、ユーザはec2-userとかでおけ。あと、設定画面のsftpで鍵を追加しておく。awsが発行するkey pairだと形式が違うので変換が求められる。

■IAMでMFA
refs
Amazon IAM編 ~MFA~
AWS アカウント向け仮想 MFA デバイスの設定と有効化

セキュリティ対策として多要素認証の設定をする。個人で使っているアカウントなので、root-accountのMFAの設定。スマホを使う。androidアプリのgoogle認証システムをDL&インストール。IAMのdashboardでRoot Account MFAのManage MFA Deviceボタンを押して、continue,continue。QRコードが出るのでスキャン。認証アプリが起動し、確認コードが表示されるので、それを2つ入力。これでおけ。Root Account MFAがDisabledがEnabledに変更される。ログインしたときに確認コードの入力も求められるようになる。

■refs
1時間以内でEC2+nginx+バーチャル干すと+独自ドメインの設定までを行うまとめ手順
コマンドラインで作業ユーザの追加やsshポートの変更などが書いてある

AWS簡易見積りツール
・ec2 インスタンスタイプ
AWS公式ドキュメントトップ
AWS入門ときによく使いそうなリンク
AWS日本語フォーラム
AWSクラウドサービス活用資料集(マイスターシリーズ)


参考本
Amazon Web ServicesではじめるWebサーバ (I・O BOOKS)/工学社
¥2,415
Amazon.co.jp

■テンプめも
・scpでlocalとec2のデータ転送。macでscpを使ってみたけど、できなかった。sshではログインできるんだけどね。sshでログインして、/homeのパーミッションを777に変更してみたけど、ダメだった。
aws $ scp hogeeee.txt -i ~/tec/aws/hoge.pem ec2-user@255.3.3.3:/home
Permission denied (publickey).
lost connection
aws $
ec2のファイル転送はwinscp,filezillaでできるからいいんだけど