Terraform:验证错误...成员必须满足正则表达式模式:arn:aws:iam::

21

我正在尝试通过Kinesis数据流传输RDS,但出现以下错误:

botocore.exceptions.ClientError: 调用PutRecord操作时发生错误(ValidationException):检测到1个验证错误: 值'arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/rds-temp-leads-stream'未能满足成员必须满足正则表达式模式[a-zA-Z0-9_.-]+的限制条件。

我该怎么做才能修复这个问题?


import json
import boto3
from datetime import datetime

from pymysqlreplication import BinLogStreamReader
from pymysqlreplication.row_event import (
  DeleteRowsEvent,
  UpdateRowsEvent,
  WriteRowsEvent,
)

class DateTimeEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime):
            return o.isoformat()

        return json.JSONEncoder.default(self, o)

def main():
  mysql = {
      "host": "",
      "port":,
      "user": "",
      "passwd": "",
      "db": ""}
  kinesis = boto3.client("kinesis", region_name = 'us-west-2')

  stream = BinLogStreamReader(
    connection_settings = mysql,
    server_id=100,
    blocking = True,
    log_file='mysql-bin.000003',
    resume_stream=True,
    only_events=[DeleteRowsEvent, WriteRowsEvent, UpdateRowsEvent]) 
  for binlogevent in stream:
    for row in binlogevent.rows:
      print row
      event = {"schema": binlogevent.schema,
      "table": binlogevent.table,
      "type": type(binlogevent).__name__,
      "row": row
      }

      kinesis.put_record(StreamName="jhgjh", Data=json.dumps(event, cls=DateTimeEncoder), PartitionKey="default")
      #print json.dumps(event)

if __name__ == "__main__":
   main()

3个回答

17

将 'arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/rds-temp-leads-stream' 从流名称中删除。只需在那里放置流的名称,例如 "rds-temp-leads-stream"。


嗨@Ekta,你知道KCL库是否也支持从DynamoDB Streams读取吗?如果是的话,dynamoDB流只有ARN而没有名称。在这种情况下,如何配置Kinesis Consumer设置? - Jeet Banerjee
非常奇怪。我没有故意添加任何东西,只是执行了以下命令:sam init sam build sam deploy --guided 然后遇到了这个错误。而且这种情况在所有的 sam 模板中都发生了。 - Xin

1

根据错误:

检测到1个验证错误:值“arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/rds-temp-leads-stream”在“streamName”上未能满足约束条件:成员必须满足正则表达式模式:[a-zA-Z0-9_.-]+

被强调的值:arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/rds-temp-leads-stream不符合正则表达式[a-zA-Z0-9_.-]+,导致了验证错误。

这是因为您不需要添加完整的ARN,只需添加流的名称即可。例如 rds-temp-leads-stream

我没有在代码中看到它,但很可能是这一行出现了错误:

kinesis.put_record(StreamName="jhgjh", Data=json.dumps(event, cls=DateTimeEncoder), PartitionKey="default")

“StreamName”应遵循上述相同的模式。参考资料如下: https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html


0
对于我的情况,我还必须像这样删除地址中的子文件夹:

不正确

bucket='s3://image-video/image/'
photo='scene_academy.jpg'

client=boto3.client('rekognition')
response = client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}},
        MaxLabels=10)

正确

bucket='image-video'
photo='image/scene_academy.jpg'

client=boto3.client('rekognition')
response = client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}},
        MaxLabels=10)

运行环境:AWS S3 存储桶


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接