标签: amazon-sns

AWS SQS 订阅 AWS SNS 主题

我有一个用例,我想将单个 SQS 订阅到两个 SNS 主题。因此,发布到任何 SNS 的任何消息都应该在 SQS 中可用。所以我的问题是我们可以在一个sqs上订阅两个SNS主题吗?

任何帮助将不胜感激。

publish-subscribe amazon-sqs amazon-web-services amazon-sns

2
推荐指数
1
解决办法
3594
查看次数

错误放置S3通知配置错误

我在尝试创建 s3 事件通知时遇到问题。有谁知道这个问题的解决方案?

错误是:

*Error applying plan:
1 error(s) occurred:
* module.Test-S3-Bucket.aws_s3_bucket_notification.s3-notification: 1 error(s) occurred:
* aws_s3_bucket_notification.s3-notification: Error putting S3 notification configuration: InvalidArgument: Unable to validate the following destination configurations
status code: 400, request id: AD9B5BF2FF84A6CB, host id: ShUVJ+TdkpqAZfpeDM3grkF9Vue3Q/AF0LydchperKTF6XdQyDM6BisZi/38pGAh/ZqS+gNyrSM=*
Run Code Online (Sandbox Code Playgroud)

下面是给我错误的代码:

resource "aws_s3_bucket" "s3-bucket" {
  bucket = "${var.bucket_name}"
  acl    = ""

  lifecycle_rule {
    enabled = true
    prefix  = ""

    expiration {
      days = 45
    }
  }

  tags {
    CostC = "${var.tag}"
  }
}


resource "aws_s3_bucket_notification" "s3-notification" {

  bucket = "${var.bucket_name}"

  topic …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-sns terraform

2
推荐指数
1
解决办法
1万
查看次数

如何使用 AWS Cloudwatch 将实例名称元数据(来自标签)发送到 SNS?

我正在尝试创建一个 Cloudwatch 规则,该规则在实例终止时将 EC2 实例的名称(而不是 InstanceID)发送到 SNS。下面的代码片段是当我选择创建这个简单规则时 AWS 提供的默认事件模式,但我向“详细类型”对象添加了 1 个部分。此部分是“实例名称”。但这不起作用,因为我收到的 SNS 电子邮件仍然不包含实例的名称。它仅在消息中包含 InstanceID。

   {
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "Instance Name",
    "EC2 Instance State-change Notification"
  ]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我仅成功地从 Cloudwatch 规则获取了 InstanceID。是否可以通过 Cloudwatch 检索标签中的自定义元数据?

话虽这么说,如果无法通过 Cloudwatch,是否可以以某种方式将 SNS 主题发送到 Lambda,并使用 Lambda 函数将 instanceID 转换为实例名称?

我的项目的重点是,我可以使用 Lambda 运行一个脚本,一旦这些实例终止,该脚本就会从监控应用程序中删除这些实例。在 AWS 之外,我们使用他们的名称来识别他们,而不是他们的实例 ID。

amazon-ec2 amazon-web-services amazon-sns amazon-cloudwatch aws-lambda

2
推荐指数
1
解决办法
1854
查看次数

SNS getEndpointAttributes 在 EventEndpointUpdated 事件后返回旧数据

将主题附加到 SNS 应用程序的“端点已更新”可配置主题时,我遇到了一些意外行为。根据 AWS 关于SNS 应用程序事件的文档,当平台端点已更新为禁用或令牌已更改时,我应该会收到有关我配置的主题的事件。

就我而言,我有一个订阅此主题的 lambda 函数,然后通过调用 AWS 的 javascript sdk 检索平台端点的属性,SNS.getEndpointAttributes以便我可以检查哪些属性已更改,以删除端点或更新持久存储中的关联令牌。然而,此调用返回端点,从而Enabled = true阻止我采取纠正措施。但是,如果我查看 AWS SNS 控制台,我可以看到端点已被禁用为Enabled = false

其他人是否也遇到过类似的不一致问题?如果有,解决这些问题的最佳做法是什么?感谢您的任何意见!

amazon-sns aws-sdk-js

2
推荐指数
1
解决办法
255
查看次数

使用 NodeJs 和 Express 进行 SNS 确认订阅

我正在尝试设置对 SNS 主题的订阅,我已在 SNS UI 中添加了 HTTP 订阅,并将其标记为“待确认”。我已经设置了端点来查找正确的标头(如下所示)并且正在工作。我的问题是端点永远不会获得“令牌”,请参见下面的我的代码和日志的输出。

NodeJS(w/express 4.15)测试代码:

router.post('/', (req, res, next) => {
    console.log('-----------------')
    console.log(req.body)
    console.log(req.headers)
    console.log('-----------------')
    if (req.get('x-amz-sns-message-type') == "SubscriptionConfirmation") {
        SNS.confirmSubscription({ Token: req.body.Token, TopicArn: req.get('x-amz-sns-topic-arn') }, (err, finished) => {
            if (err) console.log(err)
        })
    } else {
        console.log(req.body)
    }
})
Run Code Online (Sandbox Code Playgroud)

来自 AWS 的 POST 请求

-----------------
{}
{ host: 'myapp.us-west-2.elasticbeanstalk.com',
  'x-real-ip': '172.XXX.40.XXX',
  'x-forwarded-for': '54.240.XXX.XXX, 172.XXX.40.XXX',
  'content-length': '1604',
  'accept-encoding': 'gzip,deflate',
  'content-type': 'text/plain; charset=UTF-8',
  'user-agent': 'Amazon Simple Notification Service Agent',
  'x-amz-sns-message-id': '493b2a00-a99f-4cf3-ac9a-aad8ad6ee115',
  'x-amz-sns-message-type': 'SubscriptionConfirmation',
  'x-amz-sns-topic-arn': 'arn:aws:sns:us-west-2:4868XXXXXXXX:mysnstopic',
  'x-forwarded-port': …
Run Code Online (Sandbox Code Playgroud)

node.js amazon-sns express

2
推荐指数
1
解决办法
2983
查看次数

来自 AWS SNS(简单通知服务)的电子邮件中的 HTML

我有一项由网站用户触发的联系我们服务。

在此输入图像描述

每当用户发送消息时,都会向管理员发送一封电子邮件以通知新联系人。该电子邮件采用下面给出的 json 格式, 在此输入图像描述

有没有办法将其作为格式化电子邮件?我想出了一种方法,就是编写一个 lambda 来触发 SES。有更好的方法吗?

amazon-web-services amazon-sns amazon-ses

2
推荐指数
1
解决办法
8006
查看次数

在 Lambda 运行时代码中引用 ARN(在 CDK 堆栈中创建)

我有一个 CDK 堆栈,可以创建 lambda 和 SNS 主题。策略设置为允许 lambda 发布到 SNS 主题。

我很难在 lambda 运行时代码中指定主题 ARN,因为从技术上讲它尚未创建,只是在堆栈中。

如何在 Lambda 代码中引用主题 ARN,以便 lambda 发布到该主题?Lambda 是用 Python 编写的。我正在使用该fromAsset方法 ( https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-readme.html ) 在堆栈中指定 lambda 运行时代码。

sns = boto3.client('sns')
responce = sns.publish(
  TopicArn="arn would go here --- not sure what to put here w/ no arn",
  Message="my_message"
)
Run Code Online (Sandbox Code Playgroud)

amazon-sns aws-lambda aws-cdk

2
推荐指数
1
解决办法
3496
查看次数

AWS JDK 2创建队列并订阅主题

我正在使用 SNS / SQS 在 AWS 上工作,并且尝试在 SQS 主题上创建 SNS 订阅。我正在使用 AWS Java SDK 2。我可以正确创建主题和队列,我面临的问题是在主题和队列之间创建订阅时出现错误。下面是我的代码片段:

public SubscribeResponse subscribeQueue(String topicArn, String queueUrl){
    SubscribeRequest subscribeRequest = SubscribeRequest.builder()
            .topicArn(topicArn)
            .protocol("sqs")
            .endpoint(queueUrl)
            .returnSubscriptionArn(true).build();
    return getAmazonSNSClient().subscribe(subscribeRequest);
}
Run Code Online (Sandbox Code Playgroud)

以下是我收到的错误:

{ "message": "Internal Server Error: software.amazon.awssdk.services.sns.model.InvalidParameterException: Invalid parameter: SQS endpoint ARN (Service: Sns, Status Code: 400, Request ID: dabaeeb3-e77a-5873-861e-b8d0a7bf5c7f)" }
Run Code Online (Sandbox Code Playgroud)

有人能指出我做错了什么吗?

amazon-sqs amazon-sns aws-java-sdk-2.x

2
推荐指数
1
解决办法
2472
查看次数

CloudWatch 警报操作仅触发 SNS 一次

我创建了一个用于测试目的的 CloudWatch 警报。它检查 Kinesis Stream 上读取的字节数。如果1分钟内收到少于1个字节,则会触发警报并通过SNS发送电子邮件。因此,我在 1 分钟后收到电子邮件,但此后我就不再收到任何进一步的电子邮件。电子邮件通知是否只发送一次?在我的测试中,数据并不是一直在流动。因此,理想情况下,它应该每分钟发送电子邮件。正确的?

\n

amazon-web-services amazon-sns amazon-cloudwatch

2
推荐指数
1
解决办法
1834
查看次数

AWS Lambda SNS 发送主题两次

长话短说

编写 lambda 函数来执行一些数据库查询,然后向某些用户组发送电子邮件。

  • 为共享歌曲的每个群组发布 SNS 消息
  • 每个组都有自己的成员,因此有自己的一组电子邮件
  • 每个组的 SNS 主题发送两次。

会员收到该电子邮件两次。

该应用程序是一款音乐流媒体应用程序,用户可以在其中创建歌曲。他们还可以创建群组、邀请成员加入这些群组并向这些群组分享他们的歌曲。

这是通过 API 调用的 lambda:

  const shareWithGroup = async event => {
  const { songCuid, groupCuids } = JSON.parse(event.body);
  const shareSongDB = await query(
    sql.queryShareWithGroup(songCuid, groupCuids),
  ); //share to group in DB
  if (!shareSongDB) {
    return corsUtil.failureWithCors("Couldn't Share Song with group");
  }
  const song = await query(sql.queryRead(songCuid));
  if (!song) {
    return corsUtil.failureWithCors('Song doesnt exist');
  }
  const songTitle = song.rows[0].songTitle; //retrieve songTitle
  const promises = groupCuids.map(async groupCuid => { …
Run Code Online (Sandbox Code Playgroud)

node.js amazon-sns amazon-ses aws-lambda serverless

2
推荐指数
1
解决办法
1882
查看次数