0

Ich habe gerade mit dem Serverless-Framework begonnen.Dynamischer Zugriff auf Ressourcenmetadaten aus einer Funktion im Serverless-Framework

Ich habe versucht, einen Endpunkt zu implementieren, die von einem Lambda RDS verbindet, so definiert ich einen Handler, eine Route und eine Ressource in der serverless.yaml Datei:

provider: 
    name: aws 
    runtime: nodejs6.10 
    environment: 
    RDS_DB: mydb${opt:stage, self:provider.stage} 
    RDS_USER: foo 
    RDS_PASSWORD: bar 

functions: 
    foo: 
    handler: foo.handler 
    events: 
     - http: 
      path: api/v1/foos 

resources: 
    Resources: 
    RdsCluster: 
     Type: AWS::RDS::DBInstance 
     Properties: 
     AllocatedStorage: 5 
     DBInstanceClass: db.t2.micro 
     Engine: MySQL 
     MasterUsername: ${self:provider.environment.RDS_USER} 
     MasterUserPassword: ${self:provider.environment.RDS_PASSWORD} 
     DBName: ${self:provider.environment.RDS_DB} 

Jetzt würde ich schreiben möchte der Code, der auf die Datenbank in der foo.handler und verbindet, um dies zu tun, muß ich den Datenbank-Host erhalten:

var mysql  = require('mysql'); 

var connection = mysql.createConnection({ 
    host: '<db_host>', 
    user: process.env.RDS_USER, 
    password: process.env.RDS_PASSWORD, 
    database: process.env.RDS_DB 
}); 

gibt es eine Möglichkeit, diese Informationen dynamisch aus der serverless.yaml Ressourcendefinition zu erhalten, anstatt es im Handler selbst zu kodieren?

Antwort

0

fand ich heraus, dass diese Fn verwendet getan werden kann :: GetAtt den Wert als Umgebungsvariable weitergeben müssen:

custom: 
    rdsHost: 
    'Fn::GetAtt': [RdsCluster, Endpoint.Address] 

functions: 
    foo: 
    handler: foo.handler 
    events: 
     - http: 
      path: api/v1/foos 
    environment: 
     RDS_HOST: '${self:custom.rdsHost}' 
Verwandte Themen