Jos*_*han 1 amazon-rds aws-cloudformation amazon-route53 serverless-framework serverless
以下是YAML格式的示例云形成文件。想法是使Route53记录依赖于RDS数据库的创建,然后在其创建后从RDS数据库的端点获取值。
我在这些参考文档中进行了大量研究,但始终无法正确获取语法。
您可以看到它应该有一个返回值,但是我不确定如何获取它并将其用于route53 cName记录名称。
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.uploadBucket}
RDSDatabase:
Type: AWS::RDS::DBInstance
Properties:
Engine : mysql
MasterUsername: ${env:RDS_USERNAME}
MasterUserPassword: ${env:RDS_PASSWORD}
DBInstanceClass : db.t2.micro
AllocatedStorage: '5'
PubliclyAccessible: true
#TODO: The Value of Stage is also available as a TAG automatically which I may use to replace this manually being put here..
Tags:
-
Key: "Name"
Value: ${self:custom.databaseName}
DeletionPolicy: Snapshot
DNSRecordSet:
Type: AWS::Route53::RecordSet
Properties:
HostedZoneName: mydomain.com.
Name: database-${self:custom.stage}.mydomain.com
Type: CNAME
TTL: '300'
ResourceRecords:
- [[Put End Point Here]]
DependsOn: RDSDatabase
Run Code Online (Sandbox Code Playgroud)
我尝试这样做但没有运气 - ${!Ref RDSDatabase.Endpoint.Address}
An error occurred: DNSRecordSet - Invalid Resource Record: FATAL problem: RRDATANotSingleField (Value contains spaces) encounte
red with '${!Ref RDSDatabase.Endpoint.Address}'.
Run Code Online (Sandbox Code Playgroud)
找到答案了...
ResourceRecords:
- {"Fn::GetAtt": ["RDSDatabase","Endpoint.Address"]}
Run Code Online (Sandbox Code Playgroud)
我不知道我可以在YAML中使用类似的括号...
使用!GetAtt简写形式更具可读性。
ResourceRecords:
- !GetAtt RDSDatabase.Endpoint.Address
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |