应用程序默认凭据不适用于Mac Google Cloud Storage中的环境变量设置 [英] The Application Default Credentials are not available with environment variable setup in mac Google Cloud Storage

查看:106
本文介绍了应用程序默认凭据不适用于Mac Google Cloud Storage中的环境变量设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 The Application Default Credentials are not available.
 They are available if running in Google Compute Engine.
 Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials

请继续获取上述错误,而我使用以下命令在本地计算机上设置了环境变量

Keep getting the above error instead I have set the environment variable on my local machine with the below command

export GOOGLE_APPLICATION_CREDENTIALS="/Users/macbook/Downloads/fetebird-2b6fa8261292.json"

如果我在终端上使用以下命令检查环境变量的路径,则确实会显示该变量的路径

If I check the path for the environment variable with the below command on terminal it does show the path of the variable

echo $GOOGLE_APPLICATION_CREDENTIALS

在Micronaut应用程序上,我试图在启动期间创建一个存储桶

On Micronaut application I am trying to create a storage bucket during the startup

@Singleton
public class StartUp implements ApplicationEventListener<StartupEvent> {
    private final GoogleCloudStorageService googleCloudStorageService;

    public StartUp(GoogleCloudStorageService googleCloudStorageService) {
        this.googleCloudStorageService = googleCloudStorageService;
    }

    @Override
    public void onApplicationEvent(StartupEvent event) {
        try {
            this.googleCloudStorageService.createBucketWithStorageClassAndLocation().subscribe();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在服务上

@Singleton
public record GoogleCloudStorageService(GoogleCloudStorageConfiguration googleUploadObjectConfiguration, GoogleCredentialsConfiguration googleCredentialsConfiguration) {

    private static final Logger LOG = LoggerFactory.getLogger(GoogleCloudStorageService.class);

    public Observable<Void> createBucketWithStorageClassAndLocation() throws IOException {
        GoogleCredentials credentials = GoogleCredentials.getApplicationDefault(); // fromStream(new FileInputStream(googleCredentialsConfiguration.getLocation()));
        Storage storage = StorageOptions.newBuilder().setCredentials(credentials).setProjectId(googleUploadObjectConfiguration.projectId()).build().getService();
        StorageClass storageClass = StorageClass.COLDLINE;
        try {
            Bucket bucket =
                    storage.create(
                            BucketInfo.newBuilder(googleUploadObjectConfiguration.bucketName())
                                    .setStorageClass(storageClass)
                                    .setLocation(googleUploadObjectConfiguration.locationName())
                                    .build());
            LOG.info(String.format("Created bucket %s in %s with storage class %s", bucket.getName(), bucket.getLocation(), bucket.getStorageClass()));
        } catch (Exception ex) {
            LOG.error(ex.getMessage());
        }
        return Observable.empty();
    }
}

运行应用程序时环境变量为NULL

The environment variable is NULL while running the application

System.out.println(System.getenv("GOOGLE_APPLICATION_CREDENTIALS"))

GoogleCredentials凭据= GoogleCredentials.getApplicationDefault(); 导致异常

java.io.IOException: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
    at com.google.auth.oauth2.DefaultCredentialsProvider.getDefaultCredentials(DefaultCredentialsProvider.java:134)
    at com.google.auth.oauth2.GoogleCredentials.getApplicationDefault(GoogleCredentials.java:120)
    at com.google.auth.oauth2.GoogleCredentials.getApplicationDefault(GoogleCredentials.java:92)
    at fete.bird.service.gcp.GoogleCloudStorageService.createBucketWithStorageClassAndLocation(GoogleCloudStorageService.java:24)
    at fete.bird.core.StartUp.onApplicationEvent(StartUp.java:24)
    at fete.bird.core.StartUp.onApplicationEvent(StartUp.java:11)
    at io.micronaut.context.DefaultBeanContext.notifyEventListeners(DefaultBeanContext.java:1307)
    at io.micronaut.context.DefaultBeanContext.publishEvent(DefaultBeanContext.java:1292)
    at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:248)
    at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:166)
    at io.micronaut.runtime.Micronaut.start(Micronaut.java:71)
    at io.micronaut.runtime.Micronaut.run(Micronaut.java:311)
    at io.micronaut.runtime.Micronaut.run(Micronaut.java:297)
    at fete.bird.ServiceApplication.main(ServiceApplication.java:8)

是不是在 StartupEvent 上,micronaut无法访问环境变量?

Is it on StartupEvent the micronaut doesn't access the environment variable?

推荐答案

好吧,我错过了以下说明

Well I was missing the below instruction

本地开发/测试

如果在本地运行以进行开发/测试,则可以使用 Google Cloud SDK .使用 gcloud auth application-default登录创建应用程序默认凭据,然后google-cloud将自动检测到此类凭据.

If running locally for development/testing, you can use the Google Cloud SDK. Create Application Default Credentials with gcloud auth application-default login, and then google-cloud will automatically detect such credentials.

https://github.com/googleapis/google-cloud-java

但是,此解决方案并不完美,因为它正在使用OAuth身份验证并在您的应用程序已使用来自Google Cloud SDK的最终用户凭据进行身份验证时收到警告.我们建议大多数服务器应用程序改为使用服务帐户.如果您的应用程序继续使用Cloud SDK中的最终用户凭据,则可能会收到超出"的警告.或未启用API";错误.有关服务帐户的更多信息.

However, this solution is not perfect, since it is using the OAuth authentication and getting the warning as Your application has authenticated using end user credentials from Google Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts.

这篇关于应用程序默认凭据不适用于Mac Google Cloud Storage中的环境变量设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆