如何在cloudformation模板中指定lambda函数和IAM角色名称

时间:2015-09-07 22:02:34

标签: amazon-web-services amazon-cloudformation aws-lambda amazon-iam

这是我的模板

{  
   "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。而且我不确定为什么最后会附加随机字符。

3 个答案:

答案 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函数和正在创建的角色指定特定名称。