/** * Get db instance details * * @param Aws $aws * @param DBInstanceData $dbinstance * @param SecurityGroupList|null $vpcSglist optional * @param DBClusterList|null $clusters optional * @return mixed * @throws Scalr_Exception_Core */ private function getDbInstanceData(Aws $aws, DBInstanceData $dbinstance, $vpcSglist = null, $clusters = null) { $cloudLocation = $aws->getRegion(); $createdTime = $dbinstance->instanceCreateTime; $dbinstance = $dbinstance->toArray(true); foreach ($dbinstance['VpcSecurityGroups'] as &$vpcSg) { $vpcSecurityGroupName = null; if (isset($vpcSglist)) { foreach ($vpcSglist as $vpcSqData) { /* @var $vpcSqData \Scalr\Service\Aws\Ec2\DataType\SecurityGroupData */ if ($vpcSqData->groupId == $vpcSg['VpcSecurityGroupId']) { $vpcSecurityGroupName = $vpcSqData->groupName; $vpcId = $vpcSqData->vpcId; break; } } } $vpcSg = ['vpcSecurityGroupId' => $vpcSg['VpcSecurityGroupId'], 'vpcSecurityGroupName' => $vpcSecurityGroupName]; } $dbinstance['VpcId'] = !empty($vpcId) ? $vpcId : null; $dbinstance['DBSubnetGroupName'] = isset($dbinstance['DBSubnetGroup']['DBSubnetGroupName']) ? $dbinstance['DBSubnetGroup']['DBSubnetGroupName'] : null; foreach ($dbinstance['DBSecurityGroups'] as &$dbSg) { $dbSg = $dbSg['DBSecurityGroupName']; } foreach ($dbinstance['OptionGroupMembership'] as &$member) { $dbinstance['OptionGroupName'] = $member['OptionGroupName']; break; } foreach ($dbinstance['DBParameterGroups'] as &$param) { $dbinstance['DBParameterGroup'] = $param['DBParameterGroupName']; break; } $dbinstance['Address'] = $dbinstance['Endpoint']['Address']; $dbinstance['Port'] = (string) $dbinstance['Endpoint']['Port']; $dbinstance['InstanceCreateTime'] = Scalr_Util_DateTime::convertTz($createdTime); $dbinstance['AllocatedStorage'] = (string) $dbinstance['AllocatedStorage']; if ($dbinstance['StorageEncrypted']) { /* @var $key Aws\Kms\DataType\AliasData */ foreach ($aws->kms->alias->list() as $key) { if (str_replace($key->aliasName, "key/{$key->targetKeyId}", $key->aliasArn) == $dbinstance['KmsKeyId']) { $dbinstance['KmsKeyId'] = $key->aliasName; break; } } } if (!empty($dbinstance['DBClusterIdentifier']) && isset($clusters)) { foreach ($clusters as $cluster) { /* @var $cluster DBClusterData */ if ($cluster->dBClusterIdentifier == $dbinstance['DBClusterIdentifier']) { foreach ($cluster->dBClusterMembers as $member) { /* @var $member ClusterMemberData */ if ($dbinstance['DBInstanceIdentifier'] == $member->dBInstanceIdentifier) { $dbinstance['isReplica'] = !$member->isClusterWriter; break; } } $dbinstance['MultiAZ'] = true; break; } } } else { $dbinstance['isReplica'] = !empty($dbinstance['ReadReplicaSourceDBInstanceIdentifier']) ? true : false; $dbinstance['MultiAZ'] = $dbinstance['MultiAZ']; } /* @var $cloudResource CloudResource */ $cloudResource = CloudResource::findPk($dbinstance['DBInstanceIdentifier'], CloudResource::TYPE_AWS_RDS, $this->getEnvironmentId(), \SERVER_PLATFORMS::EC2, $cloudLocation); if ($cloudResource) { $dbinstance['farmId'] = $cloudResource->farmId; $dbinstance['farmName'] = $this->db->GetOne("SELECT name FROM farms WHERE id=? LIMIT 1", [$cloudResource->farmId]); } return $dbinstance; }