AWS Lambda
開発者ガイド

AWS Lambda での Java コードの作成

Java では、Lambda によってサブセグメントを X-Ray に発行して、関数が行った他の AWS サービスへのダウンストリーム呼び出しに関する情報を表示できます。この機能を利用するには、AWS X-Ray SDK for Java をデプロイパッケージに含めます。コードの変更は必要ありません。AWS SDK バージョン 1.11.48 以降を使用している限り、トレースする関数からのダウンストリーム呼び出しにコード行を追加する必要はありません。

AWS SDK は X-Ray SDK を動的にインポートして、関数によって行われたダウンストリーム呼び出しのサブセグメントを発行します。X-Ray SDK for Java を使用することで、カスタムサブセグメントの発行または X-Ray セグメントへの注釈の追加のためにコードを計測できます。

次の例では、X-Ray SDK for Java を使用して Lambda 関数を計測し、カスタムサブセグメントを発行して X-Ray にカスタム注釈を送信します。

package uptime; import java.io.IOException; import java.time.Instant; import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import com.amazonaws.regions.Regions; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.model.AttributeValue; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.proxies.apache.http.HttpClientBuilder; public class Hello { private static final Log logger = LogFactory.getLog(Hello.class); private static final AmazonDynamoDB dynamoClient; private static final HttpClient httpClient; static { dynamoClient = AmazonDynamoDBClientBuilder.standard().withRegion(Regions.US_EAST_1).build(); httpClient = HttpClientBuilder.create().build(); } public void checkUptime(Context context) { AWSXRay.createSubsegment("makeRequest", (subsegment) -> { HttpGet request = new HttpGet("https://aws.amazon.com/"); boolean is2xx = false; try { HttpResponse response = httpClient.execute(request); is2xx = (response.getStatusLine().getStatusCode() / 100) == 2; subsegment.putAnnotation("responseCode", response.getStatusLine().getStatusCode()); } catch (IOException ioe) { logger.error(ioe); } Map<String, AttributeValue> item = new HashMap<>(); item.put("Timestamp", new AttributeValue().withN("" + Instant.now().getEpochSecond())); item.put("2xx", new AttributeValue().withBOOL(is2xx)); dynamoClient.putItem("amazon-2xx", item); }); } }

前述のコードによって発行されたトレースは以下のようになります (同期呼び出し)。