这是我的模板
{
"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函数的名称 λ-lambdafunction-18SJKJ5Q40AKZ IAM角色的名称是 λ-RootRole-12S8E9CA0EOVM
模板似乎没有办法定义lambda函数名http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html。而且我不确定为什么最后会附加随机字符。
答案 0 :(得分:6)
更新:AWS :: IAM :: Role和AWS :: Lambda :: Function现在都支持自定义名称。
默认情况下,CloudFormation会为资源名称生成唯一ID。这是有道理的,因为它允许您一次又一次地重复使用模板。
某些资源类型(但不是全部)支持自定义名称。支持自定义名称的示例是AWS :: DynamoDB :: Table('TableName')和AWS :: S3 :: Bucket('BucketName')。
有关更多信息以及支持自定义名称的完整资源列表,请参阅here。
答案 1 :(得分:3)
实际上,我发现“FunctionName”允许您命名Lambda函数:
"LambdaResourceName": {
"Type": "AWS::Lambda::Function",
"Properties": {
"FunctionName": "",
"Description": "",
"Handler": "app.handler",
"Role":
"Code":
"Runtime": "node.js"
答案 2 :(得分:0)
在Role的属性中使用“RoleName”,在Lambda的属性中使用“FunctionName”,为Lambda函数和正在创建的角色指定特定名称。