在哪里保存用于Google Cloud Composer连接设置的服务帐户密钥文件?

时间:2018-06-06 00:02:23

标签: google-cloud-platform airflow google-cloud-composer

我正在尝试使用服务帐户密钥在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路径,应该将其放在何处?

6 个答案:

答案 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/' 。有关详细信息,请参阅链接 - https://cloud.google.com/composer/docs/concepts/cloud-storage