Est-il possible d'utiliser Spring Cloud AWS (Spring Cloud AWS Core / Spring Cloud AWS Context) pour se connecter à S3 sur site (comme Minio / SwiftStack) qui prend en charge l'API S3 complète?
En bref, l'URL du service S3 doit être encadrée dans la logique de mon application au lieu du nuage de printemps AWS créant la valeur par défaut basée sur la région.
3 Réponses :
Oui, vous devriez pouvoir le faire. J'ai testé cloudfoundry avec le blobstore MinIO compatible S3 en tant que blobstore. Vous pouvez installer le serveur MinIO et changer rapidement de point de terminaison au lieu de S3.
Comment configurer un nouveau point de terminaison? Les seules propriétés que je vois disponibles sont les suivantes: cloud.spring. io / spring-cloud-aws / reference / html / appendix.htm l
Vous pouvez vous référer aux blogs ci-dessous pour savoir comment accéder au client s3 avec minio et backend. S'il vous plaît, faites-moi savoir. blogs.ashrithgn.com/... docs.min.io/docs/…
Aucun de ceux-ci n'indique comment utiliser un service AWS tiers avec Spring Cloud AWS / la configuration Spring Cloud, mais plutôt comment y accéder via des beans AWS ou Minio normalement configurés.
Vous pouvez vous référer aux blogs ci-dessous pour savoir comment accéder au client s3 avec minio et backend. Merci de me le faire savoir.
https: // blogs.ashrithgn.com/spring-boot-uploading-and-downloading-file-from-minio-object-store/
https : //docs.min.io/docs/how-to-use-aws-sdk-for-java-with-minio-server.html
Aucun de ceux-ci n'indique comment utiliser un service AWS tiers avec Spring Cloud AWS / le Spring Cloud config, mais plutôt comment y accéder via des beans AWS ou Minio normalement configurés.
Le code de configuration Spring Cloud est configuré pour ne pas créer son propre bean AmazonS3
s'il en est déjà fourni par l'application. Par conséquent, si l'application fournit son propre bean AmazonS3
, ce bean sera utilisé comme client S3 à la place.
J'utilise Spring Cloud AWS pour accéder à AWS d'Amazon dans l'application en cours d'exécution, et un Dockerized MinIO pour les tests d'intégration. J'ai configuré le bean AmazonS3
de mon test basé sur exemple de code dans la documentation de MinIO . Cette approche devrait également fonctionner pour votre situation de connexion de l'application réelle à MinIO.
cloud: aws: credentials: accessKey: MY_ACCESS_KEY secretKey: MY_SECRET_KEY region.static: us-east-1 my-app: aws: service-endpoint: https://example.invalid:9000
import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MinIoConfiguration { @Value("${cloud.aws.credentials.accessKey}") private String awsAccessKey; @Value("${cloud.aws.credentials.secretKey}") private String awsSecretKey; @Value("${cloud.aws.region.static}") private String awsRegion; @Value("${my-app.aws.service-endpoint}") private String awsServiceEndpoint; @Bean public AmazonS3 amazonS3() { return AmazonS3Client.builder() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(awsServiceEndpoint, awsRegion)) .withPathStyleAccessEnabled(true) .withClientConfiguration(new ClientConfiguration().withSignerOverride("AWSS3V4SignerType")) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey))) .build(); } }