AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

JAWS-UG CLI専門支部 EC2ハンズオン オンライン参加

前回のSNSハンズオンに続き、参加させていただきました(一つ前に #154R S3 があったのですが、参加できず〜) 。

#155R EC2入門

jawsug-cli.connpass.com


SNSと違い、EC2はCLIでも触ったことあったのですが、あまりの複雑さ?幅広さ?に唖然としたのが、今回の動機。

トークを聴きながら、けっこう頭の整理ができてよかったです。

# 触ったことあったけど、時間内に理解しながらやるには一杯一杯でした!


CLIは、変化に強い方法」

20年以上使えるCLI環境にもとづく、AWS-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
    • EC2 , AutoScaling, ELB
  • API
    • EC2 (EC2, VPC, AMI...)
    • AutoScaling
    • ELBv2 (ALB)

デフォルト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:

  • デフォルトVPCに対してのみ --group-name が使える
    • 例) aws ec2 authorize-security-group-ingress --group-name default
  • 他のVPCの場合は、group-id を事前に取得して使う必要あり。

METADATA TIPS


IMDS (Instance MetaData Service) v2:

  • 以前、EC2で立てられたPROXYで、そのEC2のMETADATAが抜かれた事があり、v2が用意(されたという話だったような)
  • まず、トークンを取得して、ヘッダー形式で変数に格納します。
  • トークン取得時のHTTPメソッドは PUT ! (恐らく PROXY経由でたたきづらいようにだろう)


トークン取得後の動作例:

$ 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 使い方


自分がどこのリージョンにいるかを、欲しくなるケース3つ:

  • CloudWatch Logs と連携するために Agent インストール
    • UserDataでAgentをインストールする場合に、リージョン指定が必要 (デフォルト: バージニア
  • ElasticIP をアタッチする
  • Route53に自分のIPアドレスを取得して登録する

UserData と InstanceMetaData を上手くつかって自動構築。

インスタンス、ログインしたら負けと思って取り組む(いい!


自動化のポイント:

  • 組んだものを、他人に理解してもらいやすいか
  • 転送されるスクリプトが正しいかを、誰が確認・保証できるか

その他のTIPS

自分のIPを調べる(あら、便利):

その他

波田野さん、今回もありがとうございました!!


そういえば、僕が初めて参加したときに置いていかれたポイントが2つあったので、初めての方は、こんなところに気をつけておくといいかも。

compass ページが講座中に更新される

聞くだけじゃない方は、ブラウザで開いておきましょう。

スライドみてるだけだと、置いてかれます(笑

connpassページの後半に、資料が追加されます。

f:id:hidehara:20200528190639p:plain
CLI専門部会の資料

IAM ロール慣れてると余裕ができる

ハンズオンの最初(事前)には、必ず Cloud9 環境のIAMロールに、最低限のポリシー追加を行うので、ついていけるようにしましょう。

IAMコンソールを開いてるだけでもOKです。

今回の手順例。

一度、以前の資料を追っておくといいかもしれませんね。