[AWS] PHP SDK - RDS 오로라 클러스터 > AWS.클라우드
AWS.클라우드

[AWS] PHP SDK - RDS 오로라 클러스터

조회 209회 댓글 0건

오로라 클러스터 사용시 인스턴스를 추가, 삭제 하는 PHP SDK 예제 입니다.

비교적 간단한 형태 이며 AWS 키는 본인의 환경에 맞게 변경 하면 됩니다.



use Aws\Rds\RdsClient;


class PabburiAws {
  function profile() {
    $aAwsConfig     = [
      'region'      => AWS_REGION,
      'version'     =>'latest',
      'credentials' => [ 'key' => AWS_ACCESS_KEY_ID, 'secret' => AWS_SECRET_ACCESS_KEY ]
    ];
    return $aAwsConfig;
  }
}

/**
 * AWS RDS
 *
 * @package
 */
class PabburiAwsRds extends PabburiAws
{
  private $client;


  function __construct() {
    $this->client();
  }


  /**
   * rds 커넥션
   * @return Aws\Rds\RdsClient
   */
  function client() {
    if ( $this->client != null ) $this->client;

    $aAwsProfile    = $this->profile();
    $client         = new RdsClient($aAwsProfile);
    $this->client  = $client;

    return $client;
  }


  /**
   * rds 인스턴스 목록
   *
   * @param string $mode
   * @return mixed
   */
  function list( $mode='' )
  {
    $client     = $this->client();
    $result     = $client->describeDBInstances([]);
    // print_r($result);

    $aInstanceList    = [];
    $aStatus          = [];
    foreach ($result['DBInstances'] as $dbInstance) {
      extract($dbInstance);
      // echo "$DBClusterIdentifier($DBInstanceStatus) - DBInstanceIdentifier: $DBInstanceIdentifier / PubliclyAccessible:$PubliclyAccessible $Engine \n";
      $Endpoint     = $dbInstance['Endpoint']['Address'];
      $aInfo        = [
        'clusterName'         => $DBClusterIdentifier,
        'id'                  => $DBInstanceIdentifier,
        'Endpoint'            => $Endpoint,
        'AvailabilityZone'    => $AvailabilityZone,
        'PubliclyAccessible'  => $PubliclyAccessible,
        'status'              => $DBInstanceStatus,
      ];
      $aInstanceList[$DBInstanceIdentifier]   = $aInfo;
      $aStatus[$DBInstanceIdentifier] = $DBInstanceStatus;
    }

    if ( $mode == 'status' ) {
      return $aStatus;
    }
    else {
      return $aInstanceList;
    }
  }


  /**
   * 인스턴스 추가 - 클러스터는 이 방식을 사용 한다.
   *
   * @param mixed $newDbIdentifier
   * @return mixed
   */
  function read_insert( $newDbIdentifier )
  {
    $client     = $this->client();
    $result     = $client->createDBInstance([
      'DBInstanceIdentifier'  => $newDbIdentifier,
      // 아래는 미리 정해놓은 상수를 이용하도록 한다.
      'DBClusterIdentifier'   => 'database-1',
      'Engine'                => 'aurora-mysql',
      'DBInstanceClass'       => 'db.t4g.medium',
    ]);
    // print_r($result);
    $status     = $result->get('DBInstance')['DBInstanceStatus'];

    return $status;
  }


  /**
   * rds 삭제
   *
   * @param mixed $id
   * @return mixed
   */
  function delete( $id )
  {
    $client     = $this->client();

    // available 인것만 삭제 해야 한다.
    $aStatus    = $this->list( 'status' );
    if ( $aStatus[$id] != 'available' ) {
      echo "$id Not available: " . $aStatus[$id] . PHP_EOL;
      return false;
    }

    // 이 값이 true이면 최종 스냅샷을 건너뜁니다.
    // 만약 스냅샷을 원한다면 false로 설정하고, FinalDBSnapshotIdentifier 옵션도 추가하세요.
    $result     = $client->deleteDBInstance([ 'DBInstanceIdentifier' => $id, 'SkipFinalSnapshot' => true ]);
    // print_r($result);
    $status     = $result->get('DBInstance')['DBInstanceStatus'];

    return $status;
  }
}


위에서 주의할것은 읽기 인스턴스 메소드를 createDBInstanceReadReplica 사용할것이라 착각 할 수있다는 것입니다.

createDBInstance 메소드를 사용해야 됩니다.


3a431b4e617b1cc09be8a09a9296fb78_1699530297_9284.png
 



  $HOST_NAME  = php_uname('n');
  $MODE       = '';
  $TYPE       = '';
  if ( isset($argv[1]) ) $MODE = $argv[1];
  if ( isset($argv[2]) ) $TYPE = $argv[2];


  require __DIR__ . '/aws_sdk/aws-autoloader.php';


  $oAwsRds      = new PabburiAwsRds();

  #
  if ( $MODE == 'list' ) {
    $result     = $oAwsRds->list();
    print_r($result);
  }
  #
  else if ( $MODE == 'del' ) {
    $id       = $TYPE;
    $status   = $oAwsRds->delete($id);

    echo "결과: " . $status . PHP_EOL;
  }
  #
  else if ( $MODE == 'insert' ) {
    $newDbIdentifier  = $TYPE;
    $status           = $oAwsRds->read_insert( $newDbIdentifier );
    // print_r($status);
    echo '결과: ' . $status . PHP_EOL;
  }
 


현재 계정의 전체 데이터베이스 현황을 볼 수 있는 기능과

삭제, 추가 할 수 있습니다. 삭제는 정상적으로 운영 되는 것만 가능하기 때문에 체크하는 기능이 추가적으로 필요 합니다.

삭제 할 수 없는 인스턴스를 삭제 하려면 삭제 할 수 없기 때문에 오류가 발생 합니다.

실 서비스 운영에서는 삭제나 추가 후 전체 현황을 보는 것을 추가 해서 확인 해야 합니다.



* 참고할것

  - [AWS] 오로라-MySQL 데이터베이스 생성 옵션 > AWS.클라우드



  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
전체 50건 1 페이지
  • profile_image 무료로 사용하는 RDB DBMS 에서 가장 많이 사용하는 MySQL를 사용하는 오로라 mysql 설정 방법에 대해 정리 한것입니다.오로라 RDS-MySQL 데이터베이스 생성 클라우드 환경에 맞게 AWS에서 변경한 상품이다. 오로라가 아닌 MySQL 상품도 선택을 할 수 있는데 비용을 확인하고 나면 그럴 생각이 없어질 것이다. 그리고 AWS에 맞게 변경된 제품이기 때문에 더 좋다고 볼 수 있다.   ▷ 데이터베이스 생성 방식 선택 표준생성 ▷ …
  • profile_image 쓰기 전용 인스턴스를 상위 등급으로 변경하여 성능을 높이고자 할 때 어떻게 해야 하는지에 대한 것입니다.라이더 인스턴스 높은 성능의 인스턴스로 변경하기 먼저 알고 넘어가야 할것은 라이더 인스턴스 변경하면 변경하는 동안 라이더가 없기에 AWS RDS에서는 리더 인스턴스 하나를 라이더로 변경한 후 작업이 진행 됩니다. 그렇기 때문에 모두 같은 성능의 인스턴스면 문제가 되지 않겠지만 만약 다르면 성능이 높은 인스턴스를 '장애조치 우선순위' 값…
  • profile_image 제목은 이렇게 달아 달었지만 먼저 AWS 오로라에서는 MySQL DBMS 구조에서 흔하게 볼 수 있는 마스터 슬레이브 구조가 아닙니다.생성한 다음 아래 명령을 내려 보면 다른 방법을 사용함을 알 수 있습니다.   mysql> show master status \G  Empty set (0.00 sec)  mysql> show slave status \G   Empty set, 1 warning (0.00 sec)  mysql> …
  • profile_image AWS Elasticache는 Amazon Web Services(AWS)에서 제공하는 완전 관리형 인메모리 데이터 스토어 및 캐시 서비스입니다. 이 서비스는 레디스와 Memcached를 지원하며, 이를 통해 고성능, 스케일링 가능한 및 비용 효율적인 인메모리 캐시 솔루션을 제공합니다.  Redis는 RDB가 아닙니다.RDB에서 IO를 줄이거나 슬로우쿼리가 약간 있거나 많은 게시물이 있을때 키 밸류의 인메모리 디비를 사용하면 잇점이 있기 때문에…
  • profile_image 현재 AWS의 오토스케일링 현황을 볼 수 있는 SDK 입니다.필요에 따라서 문제가 있을것으로 추정 되면 종료 시켜서 자동으로 새로 생성 되게 할 수 있습니다. 원하는용량 - 이것은 한번에 생성 시킬 인스턴스를 말합니다. 보통 1을 지정하기도 하는데 이보다는 부하가 있기 때문에 생성 시키는 것으로 최소 2이상을 주는 것이 더 좋겠습니다.아래 클래스는 오토스케일링 PHP SDK 현황 확인을 하는 것이며 아래쪽에 있는것은 종료 시키는 것입니다.  c…
  • profile_image 원격의 서버에 업그레이드를 해야 하는데 1대씩 들어가서 관리하는 방법도 있겠고 오토스케일링에 의해서 EC2가 자동으로 생성된것도 있고 할때 전체 서버에 명령을 내리기 위한 관리 프로그램입니다. AWS SSM(Systems Manager) IP로 접속하는 방식이 아닌 EC2 인스턴스ID를 이용해서 접속을 하는 방식입니다. 접속하게 되면 유저는 ssm-user로 표시되며 sudo -i 명령으로 root 유저로 전환이 가능 합니다. 사용하기 위해선 …