我正在使用 CloudFormation 模板部署我的 AWS 资源。但是我有两个模板可以相互导出和导入值并使用这些值。
我有一个模板,它使用现有资源和以下模板,称为 storage-resources.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: "Permanent resources to be imported"
Parameters:
DBInstanceIdentifier:
Type: String
Default: 'patheindbidentifier'
DBName:
Type: String
Default: 'patheindb'
DBUsername:
Type: String
Default: 'patheindbadmin'
DBClass:
Type: String
Default: 'db.t2.micro'
DBAllocatedStorage:
Type: String
Default: '5'
DBPassword:
Type: String
Resources:
StorageBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
UpdateReplacePolicy: Retain
Properties:
BucketName: pathein-directory-storage
AccessControl: PublicRead
DBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Database security group
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '3306'
ToPort: '3306'
SourceSecurityGroupId: !ImportValue PatheinWebServerSecurityGroup.GroupId
WebDatabase:
Type: AWS::RDS::DBInstance
DeletionPolicy: Retain
UpdateReplacePolicy: Retain
Properties:
DBInstanceIdentifier: !Ref DBInstanceIdentifier
DBName: !Ref DBName
DBInstanceClass: !Ref DBClass
AllocatedStorage: !Ref DBAllocatedStorage
Engine: MySQL
MasterUsername: !Ref DBUsername
MasterUserPassword: !Ref DBPassword
VPCSecurityGroups:
- !GetAtt DBSecurityGroup.GroupId
Outputs:
StorageBucket:
Description: "S3 storage bucket"
Value: !Ref StorageBucket
Export:
Name: PatheinStorageBucket
正如您在上面的模板中看到的,我正在导出 S3 存储桶。另一件事是我正在导入资源并按如下方式使用它。
!ImportValue PatheinWebServerSecurityGroup.GroupId
PatheinWebServerSecurityGroup 基本上位于另一个名为 core.yml 的模板中。我还将 S3 存储桶从 resources.yml 模板导入到 core.yml 模板中。
现在,我要做的是尝试使用使用现有资源的选项来部署 resources.yml。但问题是我无法上传它并且在我上传时它会抛出错误,因为 core.yml 模板还不存在并且它正在使用 core.yml 模板中的 PatheinWebServerSecurityGroup。
在这种情况下上传或部署模板的最佳方式是什么?我什至在做正确的事?我怎样才能做得更好?