使用aws cli创建Kinesis Analytics应用程序

问题描述 投票:0回答:1

我想使用aws cli创建运动分析应用程序。我使用此命令来创建应用程序

aws kinesisanalytics create-application --application-name smartfactorytest1 --application-code "CREATE OR REPLACE STREAM DESTINATION_SQL_STREAM ( "device_serial" VARCHAR(16), "uploadRate"  INTEGER, "downloadRate" INTEGER);
CREATE OR REPLACE PUMP "STREAM_PUMP" 
    AS INSERT INTO DESTINATION_SQL_STREAM
SELECT STREAM  "device_serial",  "uploadRate", "downloadRate"
    FROM SOURCE_SQL_STREAM_001
-- LIKE compares a string to a string pattern (_ matches all char, % matches substring)
-- SIMILAR TO compares string to a regex, may use ESCAPE
    WHERE "uploadRate" >20000" --inputs NamePrefix="SOURCE_SQL_STREAM",KinesisStreamsInput={ResourceARN="sourcearn",RoleARN="rolearn"}

但我收到此错误

invalid type for parameter Inputs[0].KinesisStreamsInput, value: ResourceARN=string, type: <class 'str'>, valid types: <class 'dict'>

有人可以告诉我我做错了什么吗?任何帮助,将不胜感激。

amazon-web-services aws-cli amazon-kinesis amazon-kinesis-analytics
1个回答
0
投票

我相信问题是您需要在KinesisStreamsInput部分中删除引号,或者需要添加引号并将其转义。该文档尚不清楚哪个是正确的选项。

  1. 根据AWS Kinesis Analytics CLI参考https://docs.aws.amazon.com/cli/latest/reference/kinesisanalytics/create-application.html--inputsKinesisStreamsInput的语法应类似于为KinesisStreamsOutput提供的示例:

    Name=string,KinesisStreamsOutput={ResourceARN=string,RoleARN=string},...
    

    这意味着删除sourcearnrolearn周围的引号。但是,文档尚不清楚在所有情况下都引用CLI语法。

  2. 如果不起作用,根据此AWS CLI使用指南页面https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html,它会根据您的操作系统指定添加引号并转义相关的引号...

    “ Linux或macOS

    使用单引号('')来封装JSON数据结构,如以下示例所示。您不必对JSON字符串中嵌入的双引号进行任何特殊处理。

    aws ec2 run-instances --image-id ami-12345678 --block-device-mappings '[{"DeviceName":"/dev/sdb","Ebs":{"VolumeSize":20,"DeleteOnTermination":false,"VolumeType":"standard"}}]'
    

    PowerShell

    PowerShell需要单引号('')来包围JSON数据结构。另外,由于双引号在PowerShell中具有特殊含义,因此必须使用反斜杠()来转义JSON结构中的每个双引号(“),如以下示例所示。

    PS C:\> aws ec2 run-instances --image-id ami-12345678 --block-device-mappings '[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]'
    

    Windows命令提示符

    Windows命令提示符需要双引号(“”)来包围JSON数据结构。另外,为防止命令处理器错误解释JSON中嵌入的双引号,还必须对JSON数据结构本身中的每个双引号(“)进行转义(以反斜杠[\]字符开头),如下所示例如。

    C:\> aws ec2 run-instances --image-id ami-12345678 --block-device-mappings "[{\"DeviceName\":\"/dev/sdb\",\"Ebs\":{\"VolumeSize\":20,\"DeleteOnTermination\":false,\"VolumeType\":\"standard\"}}]"
    

    仅不将最外面的双引号引起来。“

  3. 此链接还引用了Windows上需要转义的引号,并且正在使用kinesisanalytics命令:https://github.com/aws/aws-cli/issues/3103

    “ Rishi74744于2018年2月6日发表评论]

    我让它作为-

    aws kinesisanalytics add-application-reference-data-source --endpoint https://kinesisanalytics.us-east-1.amazonaws.com --region us-east-1 --application-name alerts --reference-data-source "{\"TableName\":\"DeviceData\",\"S3ReferenceDataSource\":{\"BucketARN\":\"arn: aws: s3: : : bucket-name\",\"FileKey\":\"device.csv\",\"ReferenceRoleARN\":\"arn: aws: iam: : account-id: role/role-name\"},\"ReferenceSchema\":{\"RecordFormat\":{\"RecordFormatType\":\"CSV\",\"MappingParameters\":{\"CSVMappingParameters\":{\"RecordRowDelimiter\":\"\n\",\"RecordColumnDelimiter\":\", \"}}},\"RecordEncoding\":\"UTF-8\",\"RecordColumns\":[{\"Name\":\"key1\",\"SqlType\":\"VARCHAR(64)\"},{\"Name\":\"key2\",\"SqlType\":\"VARCHAR(64)\"}]}}" --current-application-version-id 2
    

    但是应该在文档中提及。“

  4. 一个注意:最好使用JSON文件作为输入,而改用以下语法:--cli-input-json file://input.json。这在《 AWS Kinesis CLI命令参考》(第一个链接,在1.下)中有所引用,并且在上面的GitHub链接中也提到了。这也是大多数AWS Kinesis文档使用的方法。例如,Kinesis Analytics中用于不同目的的JSON文件:https://docs.aws.amazon.com/kinesisanalytics/latest/dev/how-it-works-input.html

请让我知道有效的方法,我将与我的AWS代表一起改善文档。

© www.soinside.com 2019 - 2024. All rights reserved.