1

Ich erstelle meine Lambda-Funktion wie folgt durch Wolkenbildung Vorlage. Meine Frage ist, nachdem ich diese Lambda-Ressource erstellt habe, möchte ich einige Variablen als Eingabe übergeben und sofort ausführen. Gibt es einen Weg, wie ich es durch Cloud-Formationsvorlage machen kann? Erstellen und Ausführen einer aws Lambda-Funktion durch Wolkenbildung


AWSTemplateFormatVersion: '2010-09-09' 
Description: Create a lambda function for chef rds read replica 
Parameters: 
    Environment: 
    Description: Environment that will be built 
    Type: String 
    Default: q1 
    AllowedValues: 
    - q1 
Mappings: 
    ChefEnvironmentMap: 
    q1: 
     IAMRole: CHEFAWS-RDS 
     Subnets: 
     - subnet-*** 
     SecurityGroups: 
     - sg-*** 
     NetCoreEnvironment: qa 
Resources: 
    ChefRDSReadOnlyReplica: 
    Type: AWS::Lambda::Function 
    Properties: 
     Code: 
     S3Bucket: cheftestbucket 
     S3Key: lambda/cheflambda.zip 
     Description: "Chef rds" 
     Environment: 
     Variables: 
      http_proxy: 'http://**' 
      https_proxy: 'http://**' 
      no_proxy: '169.254.169.254,127.0.0.1,localaddress,.localdomain.com' 
     Handler: createreadreplica.lambda_handler 
     MemorySize: 128 
     Role: arn:aws:iam::*****:role/CHEFAWS-RDS 
     Runtime: python2.7 
     Timeout: 60 
     VpcConfig: 
     SecurityGroupIds: !FindInMap [ChefEnvironmentMap, !Ref Environment, SecurityGroups] 
     SubnetIds: !FindInMap [ChefEnvironmentMap, !Ref Environment, Subnets] 

Antwort

1

Ich folgte dem Ansatz eine benutzerdefinierte Ressource zu erstellen, die Lambda-Funktionen erzeugt auszuführen. Ich startete auch die benutzerdefinierte Ressource durch das cft, so.

Lambdaresource: 
    DependsOn: ChefRDSReadOnlyReplica 
    Properties: 
     sourceregion: "us-east-1" 
     target_region: "us-west-2" 
     db_instance_id: "chef-tod-pg-rds" 
     dbsubnet_groupname: "******" 
     kms_keyid: "******" 
     ServiceToken: !GetAtt ChefRDSReadOnlyReplica.Arn 
    Type: AWS::CloudFormation::CustomResource 

Dies führt jedoch zu mehr Komplexität. Da Cloud-Bildung der benutzerdefinierten Ressource nicht benachrichtigt wird, nachdem es die Lambda-Funktion auslöst. So bleibt es in "Creating Resource" State. Um dies zu handhaben, musste ich eine neue Funktion in meinem Lambda Python-Code erstellen, die den Erfolg/Fehler zurückgab. Wie hier erwähnt: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html

Verwandte Themen