You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从Lambda Context的ARN中以编程方式提取Account ID

提取Lambda ARN中的Account ID(无需手动字符串解析)

刚好之前处理Lambda相关的ARN时也碰到过这个问题,分享两个干净的解决方案,完全不用自己手动拆分字符串:

如果你用的是AWS SDK for Java 2.x

这是最省心的方式!新版SDK里的software.amazon.awssdk.core.Arn类专门做ARN解析,直接提供了accountId()方法,一步到位:

import software.amazon.awssdk.core.Arn;

// 从你的Lambda相关对象(比如FunctionConfiguration)拿到ARN字符串
String lambdaArn = "arn:aws:lambda:us-east-1:123456789012:function:my-function";
Arn arn = Arn.fromString(lambdaArn);
String accountId = arn.accountId(); // 直接得到123456789012

这个类会自动处理ARN的结构校验,不用担心格式问题,而且返回的account ID是直接提取好的,非常干净。

如果还在使用AWS SDK for Java 1.x

确实旧版的com.amazon.arn.ARN没有直接暴露account ID属性,但我们可以利用它的getComponents()方法来获取。Lambda的ARN结构是固定的:arn:partition:service:region:account-id:resource,所以components数组的第5个元素(索引从0开始是第4位)就是我们要的账号ID:

import com.amazon.arn.ARN;

String lambdaArn = "arn:aws:lambda:us-east-1:123456789012:function:my-function";
ARN arn = ARN.fromString(lambdaArn);
// 先判断一下components长度,避免非标准ARN的情况
if (arn.getComponents().length > 4) {
    String accountId = arn.getComponents()[4];
    // 你的业务逻辑
}

额外提一句:如果是在Lambda函数内部执行,你可以通过Context对象的getInvokedFunctionArn()拿到当前函数的ARN,再用上面的方法解析;如果是通过Lambda客户端查询函数配置,FunctionConfigurationgetFunctionArn()也能直接拿到对应ARN,不用自己拼接。

内容的提问来源于stack exchange,提问作者user2185573

火山引擎 最新活动