如何:terraform snowflake 阶段凭据并使用 AWS IAM 角色 arn
How to : terraform snowflake stage credentials and use AWS IAM role arn
我正在尝试 Terraform snowflake_stage 并使用来自 IAM 角色的 arn 作为凭据,它也被地形化了。
雪花 SQL 在我使用时有效:
create stage dev
URL='s3://name_of_bucket/'
storage_integration = dev_integration
credentials=(AWS_ROLE='arn:aws:iam:999999999999:role/service-role-name')
encryption=(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')
FILE_FORMAT=DATABASE.PUBLIC.SCHEMA.FORMAT_NAME
COPY_OPTION=(ON_ERROR='CONTINUE' PURGE='FALSE' RETURN_FAILED_ONLY='TRUE');
但是当我尝试使用以下方法编写等效的 Terraform 资源“snowflake_stage”时:
resource "snowflake_stage" "stage" {
name = "dev"
url = "s3://name_of_bucket/"
storage_integration = "dev_integration"
schema = "public"
credentials = "AWS_ROLE='aws_iam_role.snowflake_stage.arn'"
encryption = "(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')
file_format = "DATABASE.PUBLIC.SCHEMA.FORMAT_NAME"
copy_options = "(ON_ERROR='CONTINUE' PURGE='FALSE' RETURN_FAILED_ONLY='TRUE')"
}
我得到:
SQL 编译错误:无效值 [不是 属性 列表:TOK_LIST] 参数 '{1}
加密值似乎需要“AWS_ROLE='..'”才有效。
我试过只使用 :
credentials = aws_iam_role.snowflake_stage.arn
但出现了一组不同的错误。
我如何结合:
credentials = "AWS_ROLE='
与
aws_iam_role.snowflake_stage.arn
然后附加 :
`)"
凭据值?
首先,您在 encryption
中缺少关闭 "
。应该是:
encryption = "(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')"
二、对于角色:
credentials = "AWS_ROLE='${aws_iam_role.snowflake_stage.arn}'"
这有点晚了,但加密应该是:
encryption = "TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key'"
而不是:
encryption = "(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')"
此外,只要您为其配置适当的角色和角色权限(S3、KMS 和 STS 策略文档),就可以单独使用存储集成
然后你可以摆脱加密和凭证字段。
我正在尝试 Terraform snowflake_stage 并使用来自 IAM 角色的 arn 作为凭据,它也被地形化了。 雪花 SQL 在我使用时有效:
create stage dev
URL='s3://name_of_bucket/'
storage_integration = dev_integration
credentials=(AWS_ROLE='arn:aws:iam:999999999999:role/service-role-name')
encryption=(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')
FILE_FORMAT=DATABASE.PUBLIC.SCHEMA.FORMAT_NAME
COPY_OPTION=(ON_ERROR='CONTINUE' PURGE='FALSE' RETURN_FAILED_ONLY='TRUE');
但是当我尝试使用以下方法编写等效的 Terraform 资源“snowflake_stage”时:
resource "snowflake_stage" "stage" {
name = "dev"
url = "s3://name_of_bucket/"
storage_integration = "dev_integration"
schema = "public"
credentials = "AWS_ROLE='aws_iam_role.snowflake_stage.arn'"
encryption = "(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')
file_format = "DATABASE.PUBLIC.SCHEMA.FORMAT_NAME"
copy_options = "(ON_ERROR='CONTINUE' PURGE='FALSE' RETURN_FAILED_ONLY='TRUE')"
}
我得到: SQL 编译错误:无效值 [不是 属性 列表:TOK_LIST] 参数 '{1}
加密值似乎需要“AWS_ROLE='..'”才有效。
我试过只使用 :
credentials = aws_iam_role.snowflake_stage.arn
但出现了一组不同的错误。
我如何结合:
credentials = "AWS_ROLE='
与 aws_iam_role.snowflake_stage.arn 然后附加 :
`)"
凭据值?
首先,您在 encryption
中缺少关闭 "
。应该是:
encryption = "(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')"
二、对于角色:
credentials = "AWS_ROLE='${aws_iam_role.snowflake_stage.arn}'"
这有点晚了,但加密应该是:
encryption = "TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key'"
而不是:
encryption = "(TYPE='AWS_SSE_KMS' KMS_KEY_ID='aws/key')"
此外,只要您为其配置适当的角色和角色权限(S3、KMS 和 STS 策略文档),就可以单独使用存储集成 然后你可以摆脱加密和凭证字段。