Google App Engineで実行中のjaxrsサービスを使用してGoogle Cloud Storageにファイルを保存しようとしています。ファイルを保存しようとしているうちに、エラーが発生しています。Google Cloud Storage - com.google.appengine.api.appidentity.AppIdentityServiceFailureException
com.google.appengine.tools.cloudstorage.NonRetriableException:com.google.appi.appi.appidentity.AppIdentityServiceFailureException:AppIdentityサービスが予期しないエラーをスローしました。詳細:
ファイルを新しいバケットに保存しようとしましたが、下位バージョン(計算エンジン、サービスエンジン、サービスアカウント)の権限をバケットに渡しました。私はまた、別のサービスアカウントを作成し、(プロジェクトにこのアカウントに編集者の役割を持つ)もライター許可をこのサービスアカウントを与えた
- [email protected]
- XXXX-計算@開発.gserviceaccount.com
- [email protected]
私は、デフォルトのサービスとアプリエンジンから、我々は、ファイルを保存することができなければならないため、サービスアカウントが必要とされていません理解しています。しかし、私はまた、上記のサービスアカウントを作成し、WEB-INF /リソース/ service_account_credentials.jsonの場所にファイルを保存しようとすると、私は二つの方法の下にしようとした
<property name="GOOGLE_APPLICATION_CREDENTIALS" value="WEB-INF/resources/service_account_credentials.json"/>
のappengine-web.xmlに以下のプロパティを設定しますファイルを格納しますが、両方ともエラーを出しています。また、以下に示すよう
最初の方法は...
は...同じエラーを与えるファイル
GcsFileOptions gcsFileOptions = null ;
GcsFileOptions.Builder builder = new GcsFileOptions.Builder() ;
if(aclEntityName != null)
builder = builder.acl(aclEntityName) ;
if(fileMetaData != null && !fileMetaData.isEmpty())
for(Map.Entry<String, String> entry : fileMetaData.entrySet()){
builder = builder.addUserMetadata(entry.getKey(), entry.getValue()) ;
}
gcsFileOptions = builder.build() ;
GcsFilename fileName = new GcsFilename(bucketName, name) ;
GcsService gcsService = StorageFactory.getGcsService() ;
GcsOutputChannel outputChannel = gcsService.createOrReplace(fileName, gcsFileOptions);
copy(contentStream, Channels.newOutputStream(outputChannel));
第二の方法の保管サービス
GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder()
.initialRetryDelayMillis(10)
.retryMaxAttempts(10)
.totalRetryPeriodMillis(15000)
.build());
を取得します
は私が間違って何をやっている第二の方法
StorageObject objectMetaData = new StorageObject();
objectMetaData.setName(name);
if(fileMetaData != null && fileMetaData.isEmpty() == false)
objectMetaData.setMetadata(fileMetaData) ;
// Set the access control list to publicly read-only
if(aclEntityName != null && !aclEntityName.trim().equals("")
&& aclRole != null && !aclRole.trim().equals("")) {
objectMetaData.setAcl(Arrays.asList(
new ObjectAccessControl().setEntity(aclEntityName).setRole(aclRole)));
}
InputStreamContent mediaContent = new InputStreamContent("application/octet-stream", contentStream);
// Do the insert
Storage client = StorageFactory.getService();
Storage.Objects.Insert insertRequest = client.objects().insert(
bucketName, objectMetaData, mediaContent);
if (mediaContent.getLength() > 0 && mediaContent.getLength() <= 2 * 1000 * 1000 /* 2MB */) {
insertRequest.getMediaHttpUploader().setDirectUploadEnabled(true);
}
insertRequest.execute();
ファイルを保存するサービス
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential =
GoogleCredential.getApplicationDefault(transport, jsonFactory);
if (credential.createScopedRequired()) {
Collection<String> scopes = StorageScopes.all();
credential = credential.createScoped(scopes);
}
return new Storage.Builder(transport, jsonFactory, credential)
.setApplicationName("GCS Samples")
.build();
を取得しますか?このエラーを修正するために必要な設定はありますか?助けてください !!! GOOGLE_APPLICATION_CREDENTIALS
環境変数を使用してGoogle Application Default Credentialsの私の理解から、
例外は詳細を提供しますか(「詳細:」の後)?もしそうなら、あなたの質問にそれを含めてください。 – SimonJ
いいえ、詳細情報の前に情報はありません。ただ空白のスペース。 –