我正在创建一个用于创建堆栈,图层和应用程序的云信息模板。应用程序的数据库配置为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。我应该做些什么让这项工作好吗?有什么想法吗?
答案 0 :(得分:0)
您需要提供Lambda函数的ARN(例如{"Ref": "MyLambdaFunction"}
)作为Custom Resource的ServiceToken
参数。请参阅ServiceToken
的文档:
服务提供商为模板开发人员提供的访问服务的服务令牌,例如Amazon SNS主题ARN或Lambda函数ARN。服务令牌必须来自您创建堆栈的同一区域。