JAWS-UG CLI専門支部 EC2ハンズオン オンライン参加
前回のSNSハンズオンに続き、参加させていただきました(一つ前に #154R S3 があったのですが、参加できず〜) 。
#155R EC2入門
SNSと違い、EC2はCLIでも触ったことあったのですが、あまりの複雑さ?幅広さ?に唖然としたのが、今回の動機。
トークを聴きながら、けっこう頭の整理ができてよかったです。
# 触ったことあったけど、時間内に理解しながらやるには一杯一杯でした!
「CLIは、変化に強い方法」
aws に続くサブコマンドまでは v1 でも TAB 補完がきく、それだけでも便利になってくる(環境構築資料を参照)
※TIPS : bashの場合 complete は bash-completionパッケージが導入されてると使えます
長期にわたり知れば知るほど、便利にできる環境って、なかなか無いですよね。
EC2 話
ああ、なるほど!気づかなかった。
- EC2 (Elastic Compute Cloud) = C が 2回でてくるので C2
- S3 (Simple Storage Service) = S が 3回でてくるから
マネコン と API では見せ方が異なるので、API側で把握しよう。
ここ大事かと思いました。CLI の EC2 サブコマンド群が大量にあるのも納得?
デフォルトVPC
デフォルトVPCの位置づけ
- 本番で使うものではなく、Railでいうscaffold(足場)的な位置づけ
- 本番環境なら、消してしまって良いもの
- 与えるパラメータが少なくなったりと特別な対応が各所にある
このポイントは、僕も、そう思ってたので、普段遣いの方の意見が聞けて安心でした。
デフォルトVPCを作るコマンドが用意されてるところもまた、その思想を(僕的には)裏付けしてもらえました。
※消してないリージョンで使うとエラーが発生
関連して、新しいAZが増えたときに、新しいAZにもデフォルトサブネットを作るにはこちら。
- aws ec2 create-default-subnet
あると悩んじゃうと思いますが、VPCよりも上のレイヤーをまず使うのに便利な設定と考えるのがいいですね。
冪等性とコンテキスト
変数にしか情報をもたせないという前提においては、shell は ステートレス。
コンテキストをもたせてしまうと、冪等性を担保しずらくなる。
冪等性がない例:
- ストーリの最初と、途中と、最後。実行するタイミングで、結果が変わる
- 自動構築サーバーなのに、ログインして手作業しちゃった(この手作業分)
コンテキストの理解:
- 組織を小さくして、コンテキストを組織内におさめれば、組織間のやりとりにはコンテキストが不要になる
- 逆に、組織間のやりとりにコンテキストが前提となると、ギクシャクしちゃう(本来やりたいことを伝える・決める以前に、共有しないといけない情報等が増えるから)
- そもそも、コンピュータは、ハイコンテキストを理解しないので、人が意識して、ロウコンテキストにしてあげないと(確かに)
個人的に、今回のトークで一番ヒットでした(笑
Security Group 扱うTIPS
用語おさえ:
- INGRESS ... パケットの入
- ENGRESS ... パケットの出
設計するときのポイント:
- 同じ VPC の中 同士なら、CIDR指定 よりも SecurityGroup指定の通信とするのが、現在の王道だろう
- from と to の記載により、明示的にわかる
- IPが変わったとしても、設定かえなくてもよい (CIDR指定だと、変化に手動で追従しないと)
コマンド実行時のオプション --group-name:
METADATA TIPS
IMDS (Instance MetaData Service) v2:
- 以前、EC2で立てられたPROXYで、そのEC2のMETADATAが抜かれた事があり、v2が用意(されたという話だったような)
- まず、トークンを取得して、ヘッダー形式で変数に格納します。
- トークン取得時のHTTPメソッドは PUT ! (恐らく PROXY経由でたたきづらいようにだろう)
- 例) curl -s -X PUT "http://169.254.169.254/latest/api/token"
トークン取得後の動作例:
$ curl -H "${EC2_METADATA_HEADER}" http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
METADATA 使い方
- custome ami を使ってあげてるインスタンスで、どのAMIであげたかな?を知る
- AMIにもタグがつけれるので、そっちのなにのイメージ化などを記載しておくとよい。
- リージョンは、直接取得する方法がないので、AZの情報から取得する
- curl -s -H "${EC2_METADATA_HEADER}" http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/[a-z]*$//' \
自分がどこのリージョンにいるかを、欲しくなるケース3つ:
- CloudWatch Logs と連携するために Agent インストール
- UserDataでAgentをインストールする場合に、リージョン指定が必要 (デフォルト: バージニア)
- ElasticIP をアタッチする
- インスタンスの起動した後にアタッチしてあげる必要がある
- Route53に自分のIPアドレスを取得して登録する
UserData と InstanceMetaData を上手くつかって自動構築。
インスタンス、ログインしたら負けと思って取り組む(いい!
自動化のポイント:
- 組んだものを、他人に理解してもらいやすいか
- 転送されるスクリプトが正しいかを、誰が確認・保証できるか
その他のTIPS
自分のIPを調べる(あら、便利):
- http://checkip.amazonaws.com/
- shell 変数に設定する場合
- IP_ADDR_LOCAL=$( curl -s http://checkip.amazonaws.com/ ) && echo ${IP_ADDR_LOCAL}
その他
波田野さん、今回もありがとうございました!!
そういえば、僕が初めて参加したときに置いていかれたポイントが2つあったので、初めての方は、こんなところに気をつけておくといいかも。
compass ページが講座中に更新される
聞くだけじゃない方は、ブラウザで開いておきましょう。
スライドみてるだけだと、置いてかれます(笑
connpassページの後半に、資料が追加されます。
IAM ロール慣れてると余裕ができる
ハンズオンの最初(事前)には、必ず Cloud9 環境のIAMロールに、最低限のポリシー追加を行うので、ついていけるようにしましょう。
IAMコンソールを開いてるだけでもOKです。
今回の手順例。
一度、以前の資料を追っておくといいかもしれませんね。