1

amazonEC2でPublicDnsNameを取得する方法は?ins.getPublicDnsName()を使用してインスタンスから取得できますが、一定時間後に作成されます。別の方法で取得できますか?または、生成されたらすぐに取得する方法はありますか?それを待たせてくれて

while(flag) {
              time = System.currentTimeMillis() - start;
              for (Reservation res : ec2.describeInstances().getReservations()) {
                 for (Instance ins : res.getInstances()) {
                     if(ins.getState().getName().equalsIgnoreCase("running") || time == MAX_TIME_FOR_THREAD){                        
                         System.out.println(ins.getPublicDnsName()+"#########"+ins.getInstanceId());
                         flag = false;
                         break;
                     }
                 }

                }                        
          }

しかし、スレッドの実行内ですが、複数のec2リソースを作成している間、最初のマシンのDNSを複数回返しますが、異なるDNSアドレスを返す必要があると感じています。

4

1 に答える 1

0

インスタンスが「実行中」状態に移行してからパブリック IP アドレス (したがってパブリック DNS 名) が割り当てられるまでには、常にわずかな遅延が発生します。Elastic IP も自動的に割り当てている場合は、さらに長くなります。ビジー状態のクラスターでは、1 ~ 2 秒から 5 ~ 10 秒まで変化する可能性があります。

あなたができることは何もありませんが、API をクエリする前に「実行中」状態を検出した後、短い遅延を導入することです - あなたのコードでは、実際にはインスタンスが「実行中」になるのを十分長く待っていません.興味深いことに、最後に取得した DNS 名を返します。これは実際には、使用している API の小さな不具合である可能性があります。

私のランチャー (.NET API に対して記述) には、インスタンスを起動するマルチスレッドのステージング ループがあり、それぞれが「実行中」として登録されるまでスリープ待機し、IP アドレスが入力されるまでさらにスリープ待機します。

于 2012-07-20T07:36:17.083 に答える