-AWSを使うに当たって基礎知識まとめ #ls2(AWS) #contents *無料枠について [#k9c60d59] 申し込み月の1年後の月末まで有効 **無料枠終了後も一定量は無料となるサービス [#y679d7a7] -DynamoDB -Lambda -SQS -SNS -CodeCommit *構成要素 [#n0f907a7] 以下を見れば一目瞭然だが、自分で噛み砕いて理解しておくこと http://aws.clouddesignpattern.org/index.php/CDP:%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88#.E4.BB.AE.E6.83.B3.E3.82.B5.E3.83.BC.E3.83.90_-_EC2_.28Amazon_Elastic_Compute_Cloud.29 *Tips [#scd8eeb3] |Terminate Protection|誤って削除されないように有効化をおすすめ| |日本時間に変える|sudo cp /usr/share/zoneinfo/Japan /etc/localtime| |yum updateでも日本時間のままにする|/etc/sysconfig/clockを編集しZONE="Asia/Tokyo"UTC=False| |インスタンスメタデータの取得 instance_id|http://169.254.169.254/latest/meta-data/instance-id| |インスタンスメタデータの取得 ipv4|http://169.254.169.254/latest/meta-data/public-ipv4| |インスタンスメタデータを変数に格納|instanceid=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`| *[[AWS コマンドラインインターフェイス>AWS/cli]] [#o596e2bf] コマンドラインでAWSを操作するためのもの。aws 操作名のような感じで行う。 |aws s3 ls s3://mybucket|s3とローカルフォルダの比較| |aws configure|CLIの設定。ID/KEY/REGION/formatを設定する。設定ファイルが~/.aws/configに作成される| *SWAPの作成 [#qa2c54c3] -swapが有効か否かを確認する swapon -s **ファイルで作成 [#g88b89ae] sudo dd if=/dev/zero of=/swap bs=1M count=512 sudo mkswap /swap sudo chmod 0600 /swap sudo swapon /swap http://qiita.com/na0AaooQ/items/278a11ed905995bd16af -恒久的にswapファイルを設定するには/etc/fstabに追加 sudo echo "/swap swap swap default 0 0" >> /etc/fstab *ボリュームの拡張 [#qdbca2ec] 基本的にはAWS公式を参照せよ。AMIが作成できるのであれば、いったんAMIを作成しておき、起動時に容量を増やしておくのが良い。 +スナップショットの作成(時間かかる。6Gでも10分) +スナップショットからEBSの作成(一瞬) +インスタンス停止→EBSボリュームのデタッチ(2分) +新しく作成したEBSをアタッチ(ルートデバイスの指定は以前と同じにしておく。/dev/sda1なら/dev/sda)。 +起動(エラーが出る場合はルートデバイスの指定が間違っている) +resize2fs実施 resize2fs /dev/xvde1 *インスタンスタイプの変更 [#c41220bc] +停止 +インスタンスタイプの変更 +起動 *後からインスタンスストレージを追加 [#fc64e25a] +curl http://169.254.169.254/latest/meta-data/block-device-mapping/ 現状確認 +AMI作成 +起動時に指定 *VPC [#heeae834] 重要なので項目として独立させた。最低限セキュアにするにはVPCの下にPUBLIC/PRIVATEのサブネットを作成し、NATをPUBLICサブネットに立てて、PRIVATEはそこのNAT経由で外に出るのが基本。ただし外向きの通信が多い場合は直接GW経由で出ていくようにすればそのサブネットはpublicになる(privateかpublicかはルーティングの違い)詳細は以下のページを参考にせよ。 http://qiita.com/ausuited/items/09b626fa5264f0c650fd **VPC Flowlog [#tc7614ca] 2015/06に導入された。VPCの設定から有効にできる。ただし見づらい! CloudWatchFullAccessのAWSアカウントを作成し、以下のように見ることができた。 # vpcflowlog(作成時に指定した任意のグループ名)のログストリーム一覧表示 aws logs describe-log-streams --log-group-name vpcflowlog --profile=logs # vpcflowlogのログストリーム名を指定して表示 aws logs describe-log-streams --log-group-name vpcflowlog --log-stream-name eni-6595c12d-all --limit=1 --profile=logs # 該当インスタンスに対するフローログを10件表示 aws logs get-log-events --log-group-name vpcflowlog --log-stream-name eni-6595c12d-all --limit=10 --profile=logs ***VPC Flow Logの注意点 [#n13b49c5] 受ける側のEC2でポートが開いていないとREJECTにすら出てこない。Webサーバーを立ち上げてないと80番のログは出てこないということ。 **VPCの作成上の注意 [#o0402cf4] PublicとPrivateのサブネットをもつVPCを作成した場合はNATインスタンスを作成しないとPrivateサブネットからインターネット通信ができない。しかしこのNATインスタンスはm1.smallのため、無料枠で利用することができない。しかもparavirtualなのでt2.microに変更することもできない。というわけでhvm対応のNATを作成して、送信元のチェックをはずしてルーティングテーブルを変更すればもとのNATは削除してもよい。 **VPCの概念 [#fdf5666e] 仮想プライベートクラウドの略。サブネットを割り当てて、インターネット領域にするのか、プライベート領域にするのかは自由だ。 [VPC with a Single Public Subnet Only]を選ぶと、シンプルだけど全部外にさらされるぞ。Privateネットワークの場合は外に出るのにNATが必要。 「パブリックサブネットのインスタンスはインターネットから直接インバウンドトラフィックを受信できますが、プライベートサブネットのインスタンスはこれができません。また、パブリックサブネットのインスタンスはアウトバウンドトラフィックを直接インターネットに送信できますが、プライベートサブネットのインスタンスはできません。」 「デフォルトでは、インスタンスはインターネットにアクセスできません。インスタンスはデフォルトでパブリック IP アドレスを受け取りません。VPC は、作成方法によってはインターネットゲートウェイを持つ場合があります。」 ***プライベートサブネットからインターネット通信 [#yf3bcc01] 二つのサブネットを用意。片方がインターネットゲートウェイをもつパブリックネット。そこにNATインスタンスを配置。プライベートのほうにはルーティングテーブルをNATに向けたものを設定し、プライベートゾーンにインスタンスはすれば成功。パブリックネットはPublicIPがないと外部通信できない。 VPC間で通信する場合はVPCピアリングの設定が必要。 ***サブネット [#n9e630a9] VCP(172.31.0.0/16)の内部にサブネットを複数持てる。サブネット間で通信可能。デフォルトでは二つのAZにサブネットが用意されている。 |AZ名|IPレンジ|備考| |ap-northeast-1a|172.31.16.1~172.31.31.254|/20| |ap-northeast-1c|172.31.0.1~172.31.15.254|/20| ネットマスクの計算に便利なサイト https://note.cman.jp/network/subnetmask.cgi **プライベートsubnetからインターネットにアクセスするにはNATが必要。 [#vfbead79] http://dev.classmethod.jp/cloud/amazon-vpc-elb-nat/ パブリックサブネットのルーティングはigwに直接つないでいるのでNATを経由しない。ゆえに外に出たいのならPublicIP/EIPの割り当てが必要。プライベートサブネットのルーティングをNAT(パブリックに配置したもの)経由にした場合のみプライベートサブネットから外に出られる。VPCデフォルトで作成されたNATがインスタンスタイプを変更したら、PublicIPが付与されてなくってはまった。当然NATでも外に出るにはPublicIPが必要。 ** ルートテーブル [#qbd626bf] VPCに対して割り当てるルーティング情報。一つのサブネットにつき1つまで。 **VPCの制約 [#y0c05def] +拡張はできない。 + *AWSコンポーネント [#e1e750eb] **[[AWS CloudWatch>AWS/CloudWatch]] [#w1c6331e] **Amazon ElastiCache [#o5dc3f95] -MemcacheやRedisなどのオンメモリKVSが用意されている。 redis-cliをつかって操作してみる。 **Elastic IP [#j220cd0e] 静的なIPでインスタンスにひもづけることができる。起動していないインスタンスにEIPを確保しておくと課金対象。ここを見るとPrivate IPとの紐づけも見られる。 一応使わないでも再起動しなければ起動時に動的に割り当てられたpublic IPでアクセスできる。PublicIPの自動割り当て機能は起動時のみ利用出来る為、起動後に付与したくなった場合にはEIPを利用する必要がある。 **ELB [#s3dd8aa7] Elastic Load Balancing。インスタンスを複数ぶら下げて振り分ける。異常からの復帰時はデフォルトだと最低300秒かかるので気長にまつか、設定を変更する。それぞれのAZで等しい台数とスペックをぶら下げるのが基本。 ***負荷対策 [#vc930c5a] ELBのスケールアップ・スケールアウトはAWS側で勝手にやってくれる。配下でインスタンスが全滅していると勝手に一個なる。復帰すると2個になる。apache benchをやり続けるとそのIPだけタイムアウトになってしまう!なにか見ているのかも? こちらで監視する項目はCloudWatchから取得できる処理数や処理待ちなどのデータ。 ***スティッキーセッション [#p4395bda] あまり好ましくはないが、スティッキーセッションの設定もできる。ELBの説明欄から維持設定をクリック ***元アクセスのリクエストヘッダ [#e02f337f] -以下のヘッダーについてくるのでアクセスログのフォーマットを変更する。 HTTP_X_FORWARDED_FOR HTTP_X_FORWARDED_PORT HTTP_X_FORWARDED_PROTO ***ELBのサブネット [#g1d8a78c] 所属するサブネットに最低8IPの空きが必要。 **オートスケール [#j212581c] 負荷状況に合わせて増やしたり、一定数以上の稼働を保証させることができる仕組み。もととなるAMIを使って起動するので、そのAMIを作成しておく。起動設定でアプリのデプロイをしてELBに関連づけ(AutoScaleの設定画面から既存ELBを選択)しておくとよい。 **インスタンスストレージ [#aedc07c8] 物理ディスク。再起動では大丈夫だが、停止で失われる。利用シーンがあまり思いつかないが、スワップならOKかと。t1.micro/m3では利用不可能。 **RDS [#ce3fd6e9] リレーショナルDB専用のインスタンス。起動・停止ができないので課金を節約したい場合は不向きだが、ワンクリックでDB構築ができるので便利。 **Route53 [#b38c16b2] AWS提供のDNSサーバー。稼働率100%保障でダウンしたらサービスクレジットがもらえる。ALIASレコードというものが独自仕様で外向けにはCNAMEと同様に映る **SES [#v8e3ee44] メールサーバー。自前で立てるよりも良い。APIを利用して送信 **Security Group [#zf5082c8] 仮想ファイヤーウォール。インスタンスに対して紐づける。デフォルトはノーガードだが、制限する場合は、プライベートだろうと設定しないとだめ。 **EC2 [#qd362611] サーバーインスタンス ***ライフサイクル [#j3d29ec5] 起動、停止、terminateは削除なので間違わないように ***EBS [#ye41fadf] Elastic Block Storeの略。スナップショット機能など多彩な機能がある。EBSは同一AZでのインスタンスにしかアタッチできない。スナップショットから別AZへコピーできる ***EBSの種類 [#q5651211] GP2は容量を増やすとパフォーマンスが伸びる。Provisioned IOPSは自分でパフォーマンスを指定できるが、増やしすぎると値段が上がるので注意。 ***AMI [#e386e448] マシンのOSイメージのこと。マイクロインスタンスであれば、RHELもWindowsも無料の枠内に収まるとのこと。「free tier eligible」とあればマイクロインスタンスとの組み合わせで無料。自分でAMIを作ることが可能で、実用上はベースのAMIをカスタマイズしてベースを作る。仮想マシンの方式がhvmとparavirtualがあるが、今後の主流はhvmであるのでhvmベースで作成すべし! **S3 [#w086b145] ストレージ。自由に増やせるしバージョン管理でもできるし。古くなったらGlaceirという保存領域に移動するルールも設定できる。 ***ライフサイクルの設定 [#s85da402] +ルールが適用されるのは日本時間9時。 +フォルダは/なしでも適用される。 +ワイルドカードはきかなかった(logs/*apache*) **CloudFront [#qcbb08a9] CNDキャッシュサーバー。立ち上がりに時間がかかる! *IAMユーザーの作成 [#u4dc4551] rootアカウントは何でもできてしまうので、IAMユーザーの作成を推奨。 *自動構築 [#q0d53ca5] 下にいくほど自由度が高い=難易度も高い。 -Elastic Beanstalk デプロイとそれにまつわるリソース管理の自動化。開発、本番などの環境に合わせてデプロイ方式の設定ができたり、AutoScaleの設定をしてくれたりする。ELB,EC2,SGの設定などを個別にやるよりは楽なんじゃないだろうか! -OpsWorks Chefを利用した自動構築。 -CloudFormation JSON形式で構築作業を自動化できる。AWS-CLIよりはハードルが低そう。 *インスタンスの作成からログインまで [#c821f1f7] インスタンスはマイクロ、その他はデフォルトで進める。秘密鍵のペアはpemファイルとなるが、puttygenでインポートしてからputty形式のファイルにして、ec2-userでログイン成功 **インスタンスの作成手順詳細 [#nb48d03b] +AMIを選ぶ +6. Configure Security GroupでSGを指定する **インスタンスタイプ [#h1acbc5e] |名称|備考| |t1,t2|CPUがバースト可能。しかし低コストなので常時CPUが必要ならC1,C2を| |c1,c2|CPUに重点を置いたタイプ。| |r3|データベース向け| *インフラ構築方法 [#o0bdc7da] **AWS Elastic Beanstalk [#k81aa7f9] http://www.slideshare.net/shimy_net/aws-elastic-beanstalk-23314834 ** [#xf74ecb1] ** [#wd508472] *構成案 [#x62d12d5] Wordpressを分散するのはwp-contentディレクトリをNFSにするかrsyncしないとダメ。 *クラウドデザインパターン [#u01167dd] http://aws.clouddesignpattern.org/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 *アクセスライブラリ [#ac8f6750] +JCould(AWSに限らず、OpenStackなども) *DNAT [#f088919a] # Generated by iptables-save v1.4.18 on Thu Sep 3 10:21:16 2015 *filter :INPUT ACCEPT [2107:162972] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [1547:336490] COMMIT # Completed on Thu Sep 3 10:21:16 2015 # Generated by iptables-save v1.4.18 on Thu Sep 3 10:21:16 2015 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A PREROUTING -p tcp -m tcp --dport 受け側ポート -j DNAT --to-destination NAT先PrivateIP:NAT先ポート -A POSTROUTING -j MASQUERADE COMMIT # Completed on Thu Sep 3 10:21:16 2015 *メンテナンス記録(とある現場) [#rb0cf561] +3/3 インスタンス障害で再起動 +5/5 再起動(5/16まで猶予あり)