如何从 Lambda 中的 CloudFormation 访问 Athena QueryString?
How to Access Athena QueryString From CloudFormation in Lambda?
AWS 加载的问题,但是有人知道在 Lambda 中访问 Athena 查询字符串(在 CloudFormation 中)的正确方法是什么吗?
我已经在 CloudFormation 中设置了 Athena NamedQuery 和 Lambda。抽象出一些更具体的项目细节,我的一般形式是:
MyQuery:
Type: AWS::Athena::NamedQuery
Properties:
Database: "mydatabase"
Name: "DataQuery"
QueryString: SELECT * FROM mydatabase
MyLambda:
Type: AWS::Serverless::Function
Properties:
Handler: 'handlers.migration_handler'
Runtime: python3.6
CodeUri:
Bucket: BATS::SAM::CodeS3Bucket
Key: BATS::SAM::CodeS3Key
Description: Migrates data from output of Athena query to S3
Policies:
- AmazonS3FullAccess
- AWSLambdaExecute
- AmazonAthenaFullAccess
Environment:
Variables:
MY_QUERY:
Ref: MyQuery
当我为 lambda 编写处理程序时,我想调用:
athena_client = boto3.client('athena')
response = athena_client.start_query_execution(
QueryString = os.environ['MY_QUERY']
ResultConfiguration = {'OutputLocation: 's3://my-bucket'}
)
但是,QueryString 需要是一个字符串,因此目前无法正常工作。我想访问 MY_QUERY 中的 QueryString 属性,我觉得我已经很接近了,但我不太确定如何完成最后一步。如有任何帮助,我们将不胜感激。
昨天弄明白了(或者更具体地说,我的队友弄明白了)。
Boto3 碰巧有另一个方法叫做 get_named_query(NamedQueryId)
,returns 一个字典形式为:
{
'NamedQuery': {
'Name': 'string',
'Description': 'string',
'Database': 'string',
'QueryString': 'string',
'NamedQueryId': 'string'
}
因此,当我将 lambda 处理程序修改为:
athena_client = boto3.client('athena')
query_info = athena_client.get_named_query(
NamedQueryId = os.environ['MY_QUERY']
)
response = athena_client.start_query_execution(
QueryString = query_info['NamedQuery']['QueryString']
ResultConfiguration = {'OutputLocation: 's3://my-bucket'}
)
AWS 加载的问题,但是有人知道在 Lambda 中访问 Athena 查询字符串(在 CloudFormation 中)的正确方法是什么吗?
我已经在 CloudFormation 中设置了 Athena NamedQuery 和 Lambda。抽象出一些更具体的项目细节,我的一般形式是:
MyQuery:
Type: AWS::Athena::NamedQuery
Properties:
Database: "mydatabase"
Name: "DataQuery"
QueryString: SELECT * FROM mydatabase
MyLambda:
Type: AWS::Serverless::Function
Properties:
Handler: 'handlers.migration_handler'
Runtime: python3.6
CodeUri:
Bucket: BATS::SAM::CodeS3Bucket
Key: BATS::SAM::CodeS3Key
Description: Migrates data from output of Athena query to S3
Policies:
- AmazonS3FullAccess
- AWSLambdaExecute
- AmazonAthenaFullAccess
Environment:
Variables:
MY_QUERY:
Ref: MyQuery
当我为 lambda 编写处理程序时,我想调用:
athena_client = boto3.client('athena')
response = athena_client.start_query_execution(
QueryString = os.environ['MY_QUERY']
ResultConfiguration = {'OutputLocation: 's3://my-bucket'}
)
但是,QueryString 需要是一个字符串,因此目前无法正常工作。我想访问 MY_QUERY 中的 QueryString 属性,我觉得我已经很接近了,但我不太确定如何完成最后一步。如有任何帮助,我们将不胜感激。
昨天弄明白了(或者更具体地说,我的队友弄明白了)。
Boto3 碰巧有另一个方法叫做 get_named_query(NamedQueryId)
,returns 一个字典形式为:
{
'NamedQuery': {
'Name': 'string',
'Description': 'string',
'Database': 'string',
'QueryString': 'string',
'NamedQueryId': 'string'
}
因此,当我将 lambda 处理程序修改为:
athena_client = boto3.client('athena')
query_info = athena_client.get_named_query(
NamedQueryId = os.environ['MY_QUERY']
)
response = athena_client.start_query_execution(
QueryString = query_info['NamedQuery']['QueryString']
ResultConfiguration = {'OutputLocation: 's3://my-bucket'}
)