インターフェイス VPC エンドポイントと Route 53 で S3 アクセスを簡素化する
Route 53 のプライベートホストゾーンを使い、クライアントから `--endpoint-url` を指定せずに VPC エンドポイント経由で S3 へアクセスします。
2022 年当時、S3 のインターフェイス VPC エンドポイントを使って S3 にアクセスするには、--endpoint-url オプションの指定が必要です。Route 53 のプライベートホストゾーンを使って標準のリージョナル S3 ホスト名をエンドポイントに割り当てれば、このオプションを省略できます。

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 から利用するにはホストゾーンとの関連付けが必要です。オンプレミスから利用する場合は、Route 53 Resolver のエンドポイントとルールなど、適切な DNS 転送経路を用意します。
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 にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の 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 インスタンスを起動・停止します。
