使用customResource将RDS层注册到opsworks堆栈

时间:2017-01-26 13:23:23

标签: json aws-opsworks amazon-cloudformation

我正在创建一个用于创建堆栈,图层和应用程序的云信息模板。应用程序的数据库配置为Datasources

"AdminApp": {
      "Type": "AWS::OpsWorks::App",
      "Properties": {
        "AppSource" : {
          "Type" : "git",
          "Url" : "git://github.com:myrepo/adminapp.git",
          "Revision" : "master"
        },
        "DataSources":[{
          "Arn" : { "Ref" : "RegisterRDStoStack" },
          "DatabaseName" : "fadmin",
          "Type" : "RdsDbInstance"
        }],
        "Description": "Administration",
        "Name" : "admin-api",
        "Shortname" : "admin_api",
        "StackId" : {"Ref": "Stack"},
        "Type" : "php"
      }
    },

属性Datasources中的数据库应首先注册到堆栈,以便应用程序可以访问它。 由于AWS尚未使用Cloudformation实现在opsworks堆栈中创建RDS层,因此我创建了一个CustomResource作为解决方法:

"RegisterRDStoStack" : {
  "Type": "Custom::RDSLayer",
  "Version" : "1.0",
  "Properties" : {
    "ServiceToken": {"Ref" : "RDSInstanceARN"},
    "StackId" : {"Ref" : "Stack" },
    "User" : {"Ref" : "UserDB" },
    "Password" : {"Ref" : "PasswordDB" }
  }
},

测试模板时出现此错误:

CREATE_FAILED   Custom::RDSLayer    RegisterRDStoStack  Invalid service token

所以似乎有一个错误,但不知道到底是什么。我正确提供了数据库的ARN。我应该做些什么让这项工作好吗?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要提供Lambda函数的ARN(例如{"Ref": "MyLambdaFunction"})作为Custom ResourceServiceToken参数。请参阅ServiceToken的文档:

  

服务提供商为模板开发人员提供的访问服务的服务令牌,例如Amazon SNS主题ARN或Lambda函数ARN。服务令牌必须来自您创建堆栈的同一区域。