2:00am, Writing code

Roughly coding. Posted from Berlin.

アプリエンジニアのためのAWS入門 EC2編

前回までのあらすじ

今回の教材はこちら

EC2インスタンスを作成する

いよいよサーバ本体であるEC2インスタンスを作成していく。ウィザードに沿って前回作成したVPCと紐付けていくだけなので特に難しいところはなかったが、セキュリティーグループの概念の理解が不十分だとインスタンスにアクセスする時に若干混乱するかもしれない(した)。

OSを選択

前回同様、AWSコンソール上部のServicesタブからEC2を選択しEC2ダッシュボードを開く。画面中央のLaunch InstanceボタンをクリックしてEC2インスタンスの起動ウィザードを開始すると以下の画面になるので、使用したいOSを選択する。ここでは標準のAmazon Linuxを選択した。 f:id:snishimura0926:20170828092421p:plain

インスタンスタイプを選択

次にインスタンスタイプを選択する。インスタンスタイプとはサーバスペックのことで、リストの下にあるものほど高スペックとなり料金も高くなる。今回は無料枠で利用できるtc2.microを選択する。 f:id:snishimura0926:20170828092451p:plain

インスタンスの設定

作成するインスタンスのネットワーク設定などを行う。設定項目は以下の通り。

  • Number of Instance : 起動するインスタンス数。今回は1
  • Purchasing option : オークション形式の料金体系にするか。オフにしておく
  • Network : どのVPCを使うか。前回作成したものを指定する
  • Subnet : どのサブネットに配置するか。前回作成したものを指定する
  • Auto-assign Public IP : グローバルIPを使うか。Enableにする
  • IAM role : AWSのIAMサービスを利用するか。今はNoneにしておく
  • Shutdown behavior : EC2インスタンスの停止時の挙動を設定する。stopだと停止、terminateだと削除(復旧不能)になる。ここではstopにしておく
  • Enable termination protection : 予期せぬ停止を抑制するか。オンにすると停止させる際にこの設定をいじる必要がある。今回はオフにしておく
  • Monitoring : AWSの監視サービス(Cloud Watch)を使うか。オフにしておく

f:id:snishimura0926:20170828092525p:plain

ストレージ設定

インスタンスのストレージを設定する。今回はとりあえずデフォルトのままにしておくが、EC2インスタンスのデータはインスタンスを停止させると吹っ飛んでしまうので、常時起動ではない運用をする場合1データ保存用のストレージが必要になるらしい。そのための外部ストレージサービスがEBS(Elastic Block Store)である。 今回は勉強のため使用しないが、実運用では事実上必須っぽい。 f:id:snishimura0926:20170828092611p:plain

タグ設定

インスタンスに名前を付けられる。作成するEC2インスタンスがどのネットワークに所属するのか一目でわかるようにするのがよいということなので、元記事に則りtest-web-AZ-aとした(testVPC/public/AZ-a)。 f:id:snishimura0926:20170828092744p:plain

セキュリティーグループ設定

セキュリティーグループとはインスタンスへのトラフィックを制御するための設定である。ここではインバウンド(外部→EC2インスタンス)/アウトバウンド(EC2インスタンス→外部)それぞれのトラフィックに対して、詳細なコントロールが設定できる。

デフォルトのセキュリティーグループが存在するが、ここでは新規作成するためCreate a new security groupを選択する。Add RuleからSSH、HTTP、HTTPSを追加しSourceで許可するIPアドレスを指定する。My IPを選択すると現在の自分のIPアドレスが入力され、そのIP以外からは接続できなくなる。

以下はHTTPとHTTPSに前回作成したVPCIPアドレスを指定することでVPCを経由しないアクセスを禁止する設定となる。ここをMy IPもしくはAnywareに変更すると、後でnginxを起動した際に直接IPアドレスを指定することでサーバが起動していることが確認できる。Security group nameはtest-webとした。同じサブネットにEC2インスタンスを追加する場合、このtest-webを設定してやることで同じ設定を適用できる。 f:id:snishimura0926:20170828224824p:plain

秘密鍵・公開鍵を追加

上記設定完了後、設定確認画面でLaunchをクリックするとEC2インスタンスが起動されるが、その際、秘密鍵と公開鍵の設定を行うダイアログが表示される。今回は初回作成のためCreate a new key pairを選択しキーペアを作成する。キー名はaws-testとした。

Download key pairボタンをクリックすると.pem形式の秘密鍵がダウンロードされるので、次項のSSH接続の際に使用する。なおこの秘密鍵はこのタイミングでしかダウンロードできないとのことなので、絶対になくさないように注意する。 f:id:snishimura0926:20170828092826p:plain

キーペアの設定を行いLaunch InstancesボタンをクリックするとEC2インスタンスが起動される。EC2のダッシュボードに戻りメニューからInstancesを選択し、以下のようになっていれば無事にEC2インスタンスが起動できている。 f:id:snishimura0926:20170828232856p:plain

SSH接続

EC2インスタンスが起動できたので早速SSHで接続してみる。SSHクライアントは各自の環境に合わせて適宜読み替えてほしい。ここではMacのターミナルを使用している。

まずはInstancesから先程起動したEC2インスタンスのパブリックIPアドレスを確認する。前項の最後の画像でIPv4 Public IPというところに表示されているものである。このIPアドレスに対して以下のようにSSHコマンドを実行する。

ssh ec2-user@{確認したPublic IP} -i {秘密鍵保存ディレクトリ}/aws-test.pem

コマンドを実行すると接続確認されるのでyesと入力する。筆者の場合、ここで以下の画像のようにWarningが出て接続に失敗した。秘密鍵パーミッションをオーナーのみ許可に変更する必要があるとのことなので、以下のように変更する。

chmod 600 aws-test.pem

パーミッション変更後、再度SSHを実行すると無事に接続できた。sudo yum updateしろと言われたので実行すると、運用準備は完了である。 f:id:snishimura0926:20170828215933p:plain

上記の手順で接続できない場合はインスタンスへの接続に関するトラブルシューティング - Amazon Elastic Compute Cloudを参照されたし。

nginxを起動

次回以降にウェブサーバとして使うためとりあえずnginxをインストールする。chkconfig nginx on自動起動設定で次回のサーバ起動時にnginxも起動されるようになる。

sudo yum install -y nginx
sudo /etc/init.d/nginx start
sudo chkconfig nginx on

これでnginxのインストールと起動まで完了したので実際に確認してみる。SSH接続に使ったIPアドレスをブラウザに直接入力するとEC2インスタンスにHTTPアクセスすることができるので、正常にアクセスできればnginxのデフォルトページが表示されるはずである。が、ここまでの手順をやってきた人は多分何も表示されないかと思う。

これはセキュリティーグループの設定によるもので、セキュリティーグループの設定の項で触れたとおり、現時点ではEC2インスタンスへの接続はSSH経由かVPC経由でしか許可していない。ここでセキュリティーグループのHTTPのSourceをMy IPに変更してサイドアクセスすると、無事にアクセスできるようになるはずである。設定を変更してアクセスし以下のように表示されれば動作確認完了である。 f:id:snishimura0926:20170828093030p:plain

そしてALBへ

以上でウェブサーバ用のEC2インスタンスの作成が完了した。次回はALBを追加して各サブネットへトラフィックを分散できるように設定する。なおEC2インスタンス起動中は料金が加算されるのでInstancesからインスタンスを選択し、右クリック→Instance State→Stopで停止させておくとよい。 f:id:snishimura0926:20170828093059p:plain

参考

Amazon EC2 とは - Amazon Elastic Compute Cloud


  1. もちろんバックアップ用途としても必要