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



我想使用 aws cli 创建一个 kinesis 分析应用程序。我使用此命令创建应用程序

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

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

我相信问题是您需要在KinesisStreamsInput部分中取出引号,或者您需要添加引号并对其进行转义。 文档不清楚哪个是正确的选项。

  1. 根据 AWS Kinesis Analytics CLI 参考 https://docs.aws.amazon.com/cli/latest/reference/kinesisanalytics/create-application.html,KinesisStreamsInput--inputs的语法应类似于为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 命令提示符需要双引号 (" "( 来将 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 于 Feb 6, 2018 发表评论

    我让它工作作为 -

    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 代表一起改进文档。

最新更新