🕌

AWS → 外部サーバのIPアドレスを固定したい

2023/04/21に公開

概要

AWSで動作しているサービスから外部サーバに対してアクセスをする際にIPアドレスを固定する必要があり、AWS → 外部サーバへのアクセスでIPアドレスを固定する方法を検討しました。

結論

EC2とNatGatewayだけだろうと思って調べていたのですが、LambdaのIPアドレスを固定する方法を見つけました。
それぞれのパターンを紹介しつつ、LambdaでのIPアドレスの固定方法について細かく見ていきます。

詳細

NatGateway

AWS → インターネットのIPアドレスを固定するには、基本的にNatGatewayを利用することになると思います。

VPCのルートテーブルを修正して、0.0.0.0/0、つまり指定していないすべてのネットワークのルートをNatGatewayにします。
NatGatewayはIPアドレスを1つ保持しており、外部サーバへのアクセスはNatGatewayの持っているIPアドレスとなります。

意外と高くて、1つのNatGatewayで6000円/月くらいするので、個人的にはあまり使いたくありません。

EC2

パブリックサブネットにEC2インスタンスを起動して、ElasticIPを関連付けするのみです。
ずっと起動したままでいいのであれば、起動時に割り振られるパブリックIPアドレスでも大丈夫です。

概念図

AWS ⇔ 外部サーバのIPアドレスが一致するのが他にはない特徴だと思います。

Lambda

LambdaはデフォルトではVPC外に作成されます。その場合は特に意識することなくインターネットのリソースにアクセスできますが、IPアドレスはおそらくAWSの保持している任意のIPアドレスになります。

VPCの内部にLambdaを作成すると、指定したアベイラビリティゾーンの分だけネットワークインターフェースを作成します。
Lambda Hyperplane ENIという仕組みを利用していて、セキュリティグループとサブネットの組み合わせごとに一意のネットワークアダプターを作成します。

Lambdaと聞くとスケールが気になりますが、

同じ Hyperplane ENI を使用できる Lambda 関数の数にクォータはありません。ただし、各 Hyperplane ENI は最大 65,000 個の接続/ポートをサポートします。接続数が 65,000 を超えると、Lambda は新しい Hyperplane ENI を作成して、追加の接続を提供します。

とあるので、結構なスケールに対応しているようです。

Lambdaを作成するときに詳細設定でVPCを有効化に✅を入れることで、VPC内部に作成することができます。

どのVPCに配置するのか、サブネットとセキュリティグループを選択します。

Lambdaを作成すると、ネットワークインターフェースが設定したサブネットごとにできます。
ただし、これらのネットワークインターフェースはパブリックIPアドレスを持たないので、プライベートサブネットに配置しない限り、インターネットに出ることができません。

ネットワークインターフェースなので、ElasticIPを関連付けることができます。
ElasticIPを付けることで、IPアドレスが固定されるので、AWS → 外部サーバーのIPアドレスを固定することができます。

これによってNatGatewayが必要なくなるので、最低限の費用でAWS → 外部サーバのIPアドレスを固定できることに加えて、サーバーレスなサービスでIPアドレスを固定することができます。

まとめ

基本的にはNatGatewayでいいと思いますが、LambdaでもIPアドレスを固定する方法を見つけました。

色々と調べてみると今まで思いつかなかったような解決方法が見つかって、まだまだ知らないことが色々あるなと実感しました。

参考

https://dev.classmethod.jp/articles/lambda-vpc-with-global-address/

最後に

ここまでお読みいただきありがとうございました。
Team DELTAでは2023年より毎週記事を更新しています。
Zennやnoteで記事を書いているので他の記事もぜひ見てみて下さい!

DELTAテックブログ

Discussion