AWS etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
AWS etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Ağustos 2023 Perşembe

AWS S3 API AmazonS3 Kullanımı

Maven
Şu satırı dahil ederiz
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.12.83</version>
</dependency>
Daha sonra
AmazonS3 Sınıfı ile senkron istemci yaratılır

Eski kodlarda S3AsyncClient  Sınıfı ile asenkron istemci yaratılır

17 Temmuz 2023 Pazartesi

AWS SDK Kullanımı

1. Java SDK
Şu satırı dahil ederiz
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.12.525</version>
</dependency>

2. Java SDK Bundled Dependency
3. taraf bağımlıklarının başka paketlere taşındığı bir fat jar. Bu jar bayağı büyük. Şu satırı dahil ederiz
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk-bundle</artifactId>
  <version>${aws.sdk.version}</version>
</dependency>
Bir örnek burada

3. BOM Kullanımı
Örnek
Şu satırı dahil ederiz.  Burada Parent BOM'dan gelen bağımlılıkar versiyon olmadan <dependency> olarak tanımlanıyor.
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>bom</artifactId>
      <version>2.16.1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>dynamodb</artifactId>
  </dependency>
</dependencies>

17 Şubat 2023 Cuma

AWS SES API

Maven
Şu satırı dahil ederiz
<!-- AWS SDK -->
<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>software.amazon.awssdk</groupId>
         <artifactId>bom</artifactId>
         <version>2.17.282</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>

<dependencies>
  <!--aws SES-->
  <dependency>
     <groupId>software.amazon.awssdk</groupId>
     <artifactId>ses</artifactId>
  </dependency>
</dependencies>
SesClient Sınıfı
Örnek
Şöyle yaparız
Region region = Region.YOUR_REGION;
SesClient sesClient = SesClient.builder()
        .region(region)
        .credentialsProvider(ProfileCredentialsProvider.create())
        .build();

public void sendEmail(SesClient client, Email email) throws MessagingException {
  Destination destination = Destination.builder()
    .toAddresses(email.getReceiver())
    .build();
  Content content = Content.builder()
    .data(email.getEmailBody())
    .build();
  Content subject = Content.builder()
    .data(email.getSubject())
    .build();
  Body body = Body.builder()
    .html(content)
    .build();
  Message message = Message.builder()
    .subject(subject)
    .body(body)
    .build();
  SendEmailRequest emailRequest = SendEmailRequest.builder()
    .message(message)
    .source(email.getSender())
    .destination(destination)
    .build();
  try {
    client.sendEmail(emailRequest);
  } catch (SesException e) {...}
}



29 Aralık 2022 Perşembe

AWS CDK - Cloud Development Kit

Giriş
Açıklaması şöyle
The AWS CDK is an open-source software development framework to model and provision cloud application resources through AWS CloudFormation, programmatically with languages like Typescript, Javascript, Go, Python, C#, and Java.
Aslında bu AWS CDK ile altta Java kodu ile CloudFormation Template formatında yaml dosyası oluşturuluyor.

Kavramlar
Açıklaması şöyle
L1 Construct
Represent all resources available in AWS CloudFormation. These constructs start with the prefix Cfn. For example, CfnDBInstance represents the AWS::RDS::DBInstance

L2 Construct
Also, represent all resources available in AWS CloudFormation, but at a high level. Offer convenients defaults and reduce the need to know all details about the AWS resource. For example, Topic.Builder.create represent the creation of topic in AWS.

L3 Construct
These constructs are to help you to complete tasks that involve multiple resources in AWS. For example, The LambdaRestApi construct represents an Amazon API Gateway API that’s backed by an AWS Lambda function.

Stacks
Is the unit of deployment. All AWS resources are defined within a stack.

We can define a lot of stack numbers in we AWS CDK app.

Apps
An app is a container for one o more stacks, its serve as stack’s scope.
Bir örnek burada

Maven
Şu satırı dahil ederiz
<properties>
  <cdk.version>2.51.1</cdk.version>
  <constructs.version>[10.0.0,11.0.0)</constructs.version>
  <aws.java.sdk.version>2.16.1</aws.java.sdk.version>
</properties>

<dependencies>
  <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>aws-sdk-java</artifactId>
    <version>${aws.java.sdk.version}</version>
  </dependency>

  <!-- AWS Cloud Development Kit -->
  <dependency>
    <groupId>software.amazon.awscdk</groupId>
    <artifactId>aws-cdk-lib</artifactId>
    <version>${cdk.version}</version>
 </dependency>

 <dependency>
   <groupId>software.constructs</groupId>
   <artifactId>constructs</artifactId>
   <version>${constructs.version}</version>
 </dependency>

</dependencies>

















18 Aralık 2022 Pazar

AWS SQS API SqsClient Sınıfı

Giriş
Şu satırı dahil ederiz
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.CreateQueueRequest;
import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest;
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
builder metodu
Örnek
Elimizde şöyle bir kod olsun
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProviderChain;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

protected AwsCredentialsProvider getAwsCredentialsProvider() {
  return AwsCredentialsProviderChain.builder()
    .addCredentialsProvider(DefaultCredentialsProvider.create())
    .build();
}
Şöyle yaparız
protected SqsClient sqsClient() throws URISyntaxException {
  return SqsClient.builder()
    .region(Region.US_EAST_1)
    .endpointOverride(new URI("http://localhost:4566"))
    .credentialsProvider(getAwsCredentialsProvider())
    .build();
}
createQueue metodu
Örnek
Şöyle yaparız
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.CreateQueueRequest;

protected String createQueue(String queueName) throws URISyntaxException {
  var createQueueRequest = CreateQueueRequest.builder()
    .queueName(queueName)
    .build();
  return sqsClient().createQueue(createQueueRequest).queueUrl();
}
getQueueUrl metodu
Örnek
Şöyle yaparız
GetQueueUrlResponse getQueueUrlResponse = sqsClient.
  getQueueUrl(GetQueueUrlRequest.builder().queueName(QUEUE_NAME).build());
String originalUrl = getQueueUrlResponse.queueUrl();
receiveMessage metodu
Örnek
Şöyle yaparız
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest;
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;

	
protected ReceiveMessageResponse receiveMessage(String queueUrl)
  throws URISyntaxException {
    var sqsClient = sqsClient();
    var receiveMessageRequest = ReceiveMessageRequest.builder()
      .queueUrl(queueUrl)
      .build();
  return sqsClient.receiveMessage(receiveMessageRequest);
}
sendMessageBatch metodu
Örnek
Şöyle yaparız. Burada mesajlar 10'luk gruplar halinde gönderiliyor
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequest;
import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequestEntry;

List<SendMessageBatchRequestEntry> messageList = 

int sublistSize = 10;
String queueUrl = ...;

// Iterate the list with sublists of size 10
for (int i = 0; i < messageList.size(); i += sublistSize) {
  int endIndex = Math.min(i + sublistSize, messageList.size());
  List<SendMessageBatchRequestEntry> sublist = messageList.subList(i, endIndex);

  // Process the current sublist
  SendMessageBatchRequest sendMessageBatchRequest = SendMessageBatchRequest.builder()
    .queueUrl(queueUrl)
    .entries(sublist)
    .build();
    sqsClient.sendMessageBatch(sendMessageBatchRequest);
}



AWS SQS API @SqsListener Anotasyonu

Maven
Şu satırı dahil ederiz
<dependency>
<groupId>io.awspring.cloud</groupId> <artifactId>spring-cloud-aws-starter-sqs</artifactId> <version>3.0.0-M3</version> </dependency>
Örnek - Spring
application.properties şöyle olsun
spring:
 ...
  cloud:
    aws:
      sqs:
        endpoint: http://localhost:4566
        region: us-east-1
Şöyle yaparız
import io.awspring.cloud.sqs.annotation.SqsListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message;
import org.springframework.messaging.handler.annotation.MessageExceptionHandler;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class PortfolioConsumer {
  private final ObjectMapper objectMapper;
  private final PortfolioRepository portfolioRepository;
  public PortfolioConsumer(final ObjectMapper objectMapper,
                           final PortfolioRepository portfolioRepository) {
    this.objectMapper = objectMapper;
    this.portfolioRepository = portfolioRepository;
  }
  @SqsListener(value = "${consumer.portfolio.queue-name}")
  public void consume(final Message<String> message){
    try {
      var body = objectMapper.readTree(message.getPayload()).get("Message").textValue();
      var portfolioConsumerDTO = objectMapper.readValue(body, PortfolioConsumerDTO.class);

      portfolioRepository.save(new Portfolio(portfolioConsumerDTO.id(), portfolioConsumerDTO.name()));

      log.info(String.format("receive message portfolio: id  %s", portfolioConsumerDTO.id()));
     } catch (Throwable e){
       var errorMsg = "got error at consumer portfolioDTO";
       throw new ConsumerException(errorMsg, e);
    }
  }
  @MessageExceptionHandler(value = ConsumerException.class)
  void handlerException(final ConsumerException e){
    log.error("handlerException", e);
  }
}


16 Aralık 2022 Cuma

AWS S3 API AmazonS3ClientBuilder Sınıfı

Giriş
Şu satırı dahil ederiz
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
withEndpointConfiguration metodu
Localstack ile kullanılır

Örnek
Şöyle yaparız
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;

public AmazonS3 amazonS3() {
  AmazonS3 s3client = AmazonS3ClientBuilder
    .standard()
    .withCredentials(new AWSStaticCredentialsProvider(credentials()))
    .withEndpointConfiguration(
      getEndpointConfiguration("http://s3.localhost.localstack.cloud:4566"))
    .build();
    return s3client;
}

public AWSCredentials credentials() {
  ...
}

private AwsClientBuilder.EndpointConfiguration getEndpointConfiguration(String url) {
  return new AwsClientBuilder.EndpointConfiguration(url, Regions.US_EAST_1.getName());
}
withRegion metodu
Örnek
Şöyle yaparız
import com.amazonaws.auth.AWSCredentials; 
import com.amazonaws.auth.AWSStaticCredentialsProvider; 
import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3ClientBuilder; 

@Configuration public class AmazonConfig {     
  @Value("${AWS_SECRET}")     
  private String awsSecret;     
  @Value("${AWS_KEY}")     
  private String awsKey;     
  
  @Bean     
  public AmazonS3 s3() {         
    AWSCredentials awsCredentials = new BasicAWSCredentials(awsKey,awsSecret);         
    return AmazonS3ClientBuilder.standard()                 
      .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
      .withRegion("PUT_YOUR_REGION_HERE")                 
      .build();     
  } 
}
withCredentials metodu - AWSStaticCredentialsProvider
Örnek
Şöyle yaparız
@Configuration
public class AwsS3Config {
    @Value("${amazon.aws.access-key}")
    private String accessKeyId;

    @Value("${amazon.aws.secret-key}")
    private String accessKeySecret;

    @Value("${amazon.aws.region}")
    private String s3RegionName;

  @Bean
  public AmazonS3 getAmazonS3Client() {
    final BasicAWSCredentials basicAwsCredentials = 
      new BasicAWSCredentials(accessKeyId, accessKeySecret);
    // Get Amazon S3 client and return the S3 client object
    return AmazonS3ClientBuilder
      .standard()
      .withCredentials(new AWSStaticCredentialsProvider(basicAwsCredentials))
      .withRegion(s3RegionName)
      .build();
    }
}