質問編集履歴

4

外部APIにも実はつながっていなかった。。。

2019/10/03 08:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -30,9 +30,9 @@
30
30
 
31
31
  Lambdaの実行ログに以下のエラーが発生し、EC2上で動くREST APIへの接続ができませんでした。
32
32
 
33
- なお、別の外部のREST APIへの接続は問題なく成功しました。(公共情報等の自由にアクセス可能なREST API)
33
+ ~~なお、別の外部のREST APIへの接続は問題なく成功しました。(公共情報等の自由にアクセス可能なREST API)~~
34
34
 
35
-
35
+ ↑ごめんなさい!!VPC使ってるときは外部APIにもつながってませんでした!!!間違いでした!!!実際はNAT Gatewayまでのルーティングが正しくなかったです。。。
36
36
 
37
37
  ```
38
38
 

3

PublicIPでなくホスト名での接続

2019/10/03 08:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  |Lambda関数|VPC A|東京A|SG L(必要なポート上で0.0.0.0をインバウンド許可、アウトバウンドは全て許可)|-|
22
22
 
23
- |EC2インスタンス|VPC A|東京A|SG E(必要なポート上でSG Lをインバウンド許可、アウトバウンドは全て許可)|1.2.3.4(public Elastic IP)|
23
+ |EC2インスタンス|VPC A|東京A|SG E(必要なポート上でSG Lをインバウンド許可、アウトバウンドは全て許可)|myHost(1.2.3.4public Elastic IPに解決する)|
24
24
 
25
25
 
26
26
 
@@ -132,7 +132,7 @@
132
132
 
133
133
  exports.handler = async (event, context, callback) => {
134
134
 
135
- const url = "https://1.2.3.4:port/MYRESTAPI"
135
+ const url = "https://myHost:port/MYRESTAPI"
136
136
 
137
137
  const val = await test();
138
138
 

2

コードをもうちょい親切に

2019/10/01 07:03

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -74,15 +74,73 @@
74
74
 
75
75
  ```javascript
76
76
 
77
+ async function test(url) {
78
+
77
79
  const https = require('https');
80
+
81
+ const urlObj = require('url').parse(url);
78
82
 
79
83
  return new Promise((resolve, reject) => {
80
84
 
81
85
  https.get(urlObj, async res => {
82
86
 
83
- ....
87
+ const { statusCode } = res;
84
88
 
89
+ const contentType = res.headers['content-type'];
90
+
91
+
92
+
93
+ let error;
94
+
95
+ if (statusCode !== 200) {
96
+
97
+ error = new Error('Request Failed.\n' + `Status Code: ${statusCode}`);
98
+
99
+ } else if (!/^application/json/.test(contentType)) {
100
+
101
+ error = new Error(
102
+
103
+ 'Invalid content-type.\n' +
104
+
105
+ `Expected application/json but received ${contentType}`
106
+
107
+ );
108
+
109
+ }
110
+
111
+ if (error) {
112
+
113
+ console.error(error.message);
114
+
85
- // `urlObj`は指定URLで作成したURLオブジェクトです
115
+ // Consume response data to free up memory
116
+
117
+ res.resume();
118
+
119
+ reject(error);
120
+
121
+ }
122
+
123
+ res.on('data', d => resolve(j));
124
+
125
+ });
126
+
127
+ });
128
+
129
+ }
130
+
131
+
132
+
133
+ exports.handler = async (event, context, callback) => {
134
+
135
+ const url = "https://1.2.3.4:port/MYRESTAPI"
136
+
137
+ const val = await test();
138
+
139
+ console.log(val);
140
+
141
+ };
142
+
143
+
86
144
 
87
145
  ```
88
146
 

1

情報追記

2019/10/01 05:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,8 @@
5
5
  Lambda関数(Node.js、以下Lambda)からEC2インスタンス(以下EC2)上で動いているサービスのREST APIにパブリックIPに解決可能なホスト名で接続したいのですが、`ETIMEDOUT`で失敗します。これを成功させたいです。
6
6
 
7
7
  ※Labmdaから別の外部のREST APIへの接続には成功しています。
8
+
9
+ ※EC2の当該REST APIには、自PC等外部からの接続には成功しています。
8
10
 
9
11
 
10
12