/** * CreateDBInstance action * * Creates a new DB instance. * * @param CreateDBInstanceRequestData $request Created DB Instance request object * @return DBInstanceData Returns created DBInstance * @throws ClientException * @throws RdsException */ public function createDBInstance(CreateDBInstanceRequestData $request) { $result = null; $options = $request->getQueryArray(); if ($this->rds->getApiClientType() === Aws::CLIENT_SOAP) { if (isset($options['DBSecurityGroups.member.1']) || isset($options['VpcSecurityGroupIds.member.1'])) { foreach ($options as $k => $v) { if (strpos($k, 'DBSecurityGroups.member.') !== false) { $options['DBSecurityGroups']['DBSecurityGroupName'][] = $v; unset($options[$k]); } elseif (strpos($k, 'VpcSecurityGroupIds.member.') !== false) { $options['VpcSecurityGroupIds']['VpcSecurityGroupId'][] = $v; unset($options[$k]); } } } } $response = $this->client->call(ucfirst(__FUNCTION__), $options); if ($response->getError() === false) { $sxml = simplexml_load_string($response->getRawContent()); if (!$this->exist($sxml->CreateDBInstanceResult)) { throw new RdsException(sprintf(self::UNEXPECTED, 'create DBIntance')); } $result = $this->_loadDBInstanceData($sxml->CreateDBInstanceResult->DBInstance); } return $result; }
/** * xRestoreClusterAction * * @param string $cloudLocation Ec2 region * @param string $DBClusterIdentifier DBClusterIdentifier field * @param string $DBSnapshotIdentifier DBSnapshotIdentifier field * @param string $Engine Aurora engine * @param string $VpcId Vpc id * @param int $Port Port value * @param string $DBInstanceClass Db instance class * @param bool $PublicAccessible True if instance is public accessible * @param RawData $MasterUserPassword DB Password * @param JsonData $SubnetIds optional List of subnet ids * @param string $OptionGroupName optional Option group name * @param JsonData $AvailabilityZones optional List of availability zones * @param string $DBSubnetGroupName optional Subnet group name * @param bool $AutoMinorVersionUpgrade optional Auto minor version upgrade */ public function xRestoreClusterAction($cloudLocation, $DBClusterIdentifier, $DBSnapshotIdentifier, $Engine, $VpcId, $Port, $DBInstanceClass, $PublicAccessible, RawData $MasterUserPassword, JsonData $SubnetIds = null, $OptionGroupName = null, JsonData $AvailabilityZones = null, $DBSubnetGroupName = null, $AutoMinorVersionUpgrade = null) { $this->request->restrictAccess(Acl::RESOURCE_AWS_RDS, Acl::PERM_AWS_RDS_MANAGE); $aws = $this->getAwsClient($cloudLocation); $request = new RestoreDBClusterFromSnapshotRequestData($DBClusterIdentifier, $DBSnapshotIdentifier); //NOTE: Options groups currently not supported for db clusters // $optionList = $aws->rds->optionGroup->describe($Engine); // // foreach ($optionList as $option) { // /* @var $option OptionGroupData */ // if ($option->optionGroupName == $OptionGroupName) { // $optionGroup = $option; // break; // } // } // // if (isset($optionGroup)) { // $request->optionGroupName = $optionGroup->optionGroupName; // } $request->port = $Port ?: null; $request->availabilityZones = count($AvailabilityZones) > 0 ? (array) $AvailabilityZones : null; $request->dBSubnetGroupName = $DBSubnetGroupName ?: null; $request->engine = $Engine; $result = self::loadController('Aws', 'Scalr_UI_Controller_Tools')->checkVpcPolicy($VpcId, $SubnetIds, $cloudLocation); if ($result === true) { $restoreResponse = $aws->rds->dbCluster->restoreFromSnapshot($request); try { $instance = $aws->rds->dbInstance->describe($DBClusterIdentifier)->get(); } catch (Exception $e) { $instance = false; } if (!$instance) { $dbInstanceIdentifier = $DBClusterIdentifier; } else { $dbInstanceIdentifier = $DBClusterIdentifier . '-restored'; } $createRequest = new CreateDBInstanceRequestData($dbInstanceIdentifier, $DBInstanceClass, $Engine); $createRequest->dBSubnetGroupName = $DBSubnetGroupName; $createRequest->publiclyAccessible = $PublicAccessible; $createRequest->licenseModel = 'general-public-license'; $createRequest->engineVersion = $restoreResponse->engineVersion; $createRequest->storageType = 'aurora'; $createRequest->setTags($this->environment->getAwsTags()); $createRequest->autoMinorVersionUpgrade = $AutoMinorVersionUpgrade; $createRequest->dBClusterIdentifier = $restoreResponse->dBClusterIdentifier; $aws->rds->dbInstance->create($createRequest); CloudResource::deletePk($dbInstanceIdentifier, CloudResource::TYPE_AWS_RDS, $this->getEnvironmentId(), \SERVER_PLATFORMS::EC2, $cloudLocation); $this->response->success("DB Cluster has been successfully restored from Snapshot"); } else { $this->response->failure($result); } }