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

Posted

技术标签:

【中文标题】Terraform:验证错误...成员必须满足正则表达式模式:arn:aws:iam::【英文标题】:Terraform: Validation error ... Member must satisfy regular expression pattern: arn:aws:iam:: 【发布时间】:2019-09-17 16:57:19 【问题描述】:

我正在尝试通过 kinesis 数据流传输 rds,但它给了我这个错误:

botocore.exceptions.ClientError:发生错误 (ValidationException) 调用 PutRecord 操作时:1 检测到验证错误:值 'arn:aws:kinesis:us-west-2:xxxxxxxxx:stream/rds-temp-leads-stream' 在 “streamName”未能满足约束:成员必须满足常规 表达模式:[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()

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

根据错误:

检测到 1 个验证错误:“streamName”处的值“arn:aws:kinesis:us-west-2:xxxxxxxxxx:stream/rds-temp-leads-stream”未能满足约束:成员必须满足正则表达式模式:[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

【讨论】:

【参考方案3】:

就我而言,我还必须像这样删除地址中的子文件夹:

不正确

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 存储桶

【讨论】:

以上是关于Terraform:验证错误...成员必须满足正则表达式模式:arn:aws:iam::的主要内容,如果未能解决你的问题,请参考以下文章

编写一条正则,用来验证此规则:一个6~16位的字符串,必须同时包含有大小写字母和数字

Terraform 参数必须是地图或对象,得到“字符串”

正则表达式验证密码强度

正则表达式验证密码强度

Terraform 上的 Azure 应用服务自动缩放错误

Review系列正则