1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS SDK利用のFargateコンテナからSESに接続できない → NAT Gatewayで解決した話

Posted at

はじめに

AWSのFargateで動かしているコンテナ内で、AWS SDKを利用してAmazon SES経由でEメールを送信する仕組みを構築しました。
 
公式ドキュメントを参考にVPCエンドポイントを設定したにもかかわらず、SES経由のメール送信ができない問題に遭遇したので、その原因と解決策について書き留めておきます。

結論

Fargate上のコンテナからAWS SDKを使ったSES経由のメール送信を行う場合、SMTP対応のVPCエンドポイントではなく、NAT Gatewayを用いた通信経路が必要でした。

通信ができなかった構成構成

how-to-send-email-by-ses-2.jpg

通信ができた構成

how-to-send-email-by-ses-1.jpg

構成概要

 
• ECS(Fargate)でコンテナを稼働
• コンテナはプライベートサブネット内に配置
• AWS SDKを使用してAmazon SES経由でEメールを送信

起きた問題

ドキュメントを参考に設定したVPCエンドポイントがうまく機能しませんでした。具体的には、SESのSMTPエンドポイントに対しての接続はVPCエンドポイント経由で提供されていますが、AWS SDK(API経由の送信)はSMTPではなくSESのHTTPSエンドポイントを利用するため、設定したVPCエンドポイントでは対応で着なかったようです。

問題の原因詳細

AWS SESには次の2つの送信方法があります。
• SMTPインターフェース(メールクライアントなど)
• HTTPSインターフェース(AWS SDK、AWS CLI経由)

VPCエンドポイント(interface型)はSMTP通信にのみ対応しており、AWS SDKが使用するHTTPS通信には対応していないため、プライベートサブネット内のコンテナからはSES APIへアクセスができませんでした。

解決方法

VPCエンドポイント経由での通信を諦め、代わりにNAT Gatewayを経由して外部インターネットへの通信を許可することで、この問題を解決しました。

具体的な解決手順は以下の通りです。
1. NAT Gatewayをパブリックサブネットに設置
2. プライベートサブネットのルートテーブルを編集し、インターネット向け通信をNAT Gatewayにルーティング
3. AWS SDKからSESへの通信が可能になり、正常にメール送信が行えるようになった

まとめ

Fargate上のコンテナからAWS SDKを使ったSES経由のメール送信を行う場合、SMTP対応のVPCエンドポイントではなく、NAT Gatewayを用いた通信経路が必要でした。

同じような問題で困っている方の助けになれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?