如何在 cloudformation 模板中指定 lambda 函数和 IAM 角色名称
How to specify lambda function and IAM role name in cloudformation template
这是我的模板
{
"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。而且我不确定为什么最后会附加随机字符。
更新:AWS::IAM::Role 和 AWS::Lambda::Function 现在都支持自定义名称。
默认情况下,CloudFormation 会为资源名称生成一个唯一 ID。这是有道理的,因为它允许您一次又一次地重新使用模板。
一些资源类型(但不是全部)支持自定义名称。支持自定义名称的示例有 AWS::DynamoDB::Table ('TableName') 和 AWS::S3::Bucket ('BucketName').
有关详细信息和支持自定义名称的完整资源列表,请参阅 here。
实际上,我发现 "FunctionName" 允许您命名 Lambda 函数:
"LambdaResourceName": {
"Type": "AWS::Lambda::Function",
"Properties": {
"FunctionName": "",
"Description": "",
"Handler": "app.handler",
"Role":
"Code":
"Runtime": "node.js"
在 Role 的属性中使用 "RoleName" 并在 Lambda 的属性中使用 "FunctionName" 为正在创建的 Lambda 函数和角色指定特定名称。
这是我的模板
{
"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。而且我不确定为什么最后会附加随机字符。
更新:AWS::IAM::Role 和 AWS::Lambda::Function 现在都支持自定义名称。
默认情况下,CloudFormation 会为资源名称生成一个唯一 ID。这是有道理的,因为它允许您一次又一次地重新使用模板。
一些资源类型(但不是全部)支持自定义名称。支持自定义名称的示例有 AWS::DynamoDB::Table ('TableName') 和 AWS::S3::Bucket ('BucketName').
有关详细信息和支持自定义名称的完整资源列表,请参阅 here。
实际上,我发现 "FunctionName" 允许您命名 Lambda 函数:
"LambdaResourceName": {
"Type": "AWS::Lambda::Function",
"Properties": {
"FunctionName": "",
"Description": "",
"Handler": "app.handler",
"Role":
"Code":
"Runtime": "node.js"
在 Role 的属性中使用 "RoleName" 并在 Lambda 的属性中使用 "FunctionName" 为正在创建的 Lambda 函数和角色指定特定名称。