【问题标题】:Calling awscli using nodeJS使用 nodeJS 调用 awscli
【发布时间】:2018-03-21 03:32:13
【问题描述】:

我的主要目标是:1. 从 NodeJS lambda 访问 redis(elasticache) 集群

我一直在尝试找到使用 lambda 访问 Redis 集群详细信息的方法。我在这个过程中取得了很好的进展,但是,我被困在需要使用 NodeJs Lambda 函数调用 awscli 的地方。

我解决这个问题的方法是我首先决定尝试使用“awscli”提取 Elasticache 集群的详细信息

最初,我想出了一个查询和列出所有集群的方法

命令:aws elasticache describe-cache-clusters --show-cache-node-info

根据我们创建的服务分离结果

命令:aws elasticache describe-cache-clusters --cache-cluster-id abc-rcache --show-cache-node-info

进一步钻取命令以获得我需要的结果,即弹性缓存的主机详细信息。

命令:aws elasticache describe-cache-clusters --cache-cluster-id abc-rcache --show-cache-node-info | grep 地址

现在,我的要求是在 NodeJS lambda 中调用上述命令(awscli),我发现了一些结果,但它们倾向于 python,但是,尚不清楚我需要如何在 NodeJS 中执行此操作(或者也许我没有正确理解)。

在我发帖时挖掘更多内容:)

任何建议将不胜感激。

问候, 萨米尔·瓦尔佩

【问题讨论】:

    标签: node.js amazon-web-services lambda redis aws-cli


    【解决方案1】:

    您可以直接使用弹性缓存 SDK 而不是使用 nodejs 调用 CLI。 用 cli 能做的一切,用 SDK 也能实现,

    http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ElastiCache.html

    例如,

    var elasticache = new AWS.ElastiCache();
    elasticache.addTagsToResource(params, function (err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });
    

    希望对你有帮助。

    【讨论】:

    • 按照 Kannaiyan 的建议,使用 SDK。在 Lambda 中解析 CLI 的输出是有问题的。使用 CLI 会增加 Lambda 的运行时间。在您的情况下,这可能不是一个因素,只是一个提示。
    • 谢谢大家试一试
    【解决方案2】:

    在同事的帮助下,我能够使用 awscli 本身找出问题并解析结果并获得准确的结果。

        //import { Aws, Options } from 'aws-cli-js';
    var awsCli = require('aws-cli-js');
    var Options = awsCli.Options;
    var Aws = awsCli.Aws; 
    //const options = new Options(
    //  aws_access_key_id = ID
    //aws_secret_access_key = Key2
      /* currentWorkingDirectory */ null
    //);
    
    
    const aws = new Aws();
    
    return aws.command('elasticache describe-cache-clusters --cache-cluster-id abc-rcache --show-cache-node-info').then((data) => {
     console.log(JSON.parse(data.raw).CacheClusters[0].CacheNodes[0].Endpoint.Address);
     console.log(JSON.parse(data.raw).CacheClusters[0].CacheNodes[0].Endpoint.Port);
    });
    //describe-instances
    //awsCli.command('ec2 describe-instances --instance-ids i-789b3ba7').then(function (data) {
    //  console.log('data = ', data); 
    //});
    

    感谢 Kannaiyan 对此的回复 :)。

    ~干杯, 萨米尔·瓦尔佩

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 1970-01-01
      • 2017-07-26
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 2019-11-09
      • 1970-01-01
      相关资源
      最近更新 更多