2016-09-08 24 views
3

AWS SDKを使用してopsworks.describeInstancesを呼び出そうとする非常に簡単なラムダ関数があります。コードはローカルで正常に実行されますが、ラムダの内部ではエラーやフィードバックなしでタイムアウトします。AWS LambdaでAWS SDK Opsworksコマンドを実行するには?

var AWS = require('aws-sdk'); 
var opsworks = new AWS.OpsWorks({ 
    apiVersion: 'latest', 
    region: "us-east-1" 
}); 
exports.handler = function(event, context, callback) { 
    var params = { 
     LayerId: 'idoflayer' 
    }; 
    opsworks.describeInstances(params, function(err, data) { 
     if (err) { 
      return callback(err); 
     } 
     callback(null, data); 
    }); 
}; 

ラムダ方針は次のとおりです。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "opsworks:CreateDeployment", 
       "opsworks:DescribeDeployments", 
       "opsworks:DescribeLayers", 
       "opsworks:DescribeInstances" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     } 
    ] 
} 

私はメモリと、タイムアウトの両方を増加させてきました。ログは関数が呼び出されているだけで、出力はないことを示しています。ラムダ関数の監視は呼び出しエラーを示していますが、これは単にタイムアウトが原因であると考えています。私はこれをus-west-2で実行していますが、私も同じことを私たちの東1で実行しようとしました。

アイデア?ラムダを使ってOpsWorksを監視し管理したいと思っています。

+0

このようなタイムアウトは、NATゲートウェイを持たないVPC内にLambda機能を置くことによって最もよく発生します。 VPCアクセスのLambda機能はパブリックIPアドレスを取得しないため、Lambda機能がVPC外のもの(AWS Opsworks APIなど)にアクセスするようにするには、NATゲートウェイが必要です。 –

+0

Mark Bさん、ありがとうございましたVPCの中で走っていましたが問題でした。 – JGS

答えて

0

解決するには、機能がAWS Opsworks APIにのみアクセスしようとしていたため、カスタムVPC設定を削除しました。

VPCを有効にすると、ラムダ関数はデフォルトのインターネットアクセスを失います。機能に外部インターネットアクセスが必要な場合は、セキュリティグループが発信接続を許可し、VPCにNATゲートウェイがあることを確認します。

ラムダはSDKをバンドルしており、アクセスはIAMポリシーによって決定されるため、APIを使用するためにはインターネットに外部からアクセスする必要があります。

+0

AWS APIを使用するために「インターネットへの外部アクセス」は必要ありません.VPCの一部ではないものに外部からアクセスする必要があります。ドキュメンテーションの文言はもっとはっきりしているかもしれません。 VPCエンドポイント経由で、VPCアクセスのみでS3にアクセスできます。将来的にVPCサービスエンドポイントを追加することを望みます。 –