我正在尝试使用服务帐户密钥在Google Cloud Composer中设置Google Cloud Platform连接。所以我创建了一个GCS存储桶并将服务帐户密钥文件放入存储桶中。密钥存储在JSON中。在密钥文件路径字段中,我指定了一个GCS存储桶,并在密钥文件JSON字段中指定了文件名。范围是https://www.googleapis.com/auth/cloud-platform。
尝试使用此连接启动Dataproc群集时,出现无法找到JSON文件的错误。
查看错误消息,代码尝试使用以下方法解析文件:
with open(filename, 'r') as file_obj
显然无法使用GCS存储桶路径。
所以我的问题是,如果无法将此服务帐户密钥文件放入GCS路径,应该将其放在何处?
答案 0 :(得分:3)
我假设您希望您的操作员使用与Composer运行所在的默认自动生成的计算帐户不同的服务帐户。
docs表示您可以为服务帐户添加新的Airflow Connection,其中包括将整个JSON密钥文件复制粘贴到Airflow Connection配置中(选择Keyfile JSON
后, Google Cloud Platform
连接类型)。
答案 1 :(得分:1)
这对我来说没什么意义。我不会使用Google Cloud,所以可能只是我缺乏知识:
如果您正在尝试建立与GCP的连接,那么如何将您的凭据存储在GCP中并期望从您的气流服务器进行连接?鸡肉和鸡蛋的东西。
查看气流回购中的gcp_api_base_hook.py
,看起来它希望您在连接的额外json属性和逻辑中指定key_path
和/或keyfile_dict
如何连接是here
答案 2 :(得分:1)
在您的Extra字段中添加以下内容:
import React, { Component } from 'react';
import './App.css';
class Todos extends React.Component {
constructor(props) {
super(props);
this.state = {
error: null,
isLoaded: false,
posts: [],
singleLoaded: false,
singlepost: []
}
this.fetchposts = this.fetchposts.bind(this);
}
fetchposts(){
fetch("http://smashingdevs.com/wp-json/wp/v2/posts/")
.then((response) => {
return response.json();
})
.then((posts) => {
this.setState({
isLoaded: true,
posts: posts
});
});
}
render() {
let container;
if(this.state.isLoaded){
container = <Allposts posts={this.state.posts}/>;
}else if(this.state.singleLoaded){
container = <Singleposts />;
}
return (
<div>
<h2>Hello there</h2>
<button onClick={this.fetchposts}>
fetch posts
</button>
{container}
</div>
);
}
}
class Allposts extends React.Component{
constructor(props){
super(props);
}
gotopost(){}
render(){
return (<div className="row mt-5">
{
this.props.posts.map(function(post){
return <div className="col-md-6 mb-2" key={post.id}>
<div className="card" >
// Problem is here on onClick
<a href={post.link} onClick={this.gotopost.bind(this)} className="btn btn-primary">Go somewhere</a>
</div>
</div>
})
}
</div>
)
}
}
class Singleposts extends React.Component{
}
export default Todos;
答案 3 :(得分:0)
Cloud Composer应该为您设置一个默认连接,不需要您指定JSON密钥。对我来说,它适用于GCS和BigQuery,而无需进行任何其他工作。
如果您创建自己的服务帐户,则将JSON密钥复制到创建的作曲家存储桶中。该文件/路径是您在extras字段中使用的文件/路径。我认为Composer使用gs:或gcs:挂载点为文件系统添加前缀。存储桶中的Airflow.cfg文件中应该有对此的引用。
此刻我没有一个人告诉你,所以我在记忆中工作。
答案 4 :(得分:0)
由于Cloud Composer位于GKE群集中,因此您可以将服务帐户设置为kubernetes secret,那么您应该可以将其与Kubernetes Operator结合使用
答案 5 :(得分:0)
Composer 实例创建一个 GCS 存储桶,其中存储所有 dag 和插件。您需要将 json 文件保存在数据文件夹中,然后将路径作为映射位置 ex '/home/airflow/gcs/data/