質問編集履歴
4
外部APIにも実はつながっていなかった。。。
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
### 発生している問題・エラーメッセージ
|
|
15
15
|
|
|
16
16
|
Lambdaの実行ログに以下のエラーが発生し、EC2上で動くREST APIへの接続ができませんでした。
|
|
17
|
-
なお、別の外部のREST APIへの接続は問題なく成功しました。(公共情報等の自由にアクセス可能なREST API)
|
|
17
|
+
~~なお、別の外部のREST APIへの接続は問題なく成功しました。(公共情報等の自由にアクセス可能なREST API)~~
|
|
18
|
-
|
|
18
|
+
↑ごめんなさい!!VPC使ってるときは外部APIにもつながってませんでした!!!間違いでした!!!実際はNAT Gatewayまでのルーティングが正しくなかったです。。。
|
|
19
19
|
```
|
|
20
20
|
ERROR Uncaught Exception
|
|
21
21
|
{
|
3
PublicIPでなくホスト名での接続
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|サービス|VPC|リージョン|Security Group|IPアドレス|
|
|
10
10
|
|--|--|--|--|--|
|
|
11
11
|
|Lambda関数|VPC A|東京A|SG L(必要なポート上で0.0.0.0をインバウンド許可、アウトバウンドは全て許可)|-|
|
|
12
|
-
|EC2インスタンス|VPC A|東京A|SG E(必要なポート上でSG Lをインバウンド許可、アウトバウンドは全て許可)|1.2.3.4
|
|
12
|
+
|EC2インスタンス|VPC A|東京A|SG E(必要なポート上でSG Lをインバウンド許可、アウトバウンドは全て許可)|myHost(1.2.3.4のpublic Elastic IPに解決する)|
|
|
13
13
|
|
|
14
14
|
### 発生している問題・エラーメッセージ
|
|
15
15
|
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
exports.handler = async (event, context, callback) => {
|
|
68
|
-
const url = "https://
|
|
68
|
+
const url = "https://myHost:port/MYRESTAPI"
|
|
69
69
|
const val = await test();
|
|
70
70
|
console.log(val);
|
|
71
71
|
};
|
2
コードをもうちょい親切に
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -36,11 +36,40 @@
|
|
|
36
36
|
### 該当のソースコード
|
|
37
37
|
|
|
38
38
|
```javascript
|
|
39
|
+
async function test(url) {
|
|
39
40
|
const https = require('https');
|
|
41
|
+
const urlObj = require('url').parse(url);
|
|
40
42
|
return new Promise((resolve, reject) => {
|
|
41
43
|
https.get(urlObj, async res => {
|
|
44
|
+
const { statusCode } = res;
|
|
45
|
+
const contentType = res.headers['content-type'];
|
|
46
|
+
|
|
47
|
+
let error;
|
|
48
|
+
if (statusCode !== 200) {
|
|
49
|
+
error = new Error('Request Failed.\n' + `Status Code: ${statusCode}`);
|
|
50
|
+
} else if (!/^application/json/.test(contentType)) {
|
|
51
|
+
error = new Error(
|
|
52
|
+
'Invalid content-type.\n' +
|
|
53
|
+
`Expected application/json but received ${contentType}`
|
|
42
|
-
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
if (error) {
|
|
57
|
+
console.error(error.message);
|
|
43
|
-
|
|
58
|
+
// Consume response data to free up memory
|
|
59
|
+
res.resume();
|
|
60
|
+
reject(error);
|
|
61
|
+
}
|
|
62
|
+
res.on('data', d => resolve(j));
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
exports.handler = async (event, context, callback) => {
|
|
68
|
+
const url = "https://1.2.3.4:port/MYRESTAPI"
|
|
69
|
+
const val = await test();
|
|
70
|
+
console.log(val);
|
|
71
|
+
};
|
|
72
|
+
|
|
44
73
|
```
|
|
45
74
|
|
|
46
75
|
### 試したこと
|
1
情報追記
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Lambda関数(Node.js、以下Lambda)からEC2インスタンス(以下EC2)上で動いているサービスのREST APIにパブリックIPに解決可能なホスト名で接続したいのですが、`ETIMEDOUT`で失敗します。これを成功させたいです。
|
|
4
4
|
※Labmdaから別の外部のREST APIへの接続には成功しています。
|
|
5
|
+
※EC2の当該REST APIには、自PC等外部からの接続には成功しています。
|
|
5
6
|
|
|
6
7
|
#### 構成
|
|
7
8
|
|