#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年後の月末まで有効。

|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 コマンドラインインターフェイス [#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公式を参照せよ。

基本的には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経由で外に出る。詳細は以下のページを参考にせよ。

http://qiita.com/ausuited/items/09b626fa5264f0c650fd

**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。インスタンスを複数ぶら下げて振り分ける。再起動ぐらいなら大丈夫だが、EC2停止時にはインスタンスを削除して登録しなおす必要がある。これが意外とめんどくさい。

**オートスケール [#j212581c]

負荷状況に合わせて増やしたり、一定数以上の稼働を保証させることができる仕組み

**インスタンスストレージ [#aedc07c8]

物理ディスク。再起動では大丈夫だが、停止で失われる。利用シーンがあまり思いつかないが、スワップならOKかと。t1.micro/m3では利用不可能。

**S3 [#z7ee9cfc]

OSから直接マウントするのがEBSに対し、S3はウェブから見ることができるなど共有用途向け。各種言語に対応したライブラリがあるので、プログラムから使うのもそれほど難しくはない。信頼性も高いし、ミラーリングもできるのでバックアップストレージとして使うのが良かろう。バケットという単位で管理するが、ドメインが割り当てられるので規則もドメインルールにのっとる必要がある。

***S3の種類 [#bb9170eb]

|項目|備考|
|標準|デフォルトで高頻度アクセス向け|
|低頻度アクセス|ログなど低頻度アクセス用で、コンソールからの利用はできる|
|Glaicier|完全貯蔵用で、取り出しには手続き必要|

**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]
**CloudFront [#qcbb08a9]

Elastic Block Storeの略。スナップショット機能など多彩な機能がある。
CNDキャッシュサーバー。立ち上がりに時間がかかる!

***AMI [#e386e448]

マシンのOSイメージのこと。マイクロインスタンスであれば、RHELもWindowsも無料の枠内に収まるとのこと。「free tier eligible」とあればマイクロインスタンスとの組み合わせで無料。自分でAMIを作ることが可能で、実用上はベースのAMIをカスタマイズしてベースを作る。仮想マシンの方式がhvmとparavirtualがあるが、今後の主流はhvmであるのでhvmベースで作成すべし!

**S3 [#w086b145]

ストレージ。自由に増やせるしバージョン管理でもできるし。古くなったらGlaceirという保存領域に移動するルールも設定できる。

***ライフサイクルの設定 [#s85da402]

+ルールが適用されるのは日本時間9時。
+フォルダは/なしでも適用される。
+ワイルドカードはきかなかった(logs/*apache*)


*IAMユーザーの作成 [#u4dc4551]

rootアカウントは何でもできてしまうので、IAMユーザーの作成を推奨。

*自動構築 [#q0d53ca5]

下にいくほど自由度が高い=難易度も高い。chefというインフラ自動化の仕組みをベースにしている。
下にいくほど自由度が高い=難易度も高い。

-Beanstalk
-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で接続できるようになるツール


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS