>source

내 VPC에는 퍼블릭 및 프라이빗의 두 서브넷이 있습니다.

퍼블릭 서브넷에는 ECS Fargate 작업이 포함됩니다.

Network mode -> awsvpc
ENI Id -> eni-xxxxxxxxxx
Private IP -> 10.0.0.36
Public IP -> 34.243.XXX.XXX

프라이빗 서브넷에는 Lambda 함수가 포함되어 있습니다.

IP 10.0.0.36에서 Lambda에서 연결하려고하면 오류가 발생합니다.

{
  "errorType":"Error",
  "errorMessage":"getaddrinfo ENOTFOUND 10.0.0.36:3000",
  "trace":[
    "Error:getaddrinfo ENOTFOUND 10.0.0.36:3000",
    "at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26)"
  ]
}

이 문제를 어떻게 해결할 수 있습니까?

추신. Lambda에는 인터넷 액세스가 필요하지 않습니다.

부가:

내 Lambda의 단순화 된 코드 :

const http = () => {
    const body = '{"vehicles":[{"id":0,"profile":"driving-car","start":[32.41,34.784],"end":[32.41,34.784]}],"jobs":[{"id":0,"location":[32.41,34.784]},{"id":1,"location":[32.480,34.835]}],"options":{"g":true}}';
    const options = {
        hostname: '10.0.0.36:3000',
        path: '/',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json; charset=utf-8',
            'Content-Length': Buffer.byteLength( body ),
        }
    };
    return new Promise(resolve => {
        const req = require('http' ).request(options, res => {
            res.setEncoding('utf8'); 
            var str = '';
            res.on('data', chunk => str += chunk);
            res.on('end', () => resolve(str));
        });
        req.write(body);
        req.end();
    });
};
exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: await http(),
    };
    return response;
};

  • 답변 # 1

    Node.js로 HTTP 요청을 작성하면 다음과 같은 샘플 코드가 표시됩니다.

    const https = require('https')
    const options = {
      hostname: 'whatever.com',
      port: 443,
      path: '/todos',
      method: 'GET'
    }
    const req = https.request(options, res => {
      console.log(`statusCode: ${res.statusCode}`)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    req.on('error', error => {
      console.error(error)
    })
    req.end()
    
    

    나는 그들이 port: 별도의 필드로 추가하는 대신 hostname .

    그러나 코드에는 다음이 표시됩니다.

    hostname: '10.0.0.36:3000'
    
    

    제공 시도 hostnameport 별도의 필드로.

관련 자료

  • 이전 codeigniter - PHP에서 두 날짜의 차이를 얻고 다른 새 날짜를 얻기 위해 그 차이를 세 번째 날짜에 추가하는 방법은 무엇입니까?
  • 다음 java - unity - unity에서 컴패니언 객체 내에서 android kotlin 함수 호출