AWS Lambda 関数はどのようにしてプライベート IP アドレス経由で EC2 インスタンスを呼び出すことができますか?

AWS Lambda 関数はどのようにしてプライベート IP アドレス経由で EC2 インスタンスを呼び出すことができますか?

Lambda でプライベート IP アドレス経由で EC2 インスタンスを呼び出すにはどうすればよいですか?

簡単に言うと、Minecraft サーバーの仲間が AWS インスタンスを起動および停止し、サーバー上に誰もいない場合に自動シャットダウンを処理できるように、Discord ボットを作成します。

Lambda 関数は、起動、停止、現在の自動割り当てパブリック IP アドレスの取得、Minecraft のクエリ プロトコル (UDP ポート 25565) 経由でサーバーが実行中であることを確認する処理を行います。

私はこれをできるだけコスト効率よく実行しようとしており、Elastic IP アドレスを割り当てずに実行できるかどうかを確認したいと考えています。起動する必要がある Minecraft サーバーが複数あるためです。また、そのサーバーが Elastic IP アドレスでオフラインになっている場合、または 1 つ以上の Elastic IP を使用している場合は料金が発生します。

同じサーバーが Elastic IP アドレスを使用しているときに同じ機能をテストしたところ、期待どおりに動作しました。今度は、プライベート IP アドレスで同じことができるかどうかを知りたいです。

答え1

まだ行っていない場合は、EC2 インスタンスが実行されている VPC に Lambda を接続する必要があります。 詳細は以下を参照してください。

デフォルトでは、Lambda 関数はパブリックインターネット上のリソース、つまり EC2 インスタンスのパブリック IP、AWS API などとのみ通信できます。

そこから、EC2 インスタンスに割り当てられたセキュリティ グループ (SG) が、Lambda 関数に割り当てられた SG から (インバウンド) トラフィックを受信できることを確認する必要があります。これは、UDP ポート 25565 など、必要なポートになります。

また、Lambda 関数に割り当てられた SG が、EC2 インスタンスに割り当てられた SG に、UDP ポート 2265 または必要なポートでアウトバウンド接続できることも確認する必要があります。アウトバウンド ポリシーは通常は広く開いているため、これは少し簡単です。

テストのために、Lambda 関数の SG を別の EC2 インスタンスに割り当てることができます。Lambda 関数の役割を果たすインスタンスを同じサブネットに配置すると、セットアップをさらに検証するのに役立ちます。

関連情報