首页 文章

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

提问于
浏览
4

这是我的模板

{  
   "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 回答

  • 6

    更新:AWS :: IAM :: Role和AWS :: Lambda :: Function现在都支持自定义名称 .

    默认情况下,CloudFormation会为资源名称生成唯一ID . 这是有道理的,因为它允许您一次又一次地重复使用模板 .

    某些资源类型(但不是全部)支持自定义名称 . 支持自定义名称的示例是AWS :: DynamoDB :: Table('TableName')和AWS :: S3 :: Bucket('BucketName') .

    有关更多信息以及支持自定义名称的完整资源列表,请参阅here .

  • 0

    实际上,我发现“FunctionName”允许您命名Lambda函数:

    "LambdaResourceName": {
          "Type": "AWS::Lambda::Function",
          "Properties": {
            "FunctionName": "",
            "Description": "",
            "Handler": "app.handler",
            "Role": 
            "Code": 
        "Runtime": "node.js"
    
  • 3

    在Role的属性中使用“RoleName”,在Lambda的属性中使用“FunctionName”,为Lambda函数和正在创建的Role赋予特定名称 .

相关问题