Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9146

Lambdaから同一アカウント内のEC2インスタンス情報を取得する

$
0
0
ゴール 1つのAWSアカウント内にあるEC2インスタンスの情報を取得する 前提 ・EC2にインスタンスが1つ以上存在する ・LambdaのランタイムはNode.js 14.x ・OSはWindows(10 Pro) やることたち ①Lambda関数を作成する ②Lambdaのレイヤーを作成 ③Lambda関数に割り当てたロールの権限を設定する ④コードを書き、実行する ①Lambda関数を作成する ・コンソール画面からLambdaの画面を開き、「関数の作成」を押下する ・「一から作成」を選択 ・基本設定を行う ・デフォルトの実行ロールの変更は以下を選択 ・関数の作成を押下して、作成完了 ②Lambdaのレイヤーを作成 Node.jsでAWSの操作をするために、Layersを追加します ※レイヤーそのものの設定方法は以下リンクを参照してください。 https://qiita.com/DJROU/items/bcdc2902757e606e9226 作成した関数の中でレイヤーを設定します ・画面上部のLayersを押下 ・レイヤー > レイヤーの追加を押下 ・作成済の「カスタムレイヤー」でnode_modulesの作成したバージョンを押下し、「追加」 ・Layers(1)のようにレイヤーが追加されていたら完了 ③Lambda関数に割り当てたロールの権限を設定する コンソールからIAMの画面を開きます。 ・IAM > ロールにて作成したLambda関数名が入ったロールを開く(例は getEC2Info-role-ntoxqcyo) ・ロールの概要 > アクセス権限 にてアタッチされているポリシーを押下 ・ポリシーの概要画面 > アクセス権限 にてポリシーの編集を押下 ・「+アクセス許可を追加する」で以下のように設定する  サービス:EC2  アクセスレベル:リスト > DescribeInstances を追加し、「ポリシーの確認」→「設定の保存」して完了! これでLambdaがEC2インスタンス一覧を取得する権限が与えられます。 ④コードを書き、実行する https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html に詳細が書いてありますが、以下に一例を示します。 ・以下のようにコードを書き、「Deploy」 例1:全インスタンスを取得 index.js const AWS = require('aws-sdk'); AWSconfig.region = 'ap-northeast-1'; exports.handler = function(event, context, callback) { const ec2 = new AWS.EC2({apiVersion: '2016-11-15'}); // describeInstancesの第一引数は空っぽ ec2.describeInstances({}, function(err, data) { console.log(AWS.VERSION); if (err) { console.log("NG", err); console.log(err, err.stack); // an error occurred return AWS.VERSION; } else { console.log(data); console.log(data.Reservations[0].Instances); return data.Reservations[0].Instances; } }); }; 例2:インスタンスタイプでフィルタリング index.js const AWS = require('aws-sdk'); AWSconfig.region = 'ap-northeast-1'; exports.handler = function(event, context, callback) { const ec2 = new AWS.EC2({apiVersion: '2016-11-15'}); // paramにてフィルタリング条件を用意 const params = { Filters: [ { Name: "instance-type", Values: [ "t2.micro" ] }, ] }; ec2.describeInstances(params, function(err, data) { console.log(AWS.VERSION); if (err) { console.log("NG", err); console.log(err, err.stack); // an error occurred return AWS.VERSION; } else { console.log(data); console.log(data.Reservations[0].Instances); return data.Reservations[0].Instances; } }); }; ・「test」はデフォルトのまま適当な名前を付けて「作成」 終わり

Viewing all articles
Browse latest Browse all 9146

Trending Articles