我可以访问
com.amazonaws.services.lambda.runtime.Context;
Run Code Online (Sandbox Code Playgroud)
对象和扩展调用函数Arn.arn包含lambda所在的帐户ID.
我的问题很简单,我希望以最简洁的方式从中提取帐户ID.
我看了看
com.amazon.arn.ARN;
它有很多东西,但没有帐户ID(我认为这是因为并非所有的arns都有帐户ID?)
我想干净地提取帐户ID,而不需要解析字符串.
如果您的lambda被用作API网关代理lambda,那么您可以访问event.requestContext.accountId(event处理函数的第一个参数).
否则,您将不得不拆分ARN.
从有关ARN格式的AWS文档中,以下是有效的Lambda ARN格式:
阿尔恩:AWS:波长:区域:帐户ID:功能:功能名称
阿尔恩:AWS:波长:区域:帐户ID:功能:功能名称:别名名称
阿尔恩:AWS:波长:区域:帐户ID:功能:功能名称:版本
ARN:AWS:拉姆达:区域:帐户ID:事件源映射:事件源映射-ID
在所有情况下,account-id是ARN中的第5项(:作为分隔符处理).因此,你可以这样做:
String accountId = arn.split(":")[4];
Run Code Online (Sandbox Code Playgroud)
您不再需要解析 arn,get_caller_identity为此目的引入了 sts 库。它是一种矫枉过正,但有效!
来自 aws 文档的摘录。
python
import boto3
client = boto3.client('sts')
response = client.get_caller_identity()['Account']
Run Code Online (Sandbox Code Playgroud)
js
/* This example shows a request and response made with the credentials for a user named Alice in the AWS account 123456789012. */
var params = {
};
sts.getCallerIdentity(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
/*
data = {
Account: "123456789012",
Arn: "arn:aws:iam::123456789012:user/Alice",
UserId: "AKIAI44QH8DHBEXAMPLE"
}
*/
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4034 次 |
| 最近记录: |