インターフェイスVPCエンドポイントとRoute 53でS3アクセスを簡素化する
Route 53のプライベートホストゾーンを使うことで、クライアントは--endpoint-urlを指定せずにVPCエンドポイント経由でS3にアクセスできます。
S3のインターフェイスVPCエンドポイントを使ってS3にアクセスするには、--endpoint-urlオプションを指定する必要があります。しかし、このオプションを毎回指定する手間を省き、アクセスを簡素化するには、Route 53のプライベートホストゾーンを利用できます。

S3 VPCエンドポイント
インターフェイスVPCエンドポイントを作成します。
aws ec2 create-vpc-endpoint \ --vpc-id $YOUR_VPC_ID \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.$YOUR_REGION.s3 \ --subnet-ids $YOUR_PRIVATE_SUBNET_IDS \ --security-group-ids $YOUR_SECURITY_GROUP_IDSエンドポイントが作成されたことを確認し、そのDNSエントリを取得します。
aws ec2 describe-vpc-endpoints \ --filters Name=service-name,Values=com.amazonaws.$YOUR_REGION.s3 \ --query "VpcEndpoints[*].DnsEntries"[ [ { "DnsName": "*.vpce-xxxxxxxxxxxxxxxxx-xxxxxxxx.s3.ap-northeast-1.vpce.amazonaws.com", "HostedZoneId": "xxxxxxxxxxxxxx" }, { "DnsName": "*.vpce-xxxxxxxxxxxxxxxxx-xxxxxxxx-ap-northeast-1a.s3.ap-northeast-1.vpce.amazonaws.com", "HostedZoneId": "xxxxxxxxxxxxxx" } ]]VPCエンドポイントのURLを使って、S3へのアクセスを確認します。
--regionオプションを指定する必要があります。
aws s3 ls \ --region <YOUR_REGION> \ --endpoint-url http://vpce-xxxxxxxxxxxxxxxxx-xxxxxxxx.s3.ap-northeast-1.vpce.amazonaws.comRoute 53のプライベートホストゾーン
Route 53のプライベートホストゾーンを使うと、そのURLを直接指定する必要がなくなります。
aws route53 create-hosted-zone \ --name s3.$YOUR_REGION.amazonaws.com \ --vpc VPCRegion=$YOUR_REGION,VPCId=$YOUR_VPC_ID \ --caller-reference "$(date)"Route 53コンソールを使って、VPCエンドポイントを指すA(ALIAS)レコードを追加します。
Create recordをクリックします。

レコードタイプとしてAを選択し、ルーティング先としてAlias to VPC endpointを選びます。

ホストゾーンを設定した後は、--endpoint-urlオプションを指定せずにS3へアクセスできます。
--regionオプションを指定する必要があります。
aws s3 ls --region ap-northeast-1まとめ
S3のインターフェイスVPCエンドポイントとRoute 53のプライベートホストゾーンを組み合わせたところ、--endpoint-urlを一切指定することなく、aws s3 lsをプライベートエンドポイント経由で動作させられました。ポイントは、s3.$YOUR_REGION.amazonaws.com用のプライベートホストゾーンを作成し、インターフェイスエンドポイントを指すA(ALIAS)レコードを設定しておくことです。こうしておけば、そのVPC内では標準のS3ホスト名が自動的にVPCエンドポイントへ解決されます。これは特に、カスタムエンドポイントを簡単に指定する手段を持たないツールやSDKにとって重要です。というのも、このアプローチではクライアント側のコード変更が一切不要だからです。ただし、このホストゾーンの名前解決は、関連付けられたVPCに厳密にスコープされるため、別のVPCやオンプレミスのVPN経由で接続するクライアントは、そのネットワークが同じプライベートゾーンに関連付けられていない限り、この設定の恩恵を受けられません。
Related posts
Cognito User PoolsとOIDCでSlackサインインを実装する
Cognito user poolをOIDC経由でSlackと連携させ、"Sign in with Slack"をAmplifyでNext.jsアプリに組み込みます。
Lambda Web AdapterでFastAPIをAWS Lambdaにデプロイする
Lambda Web Adapterを使うと、FastAPIで書いたAPIバックエンドをコンテナのまま単一のLambda関数にデプロイできます。
API Gateway WebSocket:モック統合の実装
バックエンドのLambdaを一切使わず、モック統合のみでAPI Gateway WebSocket APIを構築し、あらかじめ用意されたレスポンスを返します。
CloudFront署名付きURL経由でS3にアップロードする
CloudFrontの署名付きURLを使えば、独自ドメイン経由でS3にアップロードできます。S3の直接の署名付きURLが使えない場合に有用です。
AWS EventBridge Scheduler:スケジュールに沿ってEC2を起動・停止する
Lambdaを介さずEventBridge SchedulerがEC2 APIを直接呼び出すことで、cronスケジュールに従ってEC2インスタンスを起動・停止します。
