AWS のドキュメントに記載されているサンプル をそのままそっくりコピれば簡単に実現できた。
下記は CloudFront へのアクセス元 IP を確認して、参照するオリジンを動的に切り替えてるところ。 オリジンリクエストイベントをトリガーとしてやれば良い。
exports.lambda_handler = async (event, context, callback) => { const request = event.Records[0].cf.request; console.log(util.inspect(request, { depth: null })); const client_ip = event["Records"][0]["cf"]["request"]["clientIp"]; if (await is_backend_ip(client_ip)) { // オリジン変更 request.origin = { custom: { domainName: ECS_WP_TASK_DNS_NAME, customHeaders: {}, path: '', port: 80, protocol: 'http', // TODO Use HTTPS readTimeout: 30, keepaliveTimeout: 5, sslProtocols: ['TLSv1', 'TLSv1.1', 'TLSv1.2'] } }; // Host ヘッダも書き換える場合 // request.headers['host'] = [{ key: 'host', value: 'example.com'}]; console.log(`Rewrited origin: ${ECS_WP_TASK_DNS_NAME}`); } callback(null, request); };
CloudFront への設定方法などはこちらと同様。