AWS備忘録
俺用メモ
業務や勉強で出てきたキーワードやメモを雑にまとめている記事。(随時更新するかも)
VPC
AWS上に好きな構成のネットワークを構築出来る。
使い方
1. VPCのトップへ
2. メニューからVPCを選択する
3. VPCの作成
サブネット
VPCで作成したプライベートなネットワーク空間を、さらにCIDRブロックで分割することが出来る。
10.0.0.6
というCIDRブロックをVPCとして割当たところをさらに /24
の大きさで分割するなど。
10.0.0.0/16(10.0.0.0 ~ 10.0.255.255)
↓ /24 分割
10.0.0.0/24(10.0.0.0 ~ 10.0.0.255)
10.0.1.0/24(10.0.1.0 ~ 10.0.1.255)
色々ある
10.0.254.0/24(10.0.254.0 ~ 10.0.254.255)
10.0.255.0/24(10.0.254.0 ~ 10.0.255.255)
使い方
- メニューからサブネット選択
- サブネット作成
- どこで?とからへん設定する
インターネットゲートウェイ
VPCで作成した領域、サブネットをインターネットに接続する。イメージ的には、自分のネットワークにインターネット回線を引き込む作業。
インターネットゲートウェイを作成して、作成したものにチェックして、VPCにアタッチする。
しかし、このままでは、インターネットに接続が出来ません。具体的にやるべき作業としては、「0.0.0.0/0
の範囲の宛先パケットは、インターネットゲートウェイに転送する」という設定をルートテーブルに設定する。(ルートテーブルについては、別項目で詳しく)ちなみに、0.0.0.0/0
は全てのIPアドレスを指している。つまり、「転送先が何も設定されていないものは、デフォルトの転送先にするという意味になります」これをデフォルトゲートウェイという。
使い方
ルートテーブルにサブネットの追加
- ルートテーブル作成
- 作成したものを選択
- サブネット関連付けを編集
- 割り当てしたいサブネット選択する。
ルートを編集(デフォルトゲートウェイ)
- ルートテーブルを選択
- ルートを編集
- 別のルートを追加
- 0.0.0.0/0とigwから始まるターゲットを設定する
ルートテーブル
TCP/IPのネットワーク機器である「ルータ」が、「宛先IPアドレス」を見て、「もっとも宛先IPあどれすに近い方のネットワーク」へと、パケットを転送して、最終目的地にパケットを到達させてます。この仕組には、ルータが、「どちらのネットワークが、より宛先IPあどれすに近いか」を事前に知っておかないと、うまく機能しません。
実際には、VPCを作った時点で、デフォルトのルートテーブルや、サブネット作成時にデフォルトのルートテーブルが適用されるので、意識しなくてもいい。
確認方法
サブネットから、特定のVPCを選ぶ、ルートテーブルが下に出てきているので、それを押すと、特定のルートテーブル情報が出てくる。下のタブで実際に設定されているルートテーブルが出てくる。
ルートテーブルは以下のような設定を持ちます。
宛先アドレス(ディスティネーション) 流すべきネットワークの入り口となるルーター(ターゲット)
簡単な例
ルータ1が知っているサブネットはCIDR0とCIDR1
ルータ2が知っているサブネットはCIDR2とCIDR3
CIDR0がCIDR3に通信するためには、ルータ1とルータ2を経由する必要がある。
設定する値
ルータ1
ディスティネーション | ターゲット |
---|---|
CIDR0 | local |
CIDR1 | local |
CIDR2 | ルータ2 |
CIDR3 | ルータ2 |
ルータ2
ディスティネーション | ターゲット |
---|---|
CIDR0 | ルータ1 |
CIDR1 | ルータ1 |
CIDR2 | local |
CIDR3 | local |
ドメイン名と名前解決
www.example.co.jp
-> 54.250.90.112
と解決するやつ
使い方
適当な名前を自動でつける場合
独自ドメイン名をつける場合
レジストラと呼ばれるドメイン事業者から、利用したいドメイン名を取得する。AWSのコンソールから取得する他にも、JIRSの指定業者から取得も可能。
DNSサーバーを構築するためにRoute 53というサービスが提供されています。これに取得したドメイン名を設定すると独自ドメイン名を利用出来るようになります。ちなみに、このRoute 53を使ってドメイン名を取得することも可能です。
NATゲートウェイ
内側からインターネットは利用したいけど、外部からの接続を避けたい時は、IPマスカレードの機能を利用することで実現出来る。利用ケースとしては、閉じたサブネットからのライブラリとかのインストールは許可したいよねー。けど、外からのアクセスはいらないよねーみたいな。
- メニューからNATゲートウェイを選択する
- NATゲートウェイの作成
- 対象サブネットと適当なElastic IPを割り当てる
- ルートテーブルに
0.0.0.0/0
natID
を設定。 - 閉じたネットワークにいるインスタンスからcurl投げてみる
EC2
EC2を使うことで、仮想サーバーを作成することが出来る。この仮想サーバーのことは「インスタンス」と呼びます。このインスタンスには、サブネット内で利用可能な「プライベートIPアドレス」を割り当てます。しかし、インターネットからの接続にプライベートIPアドレスは使えません。そこで出てくるのが「パブリックIPアドレス」です。AWSで割り当てられているIPアドレスぶろっくのうちの適当なものが使われます。
使い方
インスタンスの停止と再開について
停止すると課金対象から外れ、コストを下げることが出来る。しかし、インタウンスが使っているストレージのEBSは容量を確保している間は課金対象となります。もし、完全に課金を止めたい場合は削除すれば良いのですが、一度削除したインスタンスは二度と復活しないので気をつけること。
パブリックIPアドレスを固定化する
ElaticIPというのを使えば出来る。
SSHで接続する
今回はパブリックIPアドレスを使ってアクセスする。(Mac環境で)
$HOME/.ssh/config
に以下のノリで設定する
Host ec2 User ec2-user Port 22 Hostname 13.131.219.17 IdentityFile ~/.ssh/my-key.pem
以下のようなエラーが出たら、chmod 400 keyとか
でいける。内容としては他のユーザーでも読めるよねー。うん。みたいなノリ。
$ ssh ec2 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '/Users/jumpei/.ssh/my-key.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/Users/jumpei/.ssh/my-key.pem": bad permissions Permission denied (publickey). $ chmod 400 /Users/jumpei/.ssh/my-key.pem $ ssh ec2 Last login: Sun Jun 10 12:19:54 2018 from 103.2.241.5 __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/ 10 package(s) needed for security, out of 12 available Run "sudo yum update" to apply all updates. [ec2-user@ip-10-0-1-10 ~]$
ファイアウォールで通信を制限する(セキュリティグループ)
パケットフィルタリング
流れるパケットを見て、通過の可否を決める仕組みです。
パケットにはIPアドレスの他、ポート番号やそれに付随するものを見て、通過の可否を決めます。
- インバウンド 外側から内側へ
- アウトバウンド 内側から外側へ
使い方
設定内容確認
- メニューからセキュリティグループ
- 該当のセキュリティグループを選択
- インバウンド選択
- ルールが見れる
Webサーバの例
- インスタンスのIPアドレスを取得(パブリックIPとか)
- 外部からそのIPアドレスでアクセスしてみる(デフォルトだと22番以外許可されていないから)
- インスタンスのセキュリティグループを確認して編集
- 今回だと、インバウンドに0.0.0.0/0 に 80番ポートの許可
- 2でアクセスしたIPへ再度アクセス
SNS(Simple Notification Service )
SNSはpub/sub メッセージング/モバイル通知サービス。
例えば、YARUO
というワードをSNSから送るとこんな感じになる。
これを使って、Lambdaをキックしたり出来る。
{ "Records": [ { "EventSource": "aws:sns", "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws:sns:ap-northeast-1:85166933371:HelloWorld:2d9efed1-e6ee-4778-9045-d0ad7e0e4481", "Sns": { "Type": "Notification", "MessageId": "4094aa4b-81fe-5b4c-bbb2-f9233432590", "TopicArn": "arn:aws:sns:ap-northeast-1:51669633371:HelloWorld", "Subject": "None", "Message": "YARUO", "Timestamp": "2018-06-12T11:37:33.401Z", "SignatureVersion": "1", "Signature": "T...b6EHMpgAP3D3usg+DKshVqwL1t74Q==", "SigningCertUrl": "https://sns.ap-northeast-1.amazonaws.com/SimpleNotificationService-eaea6120e66ea12e88dcd8bcbddca72.pem", "UnsubscribeUrl": "https://sns.ap-northeast-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:ap-northeast-1:85169633371:HelloWorld:2defed1-e6ee-4778-9045-d0ad7e0e4481", "MessageAttributes": {} } } ] }
SMS メッセージには、最大で 160 個の ASCII (または 70 個の Unicode) 文字を含めることができます。 メッセージがこの長さを超える場合、Amazon SNS はそれを複数のメッセージとして送信し、それぞれが文字数の制限以内に収められます。 メッセージは単語の途中ではなく、全単語の境界で切り離されます。
使い方
CloudWatch
lambdaなどの標準出力をログ取ってくれたり、色々ログ取ってくれるやつ。
アラーム設定で、AutoScallingやSNS通知の発行などが出来る。
AlermのSNSの例
ただ、なんのエラーが起きたかは分からないので、巻き取る方法を作る必要がある。
{ "Records": [ { "EventSource": "aws:sns", "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws:sns:ap-northeast-1:851669633371:HelloWorld:2d9efed1-e6ee-9045-d0ad7e0e4481", "Sns": { "Type": "Notification", "MessageId": "ba186730-a68f-534b-ada6-34a9609753de", "TopicArn": "arn:aws:sns:ap-northeast-1:851669633371:HelloWorld", "Subject": "ALARM: \"lambda-error\" in Asia Pacific (Tokyo)", "Message": "{\"AlarmName\":\"lambda-error\",\"AlarmDescription\":\"lambda-error-desc\",\"AWSAccountId\":\"851669633371\",\"NewStateValue\":\"ALARM\",\"NewStateReason\":\"Threshold Crossed: 1 out of the last 1 datapoints [1.0 (12/06/18 12:58:00)] was greater than or equal to the threshold (1.0) (minimum 1 datapoint for OK -> ALARM transition).\",\"StateChangeTime\":\"2018-06-12T13:00:07.954\"}", "Timestamp": "2018-06-12T13:00:08.005Z", "SignatureVersion": "1", "Signature": "LB8YEGkR8QazvxNPBxiwzXF4OUtjJIIiJKiDx5c6PGrvRO1/cHMdSncdEcxy0w==", "SigningCertUrl": "https://sns.ap-northeast-1.amazonaws.com/SimpleNotificationService-e.pem", "UnsubscribeUrl": "https://sns.ap-northeast-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:ap-northeast-1:851669633371:HelloWorld:2d9efed1-4778-9045-d0ad7e0e4481", "MessageAttributes": {} } } ] }
firehoseと組み合わせると便利っぽい。
サブスクリプションを使用したログデータのリアルタイム処理 - Amazon CloudWatch ログ
SQS(Simple Queue Service)
シンプルなキューサービス。出来るのは、データ投入・取り出し・削除のみ。 命令を作る側と、命令を受け取る側でいい感じに分けれる。
よく使うコマンド
プロセス確認
ps -ax
ポートの状況見る
sudo lsof -i -n -P
名前解決確認
nslookup hoge.com