Как указать лямбда-функцию и имя роли 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 - lambda-RootRole-12S8E9CA0EOVM

Похоже, что в шаблоне нет способа определить имя лямбда-функции http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html. И я не уверен, почему в конце добавляются случайные символы.


person premprakash    schedule 07.09.2015    source источник


Ответы (3)


Обновление: как AWS :: IAM :: Role, так и AWS :: Lambda :: Function теперь поддерживают настраиваемые имена.

По умолчанию CloudFormation генерирует уникальный идентификатор для имен ресурсов. Это имеет смысл, поскольку позволяет повторно использовать шаблон снова и снова.

Некоторые типы ресурсов, но не все, поддерживают настраиваемые имена. Примеры, которые действительно поддерживают настраиваемые имена, - это AWS :: DynamoDB :: Table ('TableName') и AWS :: S3 :: Bucket ('BucketName').

Для получения дополнительной информации и полного списка ресурсов, поддерживающих настраиваемые имена, см. здесь.

person jarmod    schedule 07.09.2015
comment
Спасибо, jarmod. Как вы сказали, я смог определить пользовательские имена для ведер таблицы db / s3 динамо. Если эти ресурсы допускают таможенные имена, я не понимаю, почему та же функциональность недоступна для лямбда-функций и ролей IAM. Однако я могу определять собственные имена с помощью aws cli. - person premprakash; 08.09.2015
comment
@premprakash Я не уверен, по каким критериям Amazon решает, какие ресурсы могут иметь собственные имена, и даже если для этого есть веская причина. - person jarmod; 08.09.2015
comment
PS, возможно, стоит обозначить этот ответ как ответ, который поможет другим задать тот же вопрос в будущем. - person jarmod; 08.09.2015
comment
Теперь можно использовать имена со свойством FunctionName, см. docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ - person Adam Johnson; 10.10.2016

На самом деле, я обнаружил, что «FunctionName» позволяет вам называть лямбда-функции:

 "LambdaResourceName": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "FunctionName": "",
        "Description": "",
        "Handler": "app.handler",
        "Role": 
        "Code": 
    "Runtime": "node.js"
person Overtow    schedule 14.04.2016
comment
Это не работает с SAM Transformations, добавляющими FunctionName: приведет к сбою набора Transformation Change. - person Eric Nord; 24.01.2017

Используйте «RoleName» в свойствах Role и «FunctionName» в свойствах Lambda, чтобы дать конкретные имена лямбда-функции и создаваемой роли.

person Anvita Shukla    schedule 02.08.2017