【问题标题】:How to send shell script (json) output to aws sns topic?如何将 shell 脚本(json)输出发送到 aws sns 主题?
【发布时间】:2016-11-15 18:48:05
【问题描述】:

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

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

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

我正在尝试的代码:

#/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 分钟将输出发送到主题。

【问题讨论】:

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


    【解决方案1】:

    来自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 视窗。此文件可以包含默认配置文件、命名配置文件和 每个 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}"
    

    【讨论】:

    • 感谢您的快速回复。我试过你的解决方案。它不再要求凭证,但仍在抱怨地区。 '你必须指定一个区域。您还可以通过运行“aws configure”来配置您的区域。我什至尝试像凭据一样附加区域,但它仍然不起作用。
    • @KrishnaGhantaChowdary 对于区域,您需要将--region 参数传递给命令:AWS_ACCESS_KEY=xUISTaZscgstTgsreTTS AWS_SECRET_KEY=8hsggTjakjst86AHGSR98agHHYI aws sns publish --topic-arn $topicARN --message-structure json --message "${json}" --region ap-south-1
    • 哇...我做了一些跟踪和错误..它只是工作..现在我收到一些错误消息:调用发布操作时发生错误(InvalidParameter):无效参数:消息结构 - JSON 消息正文中没有默认条目
    • @KrishnaGhantaChowdary 你的$json 有问题:)
    • 谢谢您的解释。当我尝试验证从脚本获得的 JSON 输出时,它显示它是有效的 JSON。可以直接将 JSON 对象推送到 sns 主题吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2020-08-05
    相关资源
    最近更新 更多