0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-01-01

ゴール

1つのAWSアカウント内にあるEC2インスタンスの情報を取得する

前提

・EC2にインスタンスが1つ以上存在する
・LambdaのランタイムはNode.js 14.x
・OSはWindows(10 Pro)

やることたち

①Lambda関数を作成する
②Lambdaのレイヤーを作成
③Lambda関数に割り当てたロールの権限を設定する
④コードを書き、実行する

①Lambda関数を作成する

・コンソール画面からLambdaの画面を開き、「関数の作成」を押下する
image.png

・「一から作成」を選択
image.png

・基本設定を行う
image.png

・デフォルトの実行ロールの変更は以下を選択
image.png

・関数の作成を押下して、作成完了

②Lambdaのレイヤーを作成

Node.jsでAWSの操作をするために、Layersを追加します
※レイヤーそのものの設定方法は以下リンクを参照してください。
https://qiita.com/DJROU/items/bcdc2902757e606e9226

作成した関数の中でレイヤーを設定します

・画面上部のLayersを押下
image.png

・レイヤー > レイヤーの追加を押下
image.png

・作成済の「カスタムレイヤー」でnode_modulesの作成したバージョンを押下し、「追加」
image.png

・Layers(1)のようにレイヤーが追加されていたら完了
image.png

③Lambda関数に割り当てたロールの権限を設定する

コンソールからIAMの画面を開きます。
・IAM > ロールにて作成したLambda関数名が入ったロールを開く(例は getEC2Info-role-ntoxqcyo)
image.png

・ロールの概要 > アクセス権限 にてアタッチされているポリシーを押下
image.png

・ポリシーの概要画面 > アクセス権限 にてポリシーの編集を押下
image.png

・「+アクセス許可を追加する」で以下のように設定する
image.png

 サービス: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」はデフォルトのまま適当な名前を付けて「作成」
image.png

終わり

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?