📝
AWS SDK からの API 呼び出しに関する CloudTrail の記録を確認してみた
Lambda から以下のランタイムで確認してみました。
- Node.js 22.x
- Python 3.13
- Ruby 3.4
- Java 21
- .NET 8 (C#)
Node.js 22.x
const { S3Client, ListBucketsCommand } = require("@aws-sdk/client-s3");
exports.handler = async (event) => {
const client = new S3Client({});
const command = new ListBucketsCommand({});
const response = await client.send(command);
return {
statusCode: 200,
body: JSON.stringify(response.Buckets),
};
};
"userAgent": "[aws-sdk-js/3.850.0 ua/2.1 os/linux#5.10.240-263.966.amzn2.x86_64 lang/js md/nodejs#22.15.1 api/s3#3.850.0 exec-env/AWS_Lambda_nodejs22.x m/E,g]",
Python 3.13
import boto3
import json
s3 = boto3.client("s3")
def lambda_handler(event, context):
response = s3.list_buckets()
buckets = response["Buckets"]
return {
"statusCode": 200,
"body": json.dumps(buckets, default=str)
}
"userAgent": "[Boto3/1.40.4 md/Botocore#1.40.4 ua/2.1 os/linux#5.10.240-263.966.amzn2.x86_64 md/arch#x86_64 lang/python#3.13.5 md/pyimpl#CPython exec-env/AWS_Lambda_python3.13 m/D,Z,b cfg/retry-mode#legacy Botocore/1.40.4]"
Ruby 3.4
require 'aws-sdk-s3'
require 'json'
def lambda_handler(event:, context:)
s3 = Aws::S3::Client.new
resp = s3.list_buckets
{
statusCode: 200,
body: JSON.generate(resp.buckets.map(&:to_h))
}
end
"userAgent": "[aws-sdk-ruby3/3.227.0 ua/2.1 api/s3#1.194.0 os/linux md/x86_64 lang/ruby#3.4.5 md/3.4.5 exec-env/AWS_Lambda_ruby3.4 m/Z,b,D,g]"
Java 21
CloudShell から Java の Lambda 関数を作成してみた
package com.example;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HelloWorld implements RequestHandler<Map<String, Object>, Map<String, Object>> {
@Override
public Map<String, Object> handleRequest(Map<String, Object> input, Context context) {
Map<String, Object> output = new HashMap<>();
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
List<Bucket> buckets = s3Client.listBuckets();
output.put("buckets", buckets.stream().map(Bucket::getName).toArray());
return output;
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>lambda-hello-world</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>lambda-hello-world</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.568</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
"userAgent": "[aws-sdk-java/1.12.568 Linux/5.10.240-263.966.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/21.0.7+6-LTS java/21.0.7 vendor/Amazon.com_Inc. cfg/retry-mode/legacy exec-env/AWS_Lambda_java21]"
.NET 8 (C#)
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.Lambda.Core;
using System.Text.Json;
using System.Threading.Tasks;
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace HelloWorldLambda;
public class Function
{
private readonly IAmazonS3 _s3Client = new AmazonS3Client();
public async Task<string> FunctionHandler(object input, ILambdaContext context)
{
var response = await _s3Client.ListBucketsAsync();
return JsonSerializer.Serialize(response.Buckets);
}
}
"userAgent": "[aws-sdk-dotnet-coreclr/4.0.7.0 ua/2.1 os/linux#5.10.240.263 md/ARCH#X64 lang/.NET_Core#8.0.16 exec-env/AWS_Lambda_dotnet8 md/aws-sdk-dotnet-core#4.0.0.26 api/S3#4.0.7.0 md/ClientAsync cfg/init-coll#0 m/b,P,g,E]"
まとめ
今回は AWS SDK からの API 呼び出しに関する CloudTrail の記録を確認してみました。
どなたかの参考になれば幸いです。
Discussion