如何将访问密钥和秘密密钥 shell 变量传递给 Redshift 复制命令
Posted
技术标签:
【中文标题】如何将访问密钥和秘密密钥 shell 变量传递给 Redshift 复制命令【英文标题】:How to Pass Access key and Secret Key shell variables to Redshift Copy Command 【发布时间】:2017-02-01 14:29:20 【问题描述】:我正在尝试通过 SQL 脚本使用 Redshift Copy 命令,为此我需要通过 shell 变量传递访问密钥和秘密密钥。但由于 Redshift Copy Command 的格式,我无法传递 shell 变量。
COPY $REDSHIFT_SCHEMA_NAME.$REDSHIFT_TABLE_NAME FROM $S3_SOURCE credentials 'aws_access_key_id=$AWS_ACCESS_KEY_ID;aws_secret_access_key=$AWS_SECRET_ACCESS_KEY' delimiter '$DELIMITER' COMPUPDATE OFF STATUPDATE OFF;
我面临的问题是 AWS_SECRET_ACCESS_KEY 和 AWS_ACCESS_KEY_ID 无法解决,因为它们都在 ' ' 单引号中。
关于使用命令作为
COPY $REDSHIFT_SCHEMA_NAME.$REDSHIFT_TABLE_NAME_BACKLOG FROM $S3_SOURCE credentials aws_access_key_id='$AWS_ACCESS_KEY_ID';aws_secret_access_key='$AWS_SECRET_ACCESS_KEY' delimiter '$DELIMITER' COMPUPDATE OFF STATUPDATE OFF;
复制命令的格式不正确。 有没有其他解决办法?
【问题讨论】:
【参考方案1】:亚马逊提供了非常好的文档。 我通过谷歌搜索找到了您要查找的内容:'Redshift shell copy'
这是一篇带有工作 shell 脚本的文章:
https://aws.amazon.com/articles/1143507459230804
我用过这个,它对我有用:
#!/bin/bash
set -eu
AWS_ACCESS_KEY_ID='my_access_key'
AWS_SECRET_ACCESS_KEY='my_secret_access_key'
REDSHIFT_SCHEMA_NAME='redshift_schema_name'
REDSHIFT_TABLE_NAME_BACKLOG='redshift_table_name_backlog'
S3_SOURCE='s3_source'
DELIMITER='delimiter'
cmd="COPY $REDSHIFT_SCHEMA_NAME.$REDSHIFT_TABLE_NAME_BACKLOG FROM $S3_SOURCE credentials aws_access_key_id='$AWS_ACCESS_KEY_ID';aws_secret_access_key='$AWS_SECRET_ACCESS_KEY' delimiter '$DELIMITER' COMPUPDATE OFF STATUPDATE OFF;"
echo $cmd
【讨论】:
我正在寻找的是将 shell 变量替换为脚本文件,这些变量不会在脚本文件中解析,而它们会在 bash 上直接使用它们来解析 能否提供完整的shell脚本? 我有 java 代码,它将属性文件作为输入,脚本文件作为输入并执行 sql 查询。我可以通过属性文件传递变量。由 sql 脚本文件访问,因为 'aws_access_key_id=$AWS_ACCESS_KEY_ID;aws_secret_access_key=$AWS_SECRET_ACCESS_KEY' 在单引号中,因此无法从属性文件中解析变量 其中一种方式可能是 COPY_CREDENTIAL_PREFIX=\'aws_access_key_id=XXXXX ";" aws_secret_access_key=XXXX \' 并完全使用 $COPY_CREDENTIAL_PREFIX 但我试图避免这种方法 如果您使用带有两个文件输入的 Java,为什么不使用模板引擎而不是 shell 替换?以上是关于如何将访问密钥和秘密密钥 shell 变量传递给 Redshift 复制命令的主要内容,如果未能解决你的问题,请参考以下文章
如何将Azure管道变量传递给AzureResourceManagerTemplateDeployment @ 3任务使用的ARM模板?
如何使用 API 密钥和秘密保护 Spring Boot API
如何使用 process.env 将环境变量中的 API 密钥传递给 Ember CLI?