如何将shell脚本(json)输出发送到aws sns主题?

时间:2016-11-15 10:34:44

标签: json shell amazon-web-services sh amazon-sns

我在AWS控制台中创建了一个arn主题,还使用电子邮件创建了订阅并确认了订阅。

我在AWS中运行了一个EC2实例,我写了一个小脚本来发送一些细节,例如实例类型,使用的操作系统,架构,安装的JDK,并将其格式化为" json"使用" printf"命令。

我想将脚本的json输出发送到我创建的主题。计划是将来自动化这些东西,但现在它只是一个测试目的。

代码I尝试:

#/bin/bash
AWS_ACCESS_KEY=xUISTaZscgstTgsreTTS
AWS_SECRET_KEY=8hsggTjakjst86AHGSR98agHHYI
credentials="-I $AWS_ACCESS_KEY -S $AWS_SECRET_KEY"
topicARN=arn:aws:sns:eu-west-1:9876577867654:xyzsy-ex:9d18e516-25h3-81h1-n148-chqa712qi1p0
json="$(./temp.sh)"
aws sns publish --topic-arn $topicARN --message-structure json --message "${json}"

temp.sh输出:

{
    "component": {
        "component": "xyz-name",
        "comp_version": "03"
    },
    "Instance": {
        "Instance_Type": "t2.small",
        "Instance_ID": "i-1e993001234q56789"
        "operatingsystem": "rhel"
    },
    "JDK": "1.8.0_111"
}   

但是它要求提供AWS区域,如果提供了抱怨凭证有效性。有没有办法动态提供凭据而不是设置shell来从" .aws / config"?

我计划将其作为cronjob运行,以便每20分钟将输出发送到主题。

1 个答案:

答案 0 :(得分:2)

来自the docs

  

AWS CLI在中查找凭据和配置设置   以下顺序:

     
      
  • 命令行选项 - 可以将区域,输出格式和配置文件指定为命令选项以覆盖默认设置。
  •   
  • 环境变量 - AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  •   
  • AWS凭证文件 - 位于Linux,OS X或Unix上的~/.aws/credentials或Windows上的C:\Users\USERNAME \.aws\credentials。   除默认情况外,此文件还可以包含多个命名配置文件   轮廓。
  •   
  • CLI配置文件 - 通常位于Linux,OS X或Unix上的~/.aws/configC:\Users\USERNAME \.aws\config上   视窗。此文件可以包含默认配置文件,名为profiles,和   每个CLI特定的配置参数。
  •   
  • 实例配置文件凭据 - 这些凭据可以在具有指定实例角色的EC2实例上使用,并通过其提供   Amazon EC2元数据服务。
  •   

因此,您可以从您调用的aws sns命令中传递凭据:

#/bin/bash
topicARN=arn:aws:sns:eu-west-1:9876577867654:xyzsy-ex:9d18e516-25h3-81h1-n148-chqa712qi1p0
json="$(./temp.sh)"
AWS_ACCESS_KEY=xUISTaZscgstTgsreTTS AWS_SECRET_KEY=8hsggTjakjst86AHGSR98agHHYI aws sns publish --topic-arn $topicARN --message-structure json --message "${json}"