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
11
シェルスクリプトで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
71
Amazon SNS からのメールをFirehoseとLambdaでまとめる / Deal many Amazon SNS mails with Firehose and Lambda
shimo_s3
1
740
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
520
39k
Building Adaptive Systems
keathley
38
2.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
505
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
15
2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Gamification - CAS2011
davidbonilla
80
5k
Designing Experiences People Love
moore
138
23k
Code Review Best Practice
trishagee
64
17k
Six Lessons from altMBA
skipperchong
26
3.5k
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