ゴール
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
作成した関数の中でレイヤーを設定します
・作成済の「カスタムレイヤー」でnode_modulesの作成したバージョンを押下し、「追加」
③Lambda関数に割り当てたロールの権限を設定する
コンソールからIAMの画面を開きます。
・IAM > ロールにて作成したLambda関数名が入ったロールを開く(例は getEC2Info-role-ntoxqcyo)
・ロールの概要 > アクセス権限 にてアタッチされているポリシーを押下
・ポリシーの概要画面 > アクセス権限 にてポリシーの編集を押下
サービス:EC2
アクセスレベル:リスト > DescribeInstances
を追加し、「ポリシーの確認」→「設定の保存」して完了!
これでLambdaがEC2インスタンス一覧を取得する権限が与えられます。
④コードを書き、実行する
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html
に詳細が書いてありますが、以下に一例を示します。
・以下のようにコードを書き、「Deploy」
例1:全インスタンスを取得
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:インスタンスタイプでフィルタリング
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;
}
});
};