这是我的模板
{
"AWSTemplateFormatVersion":"2010-09-09",
"Resources":{
"lambdafunction":{
"Type":"AWS::Lambda::Function",
"Properties":{
"Handler":"index.handler",
"Role":{
"Fn::GetAtt":[
"RootRole",
"Arn"
]
},
"Code":{
"S3Bucket":"{s3_bucket_name}",
"S3Key":"lambda-zip"
},
"Runtime":"java8",
"Timeout":"25"
}
},
"RootRole":{
"Type":"AWS::IAM::Role",
"Properties":{
"AssumeRolePolicyDocument":{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":[
"ec2.amazonaws.com"
]
},
"Action":[
"sts:AssumeRole"
]
}
]
},
"Path":"/",
"Policies":[
{
"PolicyName":"root",
"PolicyDocument":{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":"*",
"Resource":"*"
}
]
}
}
]
}
}
}
}
堆栈创建后lambda函数的名称是lambda-lambdafunction-18SJKJ5Q40AKZ IAM角色的名称是lambda-RootRole-12S8E9CA0EOVM
该模板似乎没有办法定义lambda函数名称http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html . 而且我不确定为什么最后会附加随机字符 .
3 回答
更新:AWS :: IAM :: Role和AWS :: Lambda :: Function现在都支持自定义名称 .
默认情况下,CloudFormation会为资源名称生成唯一ID . 这是有道理的,因为它允许您一次又一次地重复使用模板 .
某些资源类型(但不是全部)支持自定义名称 . 支持自定义名称的示例是AWS :: DynamoDB :: Table('TableName')和AWS :: S3 :: Bucket('BucketName') .
有关更多信息以及支持自定义名称的完整资源列表,请参阅here .
实际上,我发现“FunctionName”允许您命名Lambda函数:
在Role的属性中使用“RoleName”,在Lambda的属性中使用“FunctionName”,为Lambda函数和正在创建的Role赋予特定名称 .