Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
シェルスクリプトでAWSをいい感じに使いたい
Search
shimo
August 04, 2022
0
15
シェルスクリプトでAWSをいい感じに使いたい
2022/08/04(木) JAWS-UG朝会 #36 LT
shimo
August 04, 2022
Tweet
Share
More Decks by shimo
See All by shimo
test-auto-upload
shimo_s3
0
72
Amazon SNS からのメールをFirehoseとLambdaでまとめる / Deal many Amazon SNS mails with Firehose and Lambda
shimo_s3
1
770
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Side Projects
sachag
452
42k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
A Philosophy of Restraint
colly
203
16k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Navigating Team Friction
lara
183
15k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Scaling GitHub
holman
459
140k
Embracing the Ebb and Flow
colly
84
4.6k
The Language of Interfaces
destraynor
156
24k
Transcript
シェルスクリプトで AWSをいい感じに使いたい 2022/8/4 JAWS-UG朝会 #36 LT @shimo_s3 1
もくじ 自己紹介 個人的な好み これまで作ったもの EC2インスタンスにSSHする、をシェルスクリプト化する - 条件 - CLIでの手順 -
スクリプト化 まとめ 2
自己紹介 名前 : shimo : @shimo_s3 職業 : フリーランスのITエンジニア AWS:
認定12冠、Community Builder 好き : 自動化、データ分析、サーバレス 3
個人的な好み シェルスクリプトを使って、AWS操作を自動化するのが好き 4 いいところ • 自動化は嬉しい ◦ 覚えることが減る ◦ 時短できる
◦ 気分がよくなる(?) 課題 • そもそも、Step by Stepでもできる • オレオレ魔改造になりがち • 作成でハマって時間かかる • 環境依存がある ※ここでのシェルスクリプトは、AWS CLIやLinux/Unixコマンドをまとめているもの、という緩い意味で使っています
これまで作ったもの (英語Mediumで投稿済) • EC2にSSHする • AWS VPN client が起動しているか確認する •
EC2のパラメータをポップアップで受け取る • コマンド前後でコメントアウトをトグる • Pre-commitでオレオレルールを確認をする • CDK synthの出力を短くする • Terraformのstate showをGUI的にする • Serverless Frameworkでcdk synth的なことをする • どこにあるファイルでもGithubでバックアップする 5 このあと説明
EC2インスタンスにSSH接続する 条件 と Step by Stepでの手順 • VPN接続を確認すること 目で確認する👀 • 複数EC2から選択できること
instance-id(i-xxxx)をメモっておく • 停止状態からスタート(IPが変わる) 起動 & IP確認 & SSH 6 aws ec2 start-instances --instance-ids i-xxxx aws ec2 describe-instances --instance-ids i-xxxx ssh -i ssh_key ec2-user@ip_address 次ページからは、これらの手順をシェルスクリプトでまとめていきます
1. VPN接続しているか確認する 7 • (Macで)AWS-VPN Client が起動し ていると ps ax
で AWS, isAliveが見 つかる • なければ起動画面を開いてexit check_vpn_is_alive(){ echo -n "Check vpn ... " vpn_alive=$(ps ax | grep AWS | grep isAlive) if [ -z "$vpn_alive" ]; then echo "Please start VPN!" open -a "AWS VPN Client" exit else echo "OK" fi }
2. EC2は複数から選択 8 • 引数argを受け取って選択する • 環境変数を作っておく EC2_ID_1=i=xxxxx, EC2_ARG_1=arg1, MY_PEM_1=path/mypem.pem
• $ bash file.sh の引数arg(関数内$1) がなければエラーにする set_args(){ arg1=$EC2_ARG_1 arg2=$EC2_ARG_2 if [[ $1 == "$arg1" ]]; then echo "Mode: "$1 INSTANCE_ID=$EC2_ID_1 MY_PEM=$MY_PEM_1 elif [[ $1 == "$arg2" ]]; then echo "Mode: "$2 INSTANCE_ID=$EC2_ID_2 MY_PEM=$MY_PEM_2 else echo "arg is required:""[$arg1, $arg2]" exit fi }
3. EC2を起動してIP(dns_name)を受け取る 9 • start-instancesで起動。出力は 2>$1 > /dev/null で捨てる get_ec2_public_dns_name(){
INSTANCE_ID=$1 public_dns_name=$( aws ec2 describe-instances --instance-ids $INSTANCE_ID | \ jq '.Reservations[0].Instances[].PublicDnsName' | \ tr -d '"' ) echo $public_dns_name } aws ec2 start-instances --instance-ids $INSTANCE_ID 2>&1 > /dev/null • describe-inscetancesの結果をjqでdns_nameだけ受け取る
4. SSHログインする 10 while : do public_dns_name=$(get_ec2_public_dns_name $INSTANCE_ID) if [[
"$public_dns_name" != '' ]]; then echo "public_dns_name: "$public_dns_name echo "Connecting..." ssh -oStrictHostKeyChecking=no -i $MY_PEM ec2-user@$public_dns_name if [[ "$?" == "0" ]]; then break fi fi echo "Wait..." sleep 5 done • dns受け取り • 失敗したら5秒 待ってリトライ (よくやる方法)
1〜4を.shファイルにまとめれば、できあがり • 順番に.shに書いていくだけ ◦ 関数化する(好み) • 実行 ◦ bash path/to/hoge.sh
arg • エイリアス登録すると、より楽に ◦ alias myssh=`bash path/to/hoge.sh` ◦ 引数を受けるときのエイリアス登録は注意 (省略) 11
まとめ シェルスクリプトでのAWS自動化に関して、作成手順を交えて紹介しました ぜひ、作ってみましょう! - 普段のCLIをまとめていく - 自分が使いたいものを作る 12