- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2023-04-25T07:16:54+00:00","default:wikiadmin","wikiadmin")
-AWSを使うに当たって基礎知識まとめ
#ls2(AWS)
#contents
*料金概算 [#a4467f54]
**要注意 [#e29596c7]
-転送量がかさむもの
-課金APIが1コールで0.01ドルと詐欺的!
-最低課金単位が時間のもの(Redis,ELB)
**実測値 [#a9bbee78]
|ECS *1 + ALB 2H|0.06ドル|
|ECS *1 + タスク定義書き換えで数タスクを二回ほど|0.01ドルなので安いもんだ|
|AWS to 外部ネットワーク|1G 0.1ドル|
|S3保存料金|1G 0.1ドル|
|S3 5G取り出し|0.1*5 = $0.5|
|Elasticache Redis|2台構成で1時間単位なので最低2時間で0.05ドル|
|サーバー移行往復|0.4$|
|RDS Aurora最小構成|データインポートでIOPS利用の$0.36|
*無料枠について [#k9c60d59]
申し込み月の1年後の月末まで有効
申し込み月の1年後の月末まで有効。
|AWS 2015|zag|使っていないので2017/04に削除だが、翌日新しいアカウントをnifty.ne.jpで作成しようとしたら重複と言われた|
|AWS 2016|gmail|ほぼ日本道路情報のブログだがあまり使ってない。S3移行しだい削除予定|
|AWS 2017|mb.infoweb.ne.jp|2017はこれ!|
|AWS 2018|mb.infoweb.ne.jp|2017はこれ!|
**無料枠経過後の作業 [#g1ce9641]
CloudFrontがCnameが共有しずらいので別のCNAMEを用意してそちらへ移行させる。
S3はbackup/AnsibleのチェックでOK
wikiがうまくいかなかったが、理由は「Forwarded Query String」がなかったため。
**無料枠経過後の従量課金状況 [#kc4328da]
-S3のbackupは週二回に減らした。
-CloudFrontは従来通り
-その他は使わない
上記で$2.5程度、うちCloudFrontが8割でこれを除去すればよいな。
**無料枠終了後も一定量は無料となるサービス [#y679d7a7]
-DynamoDB
-Lambda
-SQS
-SNS
-CodeCommit
**無料枠を辞めた時の概算 [#g0b9df3a]
-CloudFront 5GBで0.7$
-S3で5GBで0.125$
月1$程度なら継続するか(移行するのがめんどい)
*構成要素 [#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 dd if=/dev/zero of=/swap bs=1M count=2048
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]
*ボリュームの拡張(2017/02からオンラインでできるようになった!) [#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の作成上の注意 [#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]
**Kinesis [#a916b18f]
メールサーバー。自前で立てるよりも良い。APIを利用して送信
データストリーミング。現在無料枠はなく、シャードと呼ばれる最小処理単位の稼働時間で課金される。
秒間1M程度捌ける最小構成で月間14ドルほどなので結構かかるな。ElasticSearchServiceに簡単に流し込むことができ同時にS3バックアップも実行できる。
**Security Group [#zf5082c8]
***プロデューサーとコンシューマー [#r8e324db]
仮想ファイヤーウォール。インスタンスに対して紐づける。デフォルトはノーガードだが、制限する場合は、プライベートだろうと設定しないとだめ。
SQSと同じようにデータを投入するプロデューサーとそのデータを処理するコンシューマーの作成が必要。
ElasticSearchServiceだと直接投入できるが、それ以外の場合は厳しいかもしれん
**EC2 [#qd362611]
サーバーインスタンス
**Security Group [#zf5082c8]
***ライフサイクル [#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]
-Destination NATの略。ポートが開けられない場合に80などを利用して、1521,3306,8080などに接続する。HTTPならProxy使えばいいのでDBやSSHなどに利用する。
# 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まで猶予あり)
*beanstalk [#mb9acc46]
Worker
*ツール [#z855307c]
-yoga
EC2にCUIで接続できるようになるツール