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
23
シェルスクリプトでAWSをいい感じに使いたい
2022/08/04(木) JAWS-UG朝会 #36 LT
shimo
August 04, 2022
Tweet
Share
More Decks by shimo
See All by shimo
Amazon SNS からのメールをFirehoseとLambdaでまとめる / Deal many Amazon SNS mails with Firehose and Lambda
shimo_s3
1
820
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
It's Worth the Effort
3n
185
28k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Site-Speed That Sticks
csswizardry
10
750
Why Our Code Smells
bkeepers
PRO
337
57k
Automating Front-end Workflow
addyosmani
1370
200k
Agile that works and the tools we love
rasmusluckow
329
21k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Building Adaptive Systems
keathley
43
2.7k
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