Lambda에서 RDS Proxy를 통해 Aurora(MySQL)에 연결(IAM 인증)

기다리고 있었던 RDS Proxy가 도쿄 리전에서 GA되었습니다.
htps : // 아 ws. 아마존. 이 m / jp / b ぉ gs / 아 ws / 아마 존 - rds - p 로 xy - w- 게 네라 ly - 아 아 이 b b /

조속히, Lambda (으)로부터 이용할 기회가 있었으므로 메모해 둡니다.
이번에는 보안에 연결하기 위해 TLS + IAM 인증으로 연결합니다.
위에서 연결하면 Lambda에 자격 증명(구체적으로는 DB의 암호)의 취득 코드를 기재하지 않아도 되는 것이 꽤 좋은 느낌입니다.

전제


Aurora(MySQL) 존재

절차


  • Secrets Manager 설정
  • RDS Proxy 생성
  • Lambda에서 연결

  • Secrets Manager 설정



    관리 콘솔에서 Secrets Manager로 이동하여 자격 증명을 입력하고 비밀을 만듭니다.







    RDS 프록시 생성



    관리 콘솔에서 RDS로 이동하여 메뉴에서 Proxies -> 프록시 만들기 버튼 클릭으로 RDS Proxy를 만듭니다.



    TLS를 활성화하고,



    IAM 인증을 필수로 설정합니다.


    Proxy 엔드포인트는 나중에 사용할 수 있으므로 메모해 둡니다.



    Lambda에서 연결


    Node.js에서 기본 설정으로 만듭니다.


    LambdaVPC 리소스의 Aurora에 액세스하므로 VPC 연결이 필요합니다.
    따라서 먼저 Lambda에 역할을 부여해야 합니다.
    여기에서는 EC2FullAccess를 부여합니다.



    그런 다음 연결하려는 Aurora가 있는 VPCLambda에 연결합니다.



    그런 다음 Lambda에서 만든 RDS ProxyLambda에 추가합니다.



    프로그램



    상기에서 모든 설정이 완료되었으므로, 프로그램을 기재해 갑니다.

    ※ 샘플 코드 전량
    htps : // 기주 b. 이 m/테아로스에/아 ws-ぁmb다-사 mpぇ/bぉb/마s r/rds_p로 xy/그리고 x. js

    MySQL 클라이언트가 필요하므로 npm 패키지를 포함하여 zip으로 업로드하십시오.
    빨리 시도하고 싶은 분은 아래 명령으로 zip을 작성하고 업로드하십시오. ※ yarn이나 npm이 인스톨 되고 있는 전제입니다.
    $ git clone [email protected]:Thirosue/aws-lambda-sample.git # サンプルコードをclone
    $ cd aws-lambda-sample/rds_proxy/ # 対象ディレクトリに移動
    $ yarn # もしくは npm install
    $ zip -r src.zip index.js node_modules/ # アップロード用のzip作成
    

    node.js
    let AWS = require('aws-sdk');
    const mysql2 = require('mysql2/promise');
    
    let connection;
    const username = 'admin'; // 接続ユーザを設定してください。
    
    exports.handler = async(event) => {
        console.log("Starting query ...\n");
        console.log("Running iam auth ...\n");
    
        const signer = new AWS.RDS.Signer({
            region: 'ap-northeast-1',
            hostname: process.env['proxy_endpoint'], // メモしておいたプロキシエンドポイントを設定します。ここでは環境変数から取得しています。
            port: 3306,
            username
        });
    
        const token = signer.getAuthToken({
          username
        });
        console.log(token);
        console.log ("IAM Token obtained\n");
    
        const connectionConfig = {
          host: process.env['proxy_endpoint'], // メモしておいたプロキシエンドポイントを設定します。
          user: username,
          database: 'mysql', // データベース名を設定してください。
          ssl: 'Amazon RDS',
          password: token,
          authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() }
        };
    
        connection = await mysql2.createConnection(connectionConfig);   
        const [rows, fields] = await connection.query("SELECT 1");
        console.log(rows);
    };
    

    업로드 후 테스트 이벤트를 만들고 콘솔에서 테스트하면 성공적으로 연결되었는지 확인할 수 있습니다.



    참고 링크


  • AWS 공식

  • htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / ぁ mb다 / ㅁ st / dg / 곤후 쿠라 치온 - 담배. HTML
  • htps : // 아 ws. 아마존. 코 m / jp / b ぉ gs / 코 m 뿌테 / 우신 g - 아마 존 - rds - p 로 xy - ぃ th a ws - mb이다 /

  • 좋은 웹페이지 즐겨찾기