AWSのITコストを削減 Simpline

選ばれ続けること

 

エンジニアブログ

ホーム - エンジニアブログ - 2016年4月

S3で静的ウェブサイトをホスティングしてみる

2016.04.22

batchiです。

S3では静的ウェブサイトをホスティングできます。

それは知っています。よく聞きます。

ソリューションアーキテクトの取得に向けて、
ちまちま勉強をしている時にもよく目にしました。

ただ、「知っている」というのは、

「S3では静的ウェブサイトをホスティングできる。Yes or No?」
の問いに対して、

「yes!」

とこれみよがしに元気よく答えられるというだけで、
それ以上のことはまったくちんぷんかんです。

というわけで、実際に手を動かしてみることにします。

そもそも静的ウェブサイトとは


htmlファイルや画像ファイルなど、
あらかじめ作成されたファイルをサーバにアップロードしておき、
ブラウザからのリクエストに対して
そのままレスポンスとして返すようなサイトのことです。

それに対して動的ウェブサイトとは


リクエストをプログラムが受け取り、
必要な処理を行った後にレスポンスを返すサイトのことです。

WordPressは動的ウェブサイトです。
このブログも動的ウェブサイトなので、
S3でホスティングは出来ません。残念。

とりあえずやってみる


http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/WebsiteHosting.html

ドキュメントを見ればそれはもうバッチリできると思いますが、
折角なので手探りでやってみます。

●バケットの作成


「バケット名はドメイン名と同じにして…」
というどこかで聞いたフレーズが頭をよぎりますが、今回は気にしないことにします。

  • バケット名:test-batchi-hoge

  • リージョン:Tokyo


この時点でエンドポイントが作成されます。
もちろん現時点では見に行ってもエラーが返ってきます。

すぐできるエンドポイント

●ウェブサイトのホスティングを有効にする


バケットのプロパティから「静的ウェブサイトホスティング」を選択し、
ラジオボタンで「ウェブサイトのホスティングを有効にする」を選択します。

以下の項目が出てきます。















インデックスドキュメント ファイル名を指定せずにアクセスした時に表示されるページ。
空欄不可。
エラードキュメント ファイルが存在しないなど、エラーが発生した時に表示されるページ。
空欄可。一応設定してみる。
リダイレクトルールを… リダイレクトしたい時に。
空欄可。今回はスルー。

静的ウェブサイトホスティング2

●バケットポリシーを追加する


バケットを作成したままの状態では、
バケットに対するアクセス権を持つのは当事者(※)のみのため、
下記のポリシーを追加します。

※AWSのroot(契約)アカウントのこと。IAM Userではない。
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadForGetBucketObjects",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::test-batchi-hoge/*"
]
}
]
}

●ファイルをアップロードする


ひとまず先ほどインデックスドキュメントとして指定した、
usagi.htmlというファイルを作成して、
バケット直下にアップロードします。
今さらですが、一般的にはindex.htmlという名称で作成するそうです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>うさぎ</title>
<meta name="viewport" content="initial-scale=1">
<body>
usagi.htmlの中身です。
</body></html>

先ほどのエンドポイントにアクセスすれば、
見事ページが表示されます。

↓何の前触れもなく消すかもしれませんが、よろしければどうぞ。
test-batchi-hoge.s3-website-ap-northeast-1.amazonaws.com

●エラードキュメントのファイルをアップロードする


ここまででほぼ目的は達したようなものですが、
一応設定したのでエラードキュメントnezumi.htmlも用意しておきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ねずみ</title>
<meta name="viewport" content="initial-scale=1">
<body>
nezumi.htmlの中身です。<br>
エラーが出た時にはもれなくこの画面を表示します。
</body></html>

存在しないページなどを開こうとすると、このhtmlファイルが表示されます。

↓何の前触れもなく消すかもしれませんが、よろしければどうぞ。
test-batchi-hoge.s3-website-ap-northeast-1.amazonaws.com/azarashi


●画像もアップロードしてみる


バケット直下にフォルダを作成し、
その中に画像をアップロードしてみました。

URLは"<エンドポイント>/<フォルダ名>/<ファイル名>"となります。
オブジェクトのプロパティから確認できます。

画像のアップロード

↓何の前触れもなく(以下略)
https://s3-ap-northeast-1.amazonaws.com/test-batchi-hoge/koara/sugoi-kawaii-usagi.jpg
(出典:www.flickr.com)

次回は独自ドメインを使用してのホスティングにチャレンジ


静的ウェブサイトのホスティング自体は、
やってみたら意外と簡単にできたので、
次は今回見ないふりをしていた部分を洗ってみたいと思います。
(次回更新未定)

ひとまずこちらからは以上です。

443ポートでしか外に出れないけどリモートデスクトップ接続したい

2016.04.08

batchiです。

アウトバウンドのポートが制限されていて、
80や443でしか外に出れない。

とはいえ、Windows環境にRDP接続したい。
どうするか。

そうですね。
ポートフォワードですね。

登場人物


クライアント


PC(Windows7)。
Teratermが入っている。

WindowsServer


2012R2。
クライアントからここへ接続したい。
ログインに必要なユーザー名とパスワードは知っている。

Linuxサーバ


Amazon Linux。
うまい具合に下準備がしてある。
うまい具合にWindowsServerへ疎通できる。

おおまかな手順



  1. Linuxサーバへ443ポートでSSHログインする

  2. クライアントのTeratermでSSH転送設定を行う

  3. クライアントからループバックアドレスへリモートデスクトップ接続を試みる


下準備:sshdで443ポートをlistenさせておく


Linuxサーバで下準備をします。

▼/etc/ssh/sshd_configを編集します。
#       $OpenBSD: sshd_config,v 1.93 2014/01/10 05:59:19 djm Exp $

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#

Port 22 #個人的に消すのはためらわれる。
Port 443 #追加します。
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#######以下省略##############


▼sshdを再起動します。
# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]

▼443ポートがリッスンしているか確認します。
# netstat -anp | grep sshd

443ポートでしか出られないんじゃ下準備自体が出来ないんじゃないかって?

まぁ。
そうですね。

違う環境から行うなり、一時的に許可してもらうなり、
頑張って下準備を完了させてください。

ステップ1:Linuxサーバへ443ポートでSSHログインする


下準備が済んでいれば、問題なくクライアントからTeratermでログイン出来るはず。
出来なければ、
なんとか頑張ってログインしてください。

ステップ2:クライアントのTeratermでSSH転送設定を行う


Teratermのコンソールで、[設定(S)] => [SSH転送(O)] => [追加(A)]と進みます。

[SSHポート転送]画面で、以下のように設定を行います。

SSH転送設定




















ローカルのポート お好みのポート番号
リッスン ブランクでOK
リモート側ホスト WindowsServerのIP
ポート RDPで使うポート番号


ステップ3:クライアントからループバックアドレスへリモートデスクトップ接続を試みる


リモートデスクトップ接続で、
下記のように指定して接続を行います。

RDP

ポート番号はもちろんステップ2で指定したお好みのポート番号です。

接続後はいつも通りユーザー名とパスワードを入力して、
リモートデスクトップ接続が完了です。

こちらからは以上です。