📝

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