我有一个用例,我想将单个 SQS 订阅到两个 SNS 主题。因此,发布到任何 SNS 的任何消息都应该在 SQS 中可用。所以我的问题是我们可以在一个sqs上订阅两个SNS主题吗?
任何帮助将不胜感激。
我在尝试创建 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) 我正在尝试创建一个 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
将主题附加到 SNS 应用程序的“端点已更新”可配置主题时,我遇到了一些意外行为。根据 AWS 关于SNS 应用程序事件的文档,当平台端点已更新为禁用或令牌已更改时,我应该会收到有关我配置的主题的事件。
就我而言,我有一个订阅此主题的 lambda 函数,然后通过调用 AWS 的 javascript sdk 检索平台端点的属性,SNS.getEndpointAttributes以便我可以检查哪些属性已更改,以删除端点或更新持久存储中的关联令牌。然而,此调用返回端点,从而Enabled = true阻止我采取纠正措施。但是,如果我查看 AWS SNS 控制台,我可以看到端点已被禁用为Enabled = false。
其他人是否也遇到过类似的不一致问题?如果有,解决这些问题的最佳做法是什么?感谢您的任何意见!
我正在尝试设置对 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) 我有一个 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) 我正在使用 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)
有人能指出我做错了什么吗?
我创建了一个用于测试目的的 CloudWatch 警报。它检查 Kinesis Stream 上读取的字节数。如果1分钟内收到少于1个字节,则会触发警报并通过SNS发送电子邮件。因此,我在 1 分钟后收到电子邮件,但此后我就不再收到任何进一步的电子邮件。电子邮件通知是否只发送一次?在我的测试中,数据并不是一直在流动。因此,理想情况下,它应该每分钟发送电子邮件。正确的?
\n编写 lambda 函数来执行一些数据库查询,然后向某些用户组发送电子邮件。
会员收到该电子邮件两次。
该应用程序是一款音乐流媒体应用程序,用户可以在其中创建歌曲。他们还可以创建群组、邀请成员加入这些群组并向这些群组分享他们的歌曲。
这是通过 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) amazon-sns ×10
aws-lambda ×3
amazon-ses ×2
amazon-sqs ×2
node.js ×2
amazon-ec2 ×1
amazon-s3 ×1
aws-cdk ×1
aws-sdk-js ×1
express ×1
serverless ×1
terraform ×1