AWS/プライベートサブネットにEC2をたてる(NAT編)

AWSにプライベートサブネットを作成し、その中にEC2を起動した状態です。

プライベートサブネット内のEC2はそのままではアクセスできません。
グローバルIPアドレスが割り振られていないからです。
クライアントからこのEC2にアクセスしようとしてもどうアクセスしていいのかわからず、たどりつくことができません。

そこで、メンテナンス用の踏み台サーバを一時的に置きます。
同VPC内にグローバルIPを割り当てたインスタンスを作成します。

この踏み台サーバからSSHなどで内部アドレス宛てに接続することができます。

ssh -i “[SSH秘密鍵ファイルパス]” ec2-user@[内部IPアドレス]

さて、ここからが本題です。

プライベートサブネットに立てたEC2に対してソフトウェアなどをインストールしたいとしましょう。

AWS Linuxのソフトウェアアップデートは基本的にyumコマンドで行います。

[root@ip-10-0-1-241 ~]# yum update
Loaded plugins: priorities, update-motd, upgrade-helper
Could not retrieve mirrorlist http://repo.ap-northeast-1.amazonaws.com/latest/main/mirror.list error was
12: Timeout on http://repo.ap-northeast-1.amazonaws.com/latest/main/mirror.list: (28, ‘Connection timed out after 10001 milliseconds’)

One of the configured repositories failed (Unknown),
and yum doesn’t have enough cached data to continue. At this point the only
safe thing yum can do is fail. There are a few ways to work “fix” this:

1. Contact the upstream for the repository and get them to fix the problem.

2. Reconfigure the baseurl/etc. for the repository, to point to a working
upstream. This is most often useful if you are using a newer
distribution release than is supported by the repository (and the
packages for the previous distribution release still work).

3. Disable the repository, so yum won’t use it by default. Yum will then
just ignore the repository until you permanently enable it again or use
–enablerepo for temporary usage:

yum-config-manager –disable

4. Configure the failing repository to be skipped, if it is unavailable.
Note that yum will try to contact the repo. when it runs most commands,
so will have to try and fail each time (and thus. yum will be be much
slower). If it is a very temporary problem though, this is often a nice
compromise:

yum-config-manager –save –setopt=.skip_if_unavailable=true

Cannot find a valid baseurl for repo: amzn-main/latest
[root@ip-10-0-1-241 ~]#

ミラーサイトに辿りつけないというエラーが出て終了しました。

このままでは実行できません。

これはAWSのyumリポジトリへのアクセスがAWSのインターネットGWを介した通信となるからです(※デフォルトのyum設定の場合)。現状では内部アドレスしか持ってないのでインターネットのルーティングができません。

そこでNATゲートウェイを構築し、インターネットへ接続できるようにします。
同VPC内のパブリックサブネット内にNATゲートウェイを作成します。

001

AWSのサービス一覧からVPCを選択し、サブネットを作成します。

002

プライベートサブネット用にサブネットを切るため、CIDRブロックを切り分けましょう。

003

次にNATゲートウェイを作成します。

004

NATゲートウェイは同VPC側のパブリックサブネット側に作成することに注意してください。
また、インターネットルーティング解決をするためにEIP(グローバルIPアドレス)を割り当てます。

005

プライベートサブネットのルーティングを設定します。
ルートテーブルを追加。

006

該当のVPCを指定します。

007

ルートの編集

008

送信先を”0.0.0.0/0″、ターゲットを先ほどのNATゲートウェイのIDを指定します。

これで設定は完了です。

pingテストを行ってみましょう。

[root@ip-10-0-1-241 ~]# ping ietf.org
PING ietf.org (4.31.198.44) 56(84) bytes of data.
64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=54 time=112 ms
64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=54 time=112 ms

通りました。
では、さきほどのyumコマンドを実行してみましょう。

[root@ip-10-0-1-241 ~]# yum update
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main/latest | 2.1 kB 00:00
amzn-main/latest/group | 35 kB 00:00
amzn-main/latest/primary_db | 3.5 MB 00:00
amzn-updates/latest | 2.3 kB 00:00
amzn-updates/latest/group | 35 kB 00:00
amzn-updates/latest/updateinfo | 306 kB 00:00
amzn-updates/latest/primary_db | 350 kB 00:00
Resolving Dependencies
–> Running transaction check
—> Package dhclient.x86_64 12:4.1.1-43.P1.22.amzn1 will be updated
—> Package dhclient.x86_64 12:4.1.1-43.P1.24.amzn1 will be an update


vim-filesystem x86_64 2:7.4.1416-1.38.amzn1 amzn-updates 11 k
vim-minimal x86_64 2:7.4.1416-1.38.amzn1 amzn-updates 480 k
Installing for dependencies:
libXcomposite x86_64 0.4.3-4.6.amzn1 amzn-main 21 k

Transaction Summary
================================================================================
Install ( 1 Dependent package)
Upgrade 18 Packages

Total download size: 50 M
Is this ok [y/d/N]:

いけましたね。
これでソフトウェアのインストールができるようになりました。

これでようやく本来やりたかった作業ができます♪

利用料についての注意

NATゲートウェイは、小額ですが1時間毎に課金されます。
余分な経費をかけたくなければ使わなくなったら削除するのも1つの手です。
削除した場合、紐づけていたEIPも合わせて削除しましょう。残しておくとこちらも1時間毎に課金されるので注意です。

コメントを残す

メールアドレスが公開されることはありません。