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

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

조회 1,080회 댓글 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 메소드를 사용해야 됩니다.


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



  $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.클라우드



  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
전체 62건 1 페이지
  • profile_image AWS 사용시 특별한 이유가 있는것이 아니라면 아마존리눅스(AL) 사용하는 것이 좋기 때문에 테스트 할때 PC 가상머신에 설치 후 사용해 보기 위해서 설치까지는 잘 되었는데요. 이런!! 설치는 잘 되었는데 로그인 하는 방법을 모르겠네요!! 이 부분은 다음 기회에~ 우선 AL2, AL3(2023) 아마존 리눅스 설치하는 방법에 관한 것입니다.우리가 AWS에서는 ssh2 접속할 때 비밀번호가 아니라 인증 파일을 통해서 접속을 하는데... PC에 설치 되었는데 IP도 모르겠고 초기 GRUE 메뉴 같은것이 나오는것도 아니고 하여 로그인 까지는 못해봤네요.아마존 리눅스는 CentOS 기반 입니다. 그렇기 때문에 명령어도 많이 비…
  • profile_image 페이지를 가져오지 못하니 404인가 아니면 서버쪽 설정 문제 이므로 500번때 코드가 나올까?결론은 아래 처럼 502 오류가 발생 합니다.ELB에서 리스너가 없을 경우 서버로 접속해서 데이터를 가져오지 못하는 상황에선 아래와 같은 메시지를 만나게 됩니다.포트지정 설정을 잘못해도 동일 하겠지요. 학술적으로 정리를 해보면 아래와 같이 말을 할 수 있다. HTTP 502 코드는 "Bad Gateway" 오류로 웹 서버가 게이트웨이나 프록시 서버를 통해 다른 서버로부터 유효하지 않거나 부적절한 응답을 받았을 때 발생 하게 되는데 부하분산 서버가 백엔드 서버들을 조정하며 클라이언트의 요청에 응답을 시도할 때 백엔드 서버의 응답이…
  • profile_image https용도로 사용할 수 있는 AWS Cerificate Manager 페이지에서의 인증서 생성하는 것에 대한 것입니다.이곳에선 외부에서 받은 인증서 파일을 올리거나 무료로 인증서를 생성 할 수 있습니다.AWS 무료인증서는 속도가 빠른 장점이 있고 무료이지만 문제는 이것을 다른곳에선 사용하지 못한 다는것입니다.예를 들면 EC2의 웹서버에서 https 용도로 사용하지 못합니다.그럼 EC2에선 외부에서 생성한 인증서를 가져와 사용하던가. 아니면 클라우드프론트에서 http로 접근하여 서비스 하는 방법이 있습니다.http https 혼용하면 실 수 할 수 있기 때문에 외부 인증서 비용들여서 구매한것을 사용하는것을 권장 합니다…
  • profile_image 클라우드 와치 수동으로 내보내기 하려 하는데 아래와 같은 메시지를 보게 되면GetBucketAcl call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation."S3 버킷에 대한 GetBucketAcl 호출 실패" 오류는 CloudWatch Logs가 지정된 S3 버킷에 대한 접근 권한이 없음을 의미 하기 때문에 문제를 해결하기 위해서는 S3 버킷 정책을 업데이트하여 CloudWatch Logs 서비스에 필요한 권한을 부여하면 된다.AWS는 설정 해줄 것이 상당히? 많다…
  • profile_image 온프레미스 환경에선 주기적으로 압축하여 보관하거나 복사하거나 해서 관리 후 삭제 하기도 하는데. 오토스케일링 사용으로 EC2가 없어지는 경우 이런 방식이 필요하다. 물론 EFS를 사용하는 방법도 있겠지만 난 그러고 싶지 않다. ● 클라우드와치 Agent를 설치 한다.yum -y install amazon-cloudwatch-agent▷ 아래는 테스트 하기 위한 로그를 2초에 한번 씩 발생 시킨다.while true; do (curl http://localhost; sleep 2); done프라이빗 네트워크라면 아래와 같이 하면 됩니다. www.test.com은 인증서가 있는 가상호스트curl -k --resolve ww…
  • profile_image NAT(Network Address Translation) 게이트웨이 구성으로 VPC(Virtual Private Cloud) 환경에서 프라이빗 서브넷에 있는 인스턴스들이 인터넷이나 AWS의 다른 공개 서비스에 접근할 수 있게 된다. ● NAT 게이트웨이NAT 게이트웨이는 AWS에서 관리하는 서비스로, 높은 가용성과 자동 확장 기능을 제공합니다. NAT 게이트웨이를 사용하면 별도의 관리 없이도 프라이빗 서브넷의 인스턴스가 인터넷에 접근할 수 있게 되는데 방법은 다음과 같다. 아래 EIP는 미리 만들어 놓으면 그것을 선택 할 수 있다.https://ap-northeast-2.console.aws.amazon.com/ec2…
  • profile_image 아마존리눅스2에서 기본적으로 mysql 클라이언트가 없어서 접속을 하지 못하는 문제가 있어서 설치 하는 도중에 발생한 문제를 다음에는 쉽게 해결하기 위해서 적습니다.이게 없으면 덤프받은것 올리지도 못하고 해당 서버에서 디비서버로 접속도 못하네요~● mysql 클라이언트 설치 시도amazon-linux-extras install epel -ywget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpmrpm -Uvh mysql80-community-release-el7-3.noarch.rpmyum install mysql-community-client …