当前位置: 首页 > 知识库问答 >
问题:

如何通过python脚本使用SNS API设置SetPlatformApplicationAttributes

尉迟墨竹
2023-03-14

我试图通过python使用boto3库为SNS主题设置Platfrom应用程序属性。

以下是脚本片段

client1 = boto3.client('sns',region_name="us-east-1",aws_access_key_id=access_key,aws_secret_access_key=secret_access_key)

def getSNSattr():
    response = client1.set_platform_application_attributes(
    PlatformApplicationArn='arn:aws:sns:us-east-1:63124104179:testTop1',
    Attributes={
        'key':'SuccessFeedbackSampleRate',
        'value':'100'
    }
    )

下面是我得到的错误。aws文档没有python的例子,也没什么帮助。我不确定我错过了什么。请帮帮忙

*Traceback (most recent call last):
  File "sns2.py", line 20, in <module>
    getSNSattr()
  File "sns2.py", line 15, in getSNSattr
    'key': 'SuccessFeedbackSampleRate'
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 317, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 615, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.InvalidParameterException: An error occurred (InvalidParameter) when calling the SetPlatformApplicationAttributes operation: Invalid parameter: PlatformApplicationArn Reason: Wrong number of slashes in relative portion of the ARN.*

AWS文档供参考:https://docs . AWS . Amazon . com/SNS/latest/API/API _ setplatformapplicationattributes . html

https://boto3.readthedocs.io/en/latest/reference/services/sns.html#SNS.Client.set_platform_application_attributes

共有1个答案

闽哲
2023-03-14

您在PlatformApplicationArn中放置的ARN不是平台ARN,而是主题ARN。如果要设置主题的属性,请考虑使用SetTopicAttributes API。我还将使用双引号,因为属性是JSON格式的。

所有这些都可以使用 AWS CLI 轻松进行测试:

$ aws sns get-platform-application-attributes --platform-application-arn arn:aws:sns:us-east-1:123456789012:app/GCM/My_App

{
    "Attributes": {
        "FailureFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSFailureFeedback",
        "EventDeliveryFailure": "arn:aws:sns:us-east-1:123456789012:Test",
        "EventEndpointDeleted": "arn:aws:sns:us-east-1:123456789012:Test",
        "EventEndpointUpdated": "arn:aws:sns:us-east-1:123456789012:Test",
        "Enabled": "true",
        "EventEndpointCreated": "arn:aws:sns:us-east-1:123456789012:Test",
        "SuccessFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSSuccessFeedback"
    }
}

$ aws sns set-platform-application-attributes --platform-application-arn arn:aws:sns:us-east-1:123456789012:app/GCM/My_App --attributes '{"SuccessFeedbackSampleRate": "100"}'

$ aws sns get-platform-application-attributes --platform-application-arn arn:aws:sns:us-east-1:123456789012:app/GCM/My_App

{
    "Attributes": {
        "FailureFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSFailureFeedback",
        "EventDeliveryFailure": "arn:aws:sns:us-east-1:123456789012:Test",
        "EventEndpointDeleted": "arn:aws:sns:us-east-1:123456789012:Test",
        "SuccessFeedbackSampleRate": "100",
        "EventEndpointUpdated": "arn:aws:sns:us-east-1:123456789012:Test",
        "Enabled": "true",
        "EventEndpointCreated": "arn:aws:sns:us-east-1:123456789012:Test",
        "SuccessFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSSuccessFeedback"
    }
}

如果要为应用程序设置属性,请将SetPlatformApplicationAttributes API与应用程序ARN一起使用;如果要为主题设置属性,则将SetTopicAttribute API与主题ARN一起。还使用双引号,因为属性是JSON格式的。

代码应该类似于:

def getSNSattr():
    response = client1.set_platform_application_attributes(
    PlatformApplicationArn="arn:aws:sns:us-east-1:63124104179:app/GCM/testApp1",
    Attributes={
        "SuccessFeedbackSampleRate":"100"
    }
    )
 类似资料:
  • 问题内容: 我正在尝试自动进行SFTP访问的设置。该脚本以具有sudo权限且没有密码的用户身份运行。 我可以这样创建一个用户: 接下来,我需要设置用户的密码,但是我不知道怎么做。这是我尝试过的。 在我的python程序中,它没有任何作用,在交互式解释器中,它在第一行之后锁定。 最好的方法是什么? 我在Ubuntu lucid上运行python 2.6。 问题答案: 的文档说,如果要通过参数将数据发

  • 问题内容: 如何通过PHP脚本设置cron作业。 问题答案: 这将添加一个每天上午9:30运行的脚本。 如果从Web服务器运行此脚本,可能会遇到权限问题。为了解决这个问题,我建议使用另一种方法。 这是一种可能的解决方案。创建需要运行的脚本列表。您可以将其保存在文本文件或数据库中。创建一个脚本来读取此列表,并每分钟或每5分钟(使用cronjob)运行它。您的脚本将需要足够聪明,以决定何时运行脚本列表

  • 问题内容: 我正在尝试设置脚本以增加Xcode项目的内部版本号。我进行了一次API调用以获取当前的内部版本号,然后我希望对其进行递增,然后将该新的版本号用作环境变量,以便Xcode插件可以使用它。 我安装了EnvInject插件,但是我不知道如何将var从我的shell脚本中获取到环境变量中。 这设置为我需要的值,但是如何将其分配给环境变量,以便以后在工作中访问它? 问题答案: 添加一个构建步骤以

  • 问题内容: 我有一些需要环境变量的仪器,我想从python代码中自动设置。所以我尝试了几种方法来实现它,但是没有一个成功。这里有些例子: 我在我的python脚本中插入以下代码 os.system(“export ENV_VAR=/some_path”) 我创建了bash脚本(env.sh)并从python运行它: export ENV_VAR=some_path os.system(“sourc

  • 问题内容: 我知道如何在/ etc / profile和环境变量中进行设置。 但是,如果我想在脚本中进行设置怎么办?是导入os,sys吗?我该怎么做? 问题答案: 您没有设置,而是向中添加条目。这是应该在其中搜索Python软件包的目录列表,因此您只需将目录追加到该列表即可。 实际上,是通过分割路径分隔符上的值来初始化的(在类似Linux的系统上,在Windows上)。 您也可以使用来添加目录,该

  • 问题内容: 我尝试执行以下操作(我的jar和python文件都在同一目录中): 和 无论是工作过。因此,我当时以为应该改用Jython,但我认为必须有一种更简单的方法来通过python执行jar文件。 你知道我可能做错了什么吗?或者,是否还有其他网站可以进一步研究我的问题? 问题答案: 我将以这种方式使用子流程: 但是,如果你有一个正确配置的,你应该能够直接运行jar,因为你写的。 那么,这正是您