2016-06-24 5 views
1

:私はその関数が終了するまで実行される参照が、」doesnのできるCloudWatchのログではは、AWSラムダ関数でEC2の方法を実行することはできません私はインスタンス情報を記述するために、次のラムダ関数を呼び出してい

'use strict' 

var aws = require('aws-sdk'); 

exports.handler = function(event, context) { 
    var instanceID = JSON.parse(event.Records[0].Sns.Message).Trigger.Dimensions[0].value; 

    aws.config.region = 'us-east-1'; 

    var ec2 = new aws.EC2; 

    var params = {InstanceIds: [instanceID]}; 

    ec2.describeInstances(params, function(e, data) { 
     if (e) 
      console.log(e, e.stack); 
     else 
      console.log(data); 
    } 
}; 

ENDのRequestId:xxxxxxxxxxxxxx REPORTのRequestId:xxxxxxxxxxxxxx期間:XXミリ秒銘打た期間:XXミリ秒のメモリサイズ:使用XX MB最大メモリ:XX MB

マイラムダ関数がありec2.describeInstancesメソッドの内部で何がトンを記録していませんVPCアクセスおよびIAM AdministratorAccessの役割(フルアクセス)。何らかの理由で、ec2.describeInstancesメソッドを実行できません。何が間違っていて、どうすれば修正できますか?

+0

EC2インスタンスはVPCのプライベートサブネットにありますか? – error2007s

+0

はい、私のラムダ機能は、このサブネットをその構成に持っています。 – Danilo

+0

解決済みですか?私は同じ問題を抱えており、答えのどれも助けられていません – Slav

答えて

1

ラムダ機能にVPC設定を追加すると、そのVPC内のリソースにのみアクセスできます。ラムダ関数がVPCリソースとパブリックインターネットの両方にアクセスする必要がある場合、VPCはVPC内にNAT(Network Address Translation)インスタンスを持つ必要があります。そのEC2インスタンスがログをクラウドウォッチに送信するためには、NATインスタンスを介してインターネットに接続する必要があります。

AWS Lambdaは、ラムダ機能がVPCリソースにアクセスするためのENIを設定するために提供するVPC情報を使用します。各ENIには、指定したサブネット内のIPアドレス範囲からプライベートIPアドレスが割り当てられますが、パブリックIPアドレスは割り当てられません。したがって、ラムダ機能にインターネットアクセスが必要な場合(たとえば、Amazon CloudwatchなどのVPCエンドポイントを持たないAWSサービスにアクセスする場合)、VPC内でNATインスタンスを設定するか、Amazon VPC NATゲートウェイを使用できます。詳細については、Amazon VPCユーザーガイドのNAT Gatewaysを参照してください。 VPCに接続されたインターネットゲートウェイを使用することはできません。これは、ENIにパブリックIPアドレスが必要であるためです。それはその後、違いを確認していない場合

+0

ec2メソッドを使用してCloudWatchにログインする代わりに、ラムダ関数を使用して、同じVPCのラムダ設定内でec2インスタンスをsshしたいと考えています。 NATを設定する必要はありますか?ラムダがインスタンスのポート22に接続できるようにセキュリティグループを設定する必要はありますか? – Danilo

+0

インスタンスにインターネットに接続できません。つまり、NATはSSHだけに必要です。そして、はい、そのEC2 insatnceへのラムダのアクセスが必要になります – error2007s

1

まず、

  • あなたはENIを作成する必要があり、あなたのラムダ

    { 
         "Effect": "Allow", 
         "Resource": "*", 
         "Action": [ 
          "ec2:DescribeInstances", 
          "ec2:CreateNetworkInterface", 
          "ec2:AttachNetworkInterface", 
          "ec2:DescribeNetworkInterfaces", 
          "ec2:DeleteNetworkInterface", 
          "ec2:DetachNetworkInterface", 
          "ec2:ModifyNetworkInterfaceAttribute", 
          "ec2:ResetNetworkInterfaceAttribute", 
          "autoscaling:CompleteLifecycleAction" 
         ] 
        } 
    

    にこのroleを与えてみてください。 [ネットワークインターフェイス]ページhttps://console.aws.amazon.com/ec2/v2/home#NIC:sort=securityGroupと[ネットワークインターフェイスの作成]に移動します。適切なセキュリティグループとサブネット(たとえばs0bn3t)を選択します。

  • ラムダの「詳細設定」で、VPCを選択すると、サブネットの一覧が表示されます。ここで、上記のENIが関連付けられているサブネット( 's0bn3t')を選択します。

私はこれを行うべきだと思います。

+0

これは決して解決しましたか?私は同じ問題を抱えており、答えのどれも助けられなかった – Slav

関連する問題