外部ALBに対してS3を直接紐づける
概要
この構成です。この構成を実施したい人も多いと思うので記載します。
AWSの公式には内部ALBのバージョンの手順が載っているのですが、外部ALBバージョンでも作成できます。AWSのサポートには、これだとヘルスチェックが落ちると言われましたが、それも下記のようにすれば回避できます。
手順概要
内部ALBで構築するときの公式の手順
ほとんど上記の手順通りに進めます
Step1: Amazon S3 のVPC Endpoint を作成する
Step2: VPCエンドポイントから S3 へのアクセスを許可する
はそのまま踏襲
Step3から少しもちろん違います
Step3以降の手順詳細
ALB に名前を付け、「internal」スキームを選択する
-> ALB に名前を付け、「extenrnal」スキームを選択する
これぐらいが差分ですが
外部ALB名と同じバケット名を作成することがキモです。
つまり、AWSによって払い出されるtest-demo-alb-XXXXXXXX.ap-northeast-1.elb.amazonaws.com
このようなALB名に対して同等のバケット名でS3を作成してください
ALB名でS3のバケット名を下記で設定
こちらのヘルスチェックを踏襲して、307,445で監視すれば生死監視もOKです
ちなみに何度か作り直している際に、SGのこの手順を実施してなくてハマったので、SGやIAMの権限不足のようなAWSハマりあるあるのところはご注意ください。
追加でターゲットグループによって振り分けをする
追加で今回、ALBの振り分けも実施したかったのですが、
その場合は二点注意すれば作成できます
1点目 ターゲットグループの作成とルーティング
こちらは当たり前だと思うのですが、ターゲットグループの作成とルーティングが必要です
1-1 IPベースのターゲットグループ
https://dev.classmethod.jp/articles/ip-target-for-alb/
こちらの記事のようにターゲットグループを作成します。
1-2 ルーティング
2点目 S3にパス名でフォルダを作成
S3にパス名でフォルダを作成をしてください。こうしないとALBからS3のどこにルーティングしていいのかがAWS側がわからないのだと思います。
その他
ALBのログを出すときに
こちらの公式だけだとログがでず、IAMではマリました、このクラスメソッドさんの記事で書かれている方法が必要で
https://dev.classmethod.jp/articles/alb-connection-logs/
さらにこの記事のIAM中の582318560864は
"AWS": "arn:aws:iam::582318560864:root"
自分のAWSアカウントとかではなく、ap-northeast-1で固有の値なのでご注意ください