bash 変数で AWS cli を正常に動作させることはできません。 AWS cliコマンドはJSON文字列をパラメータとして受け入れます。しかし、このjson文字列で私が使用する変数$SCHEMA_DEFINITION
自体はJSON文字列です。何らかの理由で$SCHEMA_DEFINITION
JSONから二重引用符が削除され、無効になりました。これらの参照を保存して有効なAWSコマンドを生成するにはどうすればよいですか?
aws glue create-schema --cli-input-json '{"RegistryId": {"RegistryName": "hxp-schema-registry"},"SchemaName": "'$modelClassName'","DataFormat": "AVRO","Compatibility": "FULL_ALL","SchemaDefinition": "'"$SCHEMA_DEFINITION"'"}'
エラーが発生します。
An error occurred (InvalidInputException) when calling the CreateSchema operation: Schema definition of AVRO data format is invalid: Unexpected character ('n' (code 110)): was expecting double-quote to start field name
at [Source: (String)"{name:hello}"
変数を設定する方法は次のとおりです。SCHEMA_DEFINITION={"name":"Hello"}
ベストアンサー1
生成するJSONには、キー値でJSON文字列でエンコードされたJSONオブジェクトが含まれている必要がありますSchemaDefinition
。また、modelClassName
シェル変数の値をキー値として含めたいと思いますSchemaName
。
jq
以下を使用してJSONを作成できます。
json=$(
jq -n -c \
--arg SchemaName "$modelClassName" \
--arg SchemaDefinition '{"name": "Hello"}' \
'{"RegistryId":{"RegistryName":"hxp-schema-registry"},"DataFormat":"AVRO","Compatibility":"FULL_ALL"} + $ARGS.named'
)
または、読みやすくするために
json=$(
jq -n -c \
--arg SchemaName "$modelClassName" \
--arg SchemaDefinition '{"name": "Hello"}' '
{
"RegistryId": {
"RegistryName": "hxp-schema-registry"
},
"DataFormat": "AVRO",
"Compatibility": "FULL_ALL"
} + $ARGS.named'
)
でも、
schema_json=$(
jq -n -c --arg name 'hello' '$ARGS.named'
)
json=$(
jq -n -c \
--arg SchemaName "$modelClassName" \
--arg SchemaDefinition "$schema_json" '
{
"RegistryId": {
"RegistryName": "hxp-schema-registry"
},
"DataFormat": "AVRO",
"Compatibility": "FULL_ALL"
} + $ARGS.named'
)
これは、スキーマ定義のJSONオブジェクトとモデルクラス名をJSON文字列に正しくエンコードし、それをJSONドキュメントの適切な場所に挿入します。
次に、コマンドを呼び出します。
aws glue create-schema --cli-input-json "$json"