Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

SSMと起動テンプレートを使って最速でお砂場EC2を用意する

zennに移行しました: https://zenn.dev/cumet04/articles/ssm-ec2-sandbox-template
qiita側の記事を消す予定は特にありませんが、更新することはありません。


「面白そうなプロダクト出てるな。ちょっとEC2用意して遊んでみるか。」

そう思ったとき、何も考えずにEC2にsshするところまで辿り着くための下準備設定を用意してみました。

方針

起動テンプレートを使うことで諸々の設定をすっ飛ばします。
またSessionManagerのsshを使うことでアクセス元IP制限や秘密鍵の手間を減らします。

※インスタントなお砂場想定のため、長期安定性やちゃんとしたセキュリティはあえてそれ相応です。

SessionManager

セッションマネージャを使えば、awscliによるIAM認証でsshすることができます。

インスタンスに対する秘密鍵の管理の必要がなくなり、またセキュリティグループで22ポートを開ける必要がないため自宅のグローバルIPがころころ変わる場合でも使いやすいです。

このセッションマネージャによるsshの導入については詳細はこれらの記事を見るのがオススメです:
SSH不要時代がくるか!?AWS Systems Manager セッションマネージャーがリリースされました! | DevelopersIO
AWS Systems Manager セッションマネージャーでSSH・SCPできるようになりました | DevelopersIO

本記事では詳細な説明は省略しますが、あらかじめ準備しておくことは以下となります。

host i-*
  ProxyCommand aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'

その他サーバ側の設定は起動テンプレート側に記述します。

起動テンプレート

起動テンプレートには自分のお好みの設定+SSMのsshに必要な設定を埋めていきます。
ポイントとなるのは以下です:

  • AMI ID: AmazonLinux2のもの1
  • インスタンスタイプ: お好みで入力しておく
  • キーペア・セキュリティグループ: SSMするので不要
  • セキュリティグループ: SSMするので不要
  • IAMインスタンスプロフィール: 事前に準備したAmazonEC2RoleforSSMのものを指定
  • ユーザデータ: 以下で入力
ユーザーデータ
#!/bin/bash

yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

passwd -d ec2-user

sed -i /etc/ssh/sshd_config -e 's/^#PermitEmptyPasswords.*$/PermitEmptyPasswords yes/g'
sed -i /etc/ssh/sshd_config -e 's/^PasswordAuthentication no$/#PasswordAuthentication no/g'
sed -i /etc/ssh/sshd_config -e 's/^UsePAM yes$/#UsePAM yes/g'
systemctl reload sshd

記事執筆時のAmazonLinux2 AMIではSSMエージェントのアップデートが必要だったためyumコマンドでインストールしています。

ssh設定についてはec2-userを認証なしログインできるようにしています。
22ポートは開けず、認証はawscliで行うことを前提とした方針です。

また起動テンプレートにはお好みでスポットインスタンスのリクエストを入れておくとリーズナブルになります。

実際に動かす

準備ができたのでインスタンスを作成してsshします。
実際に行うことは

  1. 起動テンプレートからインスタンスを起動する画面に遷移
  2. ソーステンプレートのバージョンを選択して起動ボタンを押す
  3. インスタンス一覧の画面に戻り、インスタンスIDをコピーしておく

だけです。設定ダイアログをポチポチ進めたり秘密鍵を探したりセキュリティグループを追加したりする必要はありません。
あとは少し待ってインスタンスが起動したら

ssh ec2-user@i-XXXXXXXX

するだけで見慣れたshell画面が登場します。簡単ですね。

awscliも使う

これだけでも簡単ですが、よりサクッとterminalから作れるようにスニペットを用意しました。2

インスタンス起動&ID表示
aws ec2 run-instances --launch-template '{"LaunchTemplateId":"lt-xxxxxxxxxxxxxxxxx"}' | jq -r '.Instances[].InstanceId'
インスタンスリスト表示
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | [.State.Name, .LaunchTime, .InstanceId] | @csv' | sort | column -t -s","

まとめ

地味に面倒なEC2作成作業ですが、起動テンプレートとSSMを活用して楽にできました。

一度頑張って用意しておくと、以後のサーバ遊びが大変捗ります。


  1. SSMエージェントが入れられればなんでもよいはず 

  2. jqがインストールされてない人はいれましょう 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?