Dav*_*ann 5 google-app-engine google-cloud-platform google-secret-manager
我尝试使用listSecrets()
App Engine 应用程序在 Secret Manager 中列出机密,但 grpc 请求在 60 秒后始终超时:
com.google.api.gax.rpc.DeadlineExceededException: io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: Deadline exceeded after 59.973305176s.
at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:51)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
at com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97)
at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1074)
at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1213)
at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:983)
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:771)
at io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:563)
at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:533)
at io.grpc.internal.DelayedClientCall$CloseListenerRunnable.runInContext(DelayedClientCall.java:406)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Suppressed: com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed
Run Code Online (Sandbox Code Playgroud)
我验证了我可以使用 App Engine 中的其他 GCP 服务,并且我的 App Engine 默认服务帐户具有 Secret Manager 角色。我的应用程序是标准环境中的第二代 Java 11 应用程序。我正在使用libraries-bom
(最新的)v23.0.0。当我在本地运行相同的代码时,它工作正常,并且不会超过几秒钟,所以我想知道这是否是 App Engine 环境或其服务帐户的问题。
更新:我最终使用了 google-api-services-secretmanager/google-api-client/google-auth-library-oauth2-http。这个片段在本地和 App Engine 上运行良好。
var projectId = "<TODO>";
var credentials = GoogleCredentials.getApplicationDefault();
var secretManager = new SecretManager.Builder(
new NetHttpTransport(),
new GsonFactory(),
new HttpCredentialsAdapter(credentials))
.build();
ArrayList<Secret> secrets = new ArrayList<>();
String pageToken = null;
do {
var response = secretManager.projects().secrets().list("projects/" + projectId)
.setPageToken(pageToken)
.execute();
pageToken = response.getNextPageToken();
secrets.addAll(response.getSecrets());
} while (pageToken != null);
Run Code Online (Sandbox Code Playgroud)
我终于查看了日志(不仅仅是例外)并看到了这个
java.lang.IllegalStateException: Could not find policy 'pick_first'. Make sure its implementation is either registered to LoadBalancerRegistry or included in META-INF/services/io.grpc.LoadBalancerProvider from your jar files.
at io.grpc.internal.AutoConfiguredLoadBalancerFactory$AutoConfiguredLoadBalancer.<init>(AutoConfiguredLoadBalancerFactory.java:92)
at io.grpc.internal.AutoConfiguredLoadBalancerFactory.newLoadBalancer(AutoConfiguredLoadBalancerFactory.java:63)
at io.grpc.internal.ManagedChannelImpl.exitIdleMode(ManagedChannelImpl.java:406)
at io.grpc.internal.ManagedChannelImpl$RealChannel$2.run(ManagedChannelImpl.java:978)
at io.grpc.SynchronizationContext.drain(SynchronizationContext.java:95)
at io.grpc.SynchronizationContext.execute(SynchronizationContext.java:127)
...
Run Code Online (Sandbox Code Playgroud)
这导致了Stackoverflow 帖子和Github 问题。
我的构建使用 Maven Shade 插件。两个工件,io.grpc:grpc-grpclb
,io.grpc:grpc-core
都有一个META-INF/services/io.grpc.LoadBalancerProvider
文件,但grpc-core
是我想要的。在我的阴影配置中添加排除项修复了它:
<filter>
<artifact>io.grpc:grpc-grpclb</artifact>
<excludes>
<exclude>META-INF/services/io.grpc.LoadBalancerProvider</exclude>
</excludes>
</filter>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9967 次 |
最近记录: |