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'>

谁能告诉我我做错了什么?任何帮助,将不胜感激。

4

1 回答 1

1

我认为问题在于您需要在该部分中取出引号KinesisStreamsInput,或者您需要添加引号并将其转义。该文档不清楚哪个是正确的选项。

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

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

    这意味着删除您的sourcearn和周围的引号rolearn。但是,文档并不清楚这在所有情况下都指的是 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 需要单引号 (' ') 将 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 代表一起改进文档。

于 2020-02-05T21:38:27.920 回答