如何将参数传递给 CloudFormation YAML 中的 Glue 作业?
How do I pass arguments to a Glue job in CloudFormation YAML?
您可以通过 --arguments
参数将参数传递给 AWS Glue 作业(参见 here)。
CloudFormation documentation 表示 DefaultArguments 是 "UTF-8 string–to–UTF-8 string key-value pairs" 并且它们的类型是 "JSON object"。由于 YAML 是 JSON 的超集,我希望能够在 (YAML) CloudFormation 模板中传递这样的参数:
DefaultArguments:
"--arguments": {"--test_argument": "foo"}
但是,它在 CloudFormation 部署期间引发此错误:
Property validation failure: [Value of property {/DefaultArguments/--arguments=} does not match type {String}]
如何正确指定值?
键 --arguments
的值需要是一个字符串,但你实际上给它一个映射(或者在 JSON 中 - 说一个对象),因为它以 {
.您应该引用该值,因为您在值中有双引号,所以最好用单引号:
DefaultArguments:
"--arguments": '{"--test_argument": "foo"}'
(您需要通过放置两个单引号来转义的值中任何现有的单引号)
如果您的 JSON 更复杂,使用折叠式标量可能会更好。其中 {
也没有特殊含义,并且(单个)换行符后跟 space 被单个 space 替换。因此,以下加载与上述解决方案相同的数据:
DefaultArguments:
"--arguments": >
{"--test_argument":
"foo"}
当然,由于 YAML (1.2) 是 JSON 的超集,glue
可以很容易地假设一个值已经被解析,如果它不是一个字符串,但它似乎没有是那么聪明,总是期待字符串形式的 JSON。
传递多个参数的正确方式是
DefaultArguments:
"--argument1": value1
"--argument2": value2
然后在作业中访问它们(例如在 Python 中),如下所示:
from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['argument1', 'argument2'])
print args['argument1']
print args['argument2']
让我感到困惑的是,为了使用 AWS CLI 传递参数,您使用显式 --arguments='--argument1="value1"'
结构,但在 CloudFormation 中,您一个一个地指定参数。
您可以通过 --arguments
参数将参数传递给 AWS Glue 作业(参见 here)。
CloudFormation documentation 表示 DefaultArguments 是 "UTF-8 string–to–UTF-8 string key-value pairs" 并且它们的类型是 "JSON object"。由于 YAML 是 JSON 的超集,我希望能够在 (YAML) CloudFormation 模板中传递这样的参数:
DefaultArguments:
"--arguments": {"--test_argument": "foo"}
但是,它在 CloudFormation 部署期间引发此错误:
Property validation failure: [Value of property {/DefaultArguments/--arguments=} does not match type {String}]
如何正确指定值?
键 --arguments
的值需要是一个字符串,但你实际上给它一个映射(或者在 JSON 中 - 说一个对象),因为它以 {
.您应该引用该值,因为您在值中有双引号,所以最好用单引号:
DefaultArguments:
"--arguments": '{"--test_argument": "foo"}'
(您需要通过放置两个单引号来转义的值中任何现有的单引号)
如果您的 JSON 更复杂,使用折叠式标量可能会更好。其中 {
也没有特殊含义,并且(单个)换行符后跟 space 被单个 space 替换。因此,以下加载与上述解决方案相同的数据:
DefaultArguments:
"--arguments": >
{"--test_argument":
"foo"}
当然,由于 YAML (1.2) 是 JSON 的超集,glue
可以很容易地假设一个值已经被解析,如果它不是一个字符串,但它似乎没有是那么聪明,总是期待字符串形式的 JSON。
传递多个参数的正确方式是
DefaultArguments:
"--argument1": value1
"--argument2": value2
然后在作业中访问它们(例如在 Python 中),如下所示:
from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['argument1', 'argument2'])
print args['argument1']
print args['argument2']
让我感到困惑的是,为了使用 AWS CLI 传递参数,您使用显式 --arguments='--argument1="value1"'
结构,但在 CloudFormation 中,您一个一个地指定参数。