移行ツールでサポートされていないコードパターン
移行ツールは、ほとんどの v1 コードを v2 に自動的に変換します。ただし、一部のコードパターンでは手動による移行が必要です。このトピックでは、サポートされていない最も一般的なパターンの詳細な例と、それらを手動で変換する方法を示します。
以下のパターンリストは完全なものではありません。移行ツールの実行後にコードがコンパイルされない場合は、「ステップバイステップの移行手順」に従って、残りの v1 コードを手動で移行してください。
パラメータを持つリクエストオブジェクトコンストラクタ
リクエスト POJO (Amazon S3 を除く) の場合、移行ツールはセッターメソッドのみを変換します。このツールは、パラメータを持つコンストラクタをサポートしていません。
サポートされているパターン: セッターを使用するリクエストオブジェクト (コンストラクタパラメータなし)
移行前 (元の v1 コード)
import com.amazonaws.services.sqs.model.SendMessageRequest; SendMessageRequest request = new SendMessageRequest().withMessageBody("Hello World"); request.setQueueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue");
移行後 (移行ツールの結果)
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; SendMessageRequest request = SendMessageRequest.builder() .messageBody("Hello World").build(); request = request.toBuilder() .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue").build();
サポートされていないパターン: パラメータを使用したリクエストオブジェクトコンストラクタ
移行ツールは、パラメータを持つコンストラクタを変換できません。
手動移行前 (移行ツール使用後)
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Import updated to v2. // This pattern requires manual migration. SendMessageRequest request = new SendMessageRequest( "https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
移行ツールはインポートを v2 に変換しますが、コンストラクタコードは変更されず、ビルダーパターンを使用するには手動で更新する必要があります。
手動移行後
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; SendMessageRequest request = SendMessageRequest.builder() .messageBody("Hello World") .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue") .build();
個々のパラメータを使用したサービスクライアントメソッド
移行ツールは、リクエストオブジェクト (Amazon S3 を除く) の代わりに個々のパラメータを使用するサービスクライアントメソッドを変換できません。
移行前 (v1 コード)
import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; AmazonSQS sqs = new AmazonSQSClient(); // The following v1 method takes individual parameters. sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
移行後 (移行ツールの結果 - コンパイルされません)
import software.amazon.awssdk.services.sqs.SqsClient; // Import updated to v2. // No import statement for the v2 request POJO. SqsClient sqs = SqsClient.builder().build(); // Does not compile–v2 methods only accept request POJOs. sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
リクエストオブジェクトを使用するには、メソッド引数を手動で更新する必要があります。
import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Add manually. SqsClient sqs = SqsClient.builder().build(); // Corrected v2 code. SendMessageRequest request = SendMessageRequest.builder() .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue") .messageBody("Hello World") .build(); sqs.sendMessage(request);
リクエストのタイムアウトメソッド
移行ツールは、リクエストオブジェクトにタイムアウトを設定するメソッドを変換しません。
移行前 (v1 コード)
import com.amazonaws.services.sqs.model.SendMessageRequest; SendMessageRequest request = new SendMessageRequest(); request.setSdkRequestTimeout(7);
移行後 (移行ツールの結果 - コンパイルされません)
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Import updated to v2. SendMessageRequest request = SendMessageRequest.builder().build(); // Does not compile. request.setSdkRequestTimeout(7);
v2 の overrideConfiguration メソッドを使用するには、手動で移行する必要があります。
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; import java.time.Duration; SendMessageRequest request = SendMessageRequest.builder().build(); // Corrected v2 code. request = request.toBuilder() .overrideConfiguration(o -> o.apiCallTimeout(Duration.ofSeconds(7))) .build();
パラメータを含むサービスクライアントコンストラクタ
移行ツールは空のサービスクライアントコンストラクタを変換しますが、認証情報や設定などのパラメータを受け入れるコンストラクタを変換することはできません。
移行前 (v1 コード)
import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; AWSCredentials awsCredentials = new BasicAWSCredentials("akid", "skid"); AmazonSQS sqs = new AmazonSQSClient(awsCredentials);
移行後 (移行ツールの結果 - コンパイルされません)
import software.amazon.awssdk.auth.credentials.AwsCredentials; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.services.sqs.SqsClient; // Import updated to v2. AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid"); // Does not compile. SqsClient sqs = new SqsClient(awsCredentials);
ビルダーパターンを使用するには、サービスクライアントコンストラクタを手動で更新する必要があります。
import software.amazon.awssdk.auth.credentials.AwsCredentials; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; // Add manually. import software.amazon.awssdk.services.sqs.SqsClient; AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid"); // Corrected v2 code. SqsClient sqs = SqsClient.builder() .credentialsProvider(StaticCredentialsProvider.create(awsCredentials)) .build();