<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>2DH</title>
    <link>https://jtoday.tistory.com/</link>
    <description>becoming the data engineer</description>
    <language>ko</language>
    <pubDate>Wed, 29 Jul 2026 21:52:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>J_Today</managingEditor>
    <image>
      <title>2DH</title>
      <url>https://tistory1.daumcdn.net/tistory/1418349/attach/1b8d12e63b8b48d29d66715cbbea1b2e</url>
      <link>https://jtoday.tistory.com</link>
    </image>
    <item>
      <title>AWS QuickSight DataSet 갱신(Refresh using Lambda, API Gateway)</title>
      <link>https://jtoday.tistory.com/139</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS QuickSight DataSet Refresh&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Architecture&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Kupd/btstNCDnqLJ/2DqkOjoKF7Y1TzPt1rE9fK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Prerequired&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 QuickSight DataSet 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 데이터나 데이터 셋으로 생성&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 해당 데이터 셋 ID 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS CLI로 확인 가능&lt;/p&gt;
&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;aws quicksight list-data-sets --aws-account-id xxxxxxx&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;{       &quot;Arn&quot;: &quot;arn:aws:quicksight:ap-northeast-2:xxxxxxx:dataset/6bfd9fef-3376-492b-9f75-91506a2f789b&quot;,       &quot;DataSetId&quot;: &quot;6bfd9fef-3376-492b-9f75-91506a2f789b&quot;,       &quot;Name&quot;: &quot;**refresh_data_test_set**&quot;,       &quot;CreatedTime&quot;: 1683604683.724,       &quot;LastUpdatedTime&quot;: 1683604839.899,       &quot;ImportMode&quot;: &quot;SPICE&quot;,       &quot;RowLevelPermissionTagConfigurationApplied&quot;: false,       &quot;ColumnLevelPermissionRulesApplied&quot;: false },&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 Lamba Role 생성&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3.1 Lambda to Stepfunction&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Name : &lt;b&gt;lambda_to_stepfunction_role&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;AWS Policy
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;AWSStepFunctionsConsoleFullAccess&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3.2 Lambda to Quicksight&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Name : &lt;b&gt;lambda_to_quickight_refresh_role&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Policy
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Name : &lt;b&gt;hist_quicksight_dataset_refresh_policy&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Json&lt;/code&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Sid&quot;: &quot;QuickSightAccess&quot;,
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;quicksight:DescribeDataSet&quot;,
                &quot;quicksight:PassDataSet&quot;,
                &quot;quicksight:RefreshDataSet&quot;,
                &quot;quicksight:ListDataSets&quot;,
                &quot;quicksight:CreateIngestion&quot;,
                                &quot;quicksight:DescribeIngestion&quot;
            ],
            &quot;Resource&quot;: &quot;*&quot;
        }
    ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AWS Policy
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;CloudWatchLogsFullAccess&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPpyKB/btstNy15Pb1/NjcFuc1w1WHKzLkqFjeGWK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Lambda Refresh Quicksight&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 Lambda Function&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Name : &lt;b&gt;lambda_quicksight_dataset_refresh&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Role : &lt;b&gt;lambda_to_quickight_refresh_role&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Python&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1694570968985&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import boto3
import calendar
import time
import json 

# 주석 처리 된 부분은 데이터셋을 여러개 Refresh할때
# def refresh_dataset(is_wait):
# 	aws_account_id = &quot;xxxxxxx&quot;
# 	client = boto3.client('quicksight',  region_name=&quot;ap-northeast-2&quot;)
# 	res = client.list_data_sets(AwsAccountId=aws_account_id)
	    
# 	    # filter out your datasets using a prefix. All my datasets have chicago_crimes as their prefix
# 	datasets_ids = [summary[&quot;DataSetId&quot;] for summary in res[&quot;DataSetSummaries&quot;] if &quot;refresh_data_test_set&quot;.upper() in summary[&quot;Name&quot;].upper()]

# 	ingestion_ids = []
# 	for dataset_id in datasets_ids:
# 	    try:
# 	        ingestion_id = str(calendar.timegm(time.gmtime()))
# 	        client.create_ingestion(DataSetId=dataset_id, IngestionId=ingestion_id,
# 	                                            AwsAccountId=aws_account_id)
# 	        ingestion_ids.append(ingestion_id)
# 	    except Exception as e:
# 	        print(e)
# 	        pass

# 	for ingestion_id, dataset_id in zip(ingestion_ids, datasets_ids):
# 	    while True:
# 	        response = client.describe_ingestion(DataSetId=dataset_id,
# 	                                                IngestionId=ingestion_id,
# 	                                                AwsAccountId=aws_account_id)
# 	        if response['Ingestion']['IngestionStatus'] in ('INITIALIZED', 'QUEUED', 'RUNNING'):
# 	            time.sleep(5)     #change sleep time according to your dataset size
# 	        elif response['Ingestion']['IngestionStatus'] == 'COMPLETED':
# 	            print(&quot;refresh completed. RowsIngested {0}, RowsDropped {1}, IngestionTimeInSeconds {2}, IngestionSizeInBytes {3}&quot;.format(
# 	                response['Ingestion']['RowInfo']['RowsIngested'],
# 	                response['Ingestion']['RowInfo']['RowsDropped'],
# 	                response['Ingestion']['IngestionTimeInSeconds'],
# 	                response['Ingestion']['IngestionSizeInBytes']))
# 	            break
# 	        else:
# 	            print(&quot;refresh failed for {0}! - status {1}&quot;.format(dataset_id, response['Ingestion']['IngestionStatus']))
# 	            break

def refresh_single_dataset():
	# Initialize the QuickSight client
    quicksight = boto3.client('quicksight')
    
    # Set the dataset ID that needs to be refreshed
    dataset_id = '6bfd9fef-3376-492b-9f75-91506a2f789b' # Sample Dataset ID
    
    aws_account_id = &quot;xxxxxxxx&quot;
    # Refresh the dataset
    response = quicksight.create_ingestion(
    	DataSetId=dataset_id,
	    IngestionId='refresh_data_test_set',
	    AwsAccountId=aws_account_id,
	    IngestionType='FULL_REFRESH'
	    )
    return response
	        
def lambda_handler(event, context):
    
    response = refresh_single_dataset()
    print(response)
    return {
        'statusCode': 200,
        'body': json.dumps('Refresh Quicksight Dataset Done!')
    }&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2 결과&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvqv8r/btstMmgJ921/ehIqxjI0HjmYnlyXFKzVek/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Stepfunction&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;샘플 데이터는 Dimension 성 데이터 세트&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1 State Mahcine Graph&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QpuLk/btstSzMBDuS/887oxW5L4jcDRclzfmYL3K/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.2 Script&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Lambda 호출할때 외부 Lambda인지 여부에 따라서 IAM Role ARN입력하는 부분이 있는데 해당 부분을 빼고 넣어야 된다. 아니면 Stepfunction Role 에 Lambda Role 권한을 추가 하여 사용할 수 있도록 해줘야됨.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Script&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1694570992182&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;Comment&quot;: &quot;A description of my state machine&quot;,
  &quot;StartAt&quot;: &quot;Glue StartJobRun - Dimension Data&quot;,
  &quot;States&quot;: {
    &quot;Glue StartJobRun - Dimension Data&quot;: {
      &quot;Type&quot;: &quot;Task&quot;,
      &quot;Resource&quot;: &quot;arn:aws:states:::glue:startJobRun.sync&quot;,
      &quot;Parameters&quot;: {
        &quot;JobName&quot;: &quot;jb_hist_plan_ma_init_dimension_d2s&quot;
      },
      &quot;Next&quot;: &quot;StartCrawler - Dimension&quot;
    },
    &quot;StartCrawler - Dimension&quot;: {
      &quot;Type&quot;: &quot;Task&quot;,
      &quot;Parameters&quot;: {
        &quot;Name&quot;: &quot;cr_hist_plan_ma_dimension&quot;
      },
      &quot;Resource&quot;: &quot;arn:aws:states:::aws-sdk:glue:startCrawler&quot;,
      &quot;ResultPath&quot;: null,
      &quot;Next&quot;: &quot;GetCrawler - Dimension&quot;
    },
    &quot;GetCrawler - Dimension&quot;: {
      &quot;Type&quot;: &quot;Task&quot;,
      &quot;Parameters&quot;: {
        &quot;Name&quot;: &quot;cr_hist_plan_ma_dimension&quot;
      },
      &quot;Resource&quot;: &quot;arn:aws:states:::aws-sdk:glue:getCrawler&quot;,
      &quot;ResultPath&quot;: &quot;$.GetCrawler&quot;,
      &quot;Next&quot;: &quot;Choice - Dimension&quot;
    },
    &quot;Choice - Dimension&quot;: {
      &quot;Type&quot;: &quot;Choice&quot;,
      &quot;Choices&quot;: [
        {
          &quot;Variable&quot;: &quot;$.GetCrawler.Crawler.State&quot;,
          &quot;StringEquals&quot;: &quot;RUNNING&quot;,
          &quot;Next&quot;: &quot;Wait - Bronze&quot;
        }
      ],
      &quot;Default&quot;: &quot;Lambda Refresh Quicksight Dataset&quot;
    },
    &quot;Lambda Refresh Quicksight Dataset&quot;: {
      &quot;Type&quot;: &quot;Task&quot;,
      &quot;Resource&quot;: &quot;arn:aws:states:::lambda:invoke&quot;,
      &quot;OutputPath&quot;: &quot;$.Payload&quot;,
      &quot;Parameters&quot;: {
        &quot;FunctionName&quot;: &quot;arn:aws:lambda:ap-northeast-2:xxxxxxx:function:lambda_quicksight_dataset_refresh:$LATEST&quot;
      },
      &quot;Retry&quot;: [
        {
          &quot;ErrorEquals&quot;: [
            &quot;Lambda.ServiceException&quot;,
            &quot;Lambda.AWSLambdaException&quot;,
            &quot;Lambda.SdkClientException&quot;,
            &quot;Lambda.TooManyRequestsException&quot;
          ],
          &quot;IntervalSeconds&quot;: 2,
          &quot;MaxAttempts&quot;: 6,
          &quot;BackoffRate&quot;: 2
        }
      ],
      &quot;End&quot;: true
    },
    &quot;Wait - Bronze&quot;: {
      &quot;Type&quot;: &quot;Wait&quot;,
      &quot;Seconds&quot;: 5,
      &quot;Next&quot;: &quot;GetCrawler - Dimension&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.3 결과&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpp09R/btstOirkoOJ/K4aCdjlIBNkzekkAK5f2m0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. Lambda to Stepfunction&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Name : &lt;b&gt;lambda_oracle_etl&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Script&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1694571015572&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import json
import boto3

def lambda_handler(event, context):
    # TODO implement

    client = boto3.client('stepfunctions')
    
    response =client.start_execution(
        stateMachineArn='arn:aws:states:ap-northeast-2:xxxxxx:stateMachine:sf_refreshdata_test_machine'
    )
    
    try:
        statusCode = response[&quot;ResponseMetadata&quot;][&quot;HTTPStatusCode&quot;]
    except:
        statusCode = 400
    
    return{
        'statusCode': statusCode
    }&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. API Gateway&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6.1 REST API 생성&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6.1.1 구축&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzn3Ci/btstHcTlV8b/1YdbnL4OIEzkbOpAczlXzk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6.1.2 프로토콜 선택&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKQzoe/btstMh0I6Kd/26q2Alx9SVXO3fEVDcZc9k/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6.1.3 리소스 생성&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxAaWg/btstMe36LDy/w0Suwk60aySAticWFdV6Y1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lo4HY/btstLQCinWm/xmKWyLi8luujkxjPQzn6g1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6.1.4 매서드 생성&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;매서드 생성&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5WcVh/btstVf1c7Uv/nCjLoxPLflew7Piwky0dY1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/li&gt;
&lt;li&gt;POST 선택&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5xvfq/btstHaVwfj4/chDR0yJrOo6FTqLkq8hKl0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Lambda 함수 선택&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MF9XQ/btstQR1kUTn/p3vXWIoT3fiKXyQiM0L0H1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;권한 부여&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Jyy6/btstG5T986b/mvnzzAticOjOisOHUz4btK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;생성확인&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BtJmS/btstG7dqlgy/3uK1bnQgNgNDvcCu5kbQ00/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;테스트 수행&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uFEaj/btstG5mjsEf/9kj0zN7i52BmVln2BJQhM1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpbXil/btstTszGB1z/e0KH4gLpPGaYVyyAERmim0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6.1.5 API 배포&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sWcK0/btstNA6FD45/1Vad1u1vv5j0915QEnXIt0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LGAp5/btstNz0XmHD/KSuDaKNEyEna6YWt1xIU7k/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JlLhQ/btstMla2sxk/5KsOr6nZghzhA5MGUBTrN1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HjDFs/btstRsmUaM8/senSAfxhYepqLbvL5ioTdk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6.2 결과확인&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6.2.1 API 호출&lt;/h4&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;curl -XPOST https://tgbroiufze.execute-api.ap-northeast-2.amazonaws.com/PROD/v1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6.2.2 결과&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhZluv/btstOkvWxYl/X2GuhkiGwqZeknYU2tz4L1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LUH9e/btstMk4dFSP/A0KPQVSG6Cm6len7mIWgzk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;</description>
      <category>AWS/Hands On</category>
      <category>apigateway</category>
      <category>AWS</category>
      <category>dataset</category>
      <category>lambda</category>
      <category>quicksight</category>
      <category>refresh</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/139</guid>
      <comments>https://jtoday.tistory.com/139#entry139comment</comments>
      <pubDate>Wed, 13 Sep 2023 11:06:59 +0900</pubDate>
    </item>
    <item>
      <title>6.Install Database on Ec2(Grafana)</title>
      <link>https://jtoday.tistory.com/138</link>
      <description>&lt;article class=&quot;markdown-body entry-content&quot;&gt;
&lt;h2 id=&quot;8-monitoring-2grafana&quot; data-ke-size=&quot;size26&quot;&gt;8. Monitoring 2(&lt;code&gt;Grafana&lt;/code&gt;)&lt;/h2&gt;
&lt;h3 id=&quot;81-설치public-ec2&quot; data-ke-size=&quot;size23&quot;&gt;8.1 설치(Public EC2)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Public EC2에 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key  ## repository 연결 echo &quot;deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main&quot; | sudo tee -a /etc/apt/sources.list.d/grafana.list  sudo apt-get update  ## Install the latest OSS release: sudo apt-get install grafana  ## reload daemon and start server, check server  sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl status grafana-server  ## Configure the Grafana server to start at boot: ## sudo systemctl enable grafana-server.service&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;82-security-group&quot; data-ke-size=&quot;size23&quot;&gt;8.2 Security Group&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Public Security Group
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Port : 3000&lt;/li&gt;
&lt;li&gt;Source : My IP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;초기 id 비번 admin/admin
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;83-테스트&quot; data-ke-size=&quot;size23&quot;&gt;8.3 테스트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;public ec2 ip:3000 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;84-datasource&quot; data-ke-size=&quot;size23&quot;&gt;8.4 DataSource&lt;/h3&gt;
&lt;h5 id=&quot;841-postgresqldirect-연결&quot;&gt;8.4.1 PostgreSQL(Direct 연결)&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Private EC2 IP&lt;/li&gt;
&lt;li&gt;SSL 등록이 안되어있으니 SSL 은 Disable&lt;/li&gt;
&lt;li&gt;Save &amp;amp; Test &amp;rarr; Connection OK 또는 Data source is working&lt;/li&gt;
&lt;li&gt;매번 Pull을 진행할때마다 DB에 요청하므로 중간 매개체가 있는 것이 좋다 &amp;rarr; Prometheus&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/Voqdl/btstSg7pbqP/ZEpb5un0bS93q6KKIajMlk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h5 id=&quot;842-prometheus&quot;&gt;8.4.2 Prometheus&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP URL : http://privateec2ip:9090&lt;/li&gt;
&lt;li&gt;Save &amp;amp; Test &amp;rarr; Data source is working&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/b80utg/btstSA5NtoL/xU4QZWzENrvxqT4HM6aDC0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;85-dashboard&quot; data-ke-size=&quot;size23&quot;&gt;8.5 Dashboard&lt;/h3&gt;
&lt;h5 id=&quot;851-template&quot;&gt;8.5.1 Template&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Dashboard Template을 보고 마음에 드는 항목을 선택하여 적용하면 됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://grafana.com/grafana/dashboards/9628-postgresql-database/&quot;&gt;PostgreSQL Database | Grafana Labs&lt;/a&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Template ID 복사 해서 Import 에 Template ID를 입력.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://grafana.com/grafana/dashboards/1860-node-exporter-full/&quot;&gt;Node Exporter Full | Grafana Labs&lt;/a&gt;&lt;/p&gt;
&lt;h5 id=&quot;852-부하테스트&quot;&gt;8.5.2 부하테스트&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1차 PostgreSQL은 Data Import를 통해 테스트(스크린샷 X)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;sudo apt-get install -y stress  stress --cpu 1 --timeout 600 # cpu test 100% 다 쓰도록  stress --vm 2 --vm-bytes 200m # ram test 2프로세스  메모리 200m 사용하도록\&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxIWmj/btstMDJiPRl/Pn6KkSdBzDZkREIvstNBC0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;9--기타mongodb-redis-prometheus&quot; data-ke-size=&quot;size26&quot;&gt;9 . 기타(MongoDB, Redis Prometheus)&lt;/h2&gt;
&lt;h3 id=&quot;91-mongo-db-참고&quot; data-ke-size=&quot;size23&quot;&gt;9.1 Mongo DB 참고&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://suyeonchoi.tistory.com/2&quot;&gt;[Grafana]Grafana에 MongoDB 데이터 불러오기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-monitor-mongodb-with-grafana-and-prometheus-on-ubuntu-20-04&quot;&gt;How To Monitor MongoDB with Grafana and Prometheus on Ubuntu 20.04 | DigitalOcean&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;92-redis-참고&quot; data-ke-size=&quot;size23&quot;&gt;9.2 Redis 참고&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/PostView.naver?blogId=whddbsml&amp;amp;logNo=222406296469&amp;amp;parentCategoryNo=&amp;amp;categoryNo=&amp;amp;viewDate=&amp;amp;isShowPopularPosts=false&amp;amp;from=postView&quot;&gt;[Prometheus] Redis 모니터링 구성&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;10-monitoring-3mongodb&quot; data-ke-size=&quot;size26&quot;&gt;10. Monitoring 3(MongoDB)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 내용은 진행이 안될 수 도 있음을 참고하시기 바랍니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;mkdir mongodb-exporter cd mongodb-exporter  wget https://github.com/percona/mongodb_exporter/releases/download/v0.7.1/mongodb_exporter-0.7.1.linux-amd64.tar.gz  tar xvzf mongodb_exporter-0.7.1.linux-amd64.tar.gz rm mongodb_exporter-0.7.1.linux-amd64.tar.gz  sudo mv mongodb_exporter /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;102-enabling-mongodb-authentication&quot; data-ke-size=&quot;size23&quot;&gt;10.2 &lt;b&gt;Enabling MongoDB Authentication&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;mongosh  use admin  db.createUser({user: &quot;test&quot;,pwd: &quot;testing&quot;,roles: [{ role: &quot;clusterMonitor&quot;, db: &quot;admin&quot; },{ role: &quot;read&quot;, db: &quot;local&quot; }]})&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;103-mongodb-uri-to-environment-variable&quot; data-ke-size=&quot;size23&quot;&gt;10.3 MongoDB URI to Environment variable&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;vi ~/.profile  export MONGODB_URI=mongodb://test:testing@localhost:27017  env | grep mongodb ## outpout  PWD=/home/ubuntu/tmp_file/mongodb-exporter MONGODB_URI=mongodb://mongodb_exporter:password@localhost:27017&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;104-creating-a-service-for-the-mongodb-exporter&quot; data-ke-size=&quot;size23&quot;&gt;10.4 &lt;b&gt;Creating a Service for the MongoDB exporter&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;cd /lib/systemd/system/ sudo vi mongodb_exporter.service  [Unit] Description=MongoDB Exporter User=ubuntu  [Service] Type=simple Restart=always ExecStart=/usr/local/bin/mongodb_exporter  [Install] WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;105-reload-daemon-and-start-service&quot; data-ke-size=&quot;size23&quot;&gt;10.5 Reload Daemon and Start Service&lt;/h3&gt;
&lt;pre class=&quot;smali&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload sudo systemctl start mongodb_exporter.service sudo systemctl status mongodb_exporter.service&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctXONG/btstK0dW44Y/4bnoMoJT8j5WumEGMyMcf0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;106-check-metrics-port-9216&quot; data-ke-size=&quot;size23&quot;&gt;10.6 Check Metrics (Port 9216)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Port : 9216 을 통해 Metrics 정보 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;cd ~ sudo curl http://localhost:9216/metrics&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca87sl/btstRJBXkhc/y2Pu2Qfd5D71CtMndQ7RuK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Z4Ij/btstLQbf4mL/GHdlyOZAJhxHlOduSBPHzK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;107-prometheus-configuration&quot; data-ke-size=&quot;size23&quot;&gt;10.7 Prometheus Configuration&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MongoDB Exporter 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;## sudo vi /etc/prometheus/prometheus.yml  vi prometheus.yml  - job_name: &quot;mongodb&quot;     static_configs:       - targets: [&quot;localhost:9216&quot;]         labels:           instance: mongodb&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;108-grafana-dashboard-추가&quot; data-ke-size=&quot;size23&quot;&gt;10.8 Grafana Dashboard 추가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://grafana.com/grafana/dashboards/7353-mongodb-overview/&quot;&gt;MongoDB Overview | Grafana Labs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;11-monitoring-4redis&quot; data-ke-size=&quot;size26&quot;&gt;11. Monitoring 4(Redis)&lt;/h2&gt;
&lt;h3 id=&quot;110-redis-설정-변경&quot; data-ke-size=&quot;size23&quot;&gt;11.0 Redis 설정 변경&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;redis-cli  CONFIG SET protected-mode no &amp;gt;OK&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;111-download&quot; data-ke-size=&quot;size23&quot;&gt;11.1 DOWNLOAD&lt;/h3&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;wget https://github.com/oliver006/redis_exporter/releases/download/v1.24.0/redis_exporter-v1.24.0.linux-amd64.tar.gz  tar -zxvf redis_exporter-v1.24.0.linux-amd64.tar.gz  sudo mv redis_exporter /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;112-systemd-등록&quot; data-ke-size=&quot;size23&quot;&gt;11.2 Systemd 등록&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo vi /etc/systemd/system/redis_exporter.service  [Unit] Description=Redis Exporter Wants=network-online.target After=network-online.target  [Service] User=ubuntu Group=ubuntu Type=simple ExecStart=/usr/local/bin/redis_exporter \     -web.listen-address &quot;:9121&quot; \     -redis.addr &quot;redis://10.0.157.31:6379&quot; \  [Install] WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;113-systemd-실행&quot; data-ke-size=&quot;size23&quot;&gt;11.3 Systemd 실행&lt;/h3&gt;
&lt;pre class=&quot;smali&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload sudo systemctl enable redis_exporter sudo systemctl start redis_exporter&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;114-테스트&quot; data-ke-size=&quot;size23&quot;&gt;11.4 테스트&lt;/h3&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;curl http://localhost:9121/target curl http://localhost:9121/metrics&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;115-prometheus-수정&quot; data-ke-size=&quot;size23&quot;&gt;11.5 Prometheus 수정.&lt;/h3&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;sudo vi /etc/prometheus/prometheus.yml  - job_name: &quot;redis&quot;     static_configs:       - targets: [&quot;localhost:9121&quot;]         labels:           instance: redis-db&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;116-서비스-수정&quot; data-ke-size=&quot;size23&quot;&gt;11.6 서비스 수정&lt;/h3&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;sudo systemctl restart prometheus&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;117-dashboard-추가&quot; data-ke-size=&quot;size23&quot;&gt;11.7 Dashboard 추가&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ID : 11835 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbIrsI/btstHaHWRUL/WaJfVbuI9yBaqhtEPZvzpK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/article&gt;</description>
      <category>AWS/EC2</category>
      <category>AWS</category>
      <category>EC2</category>
      <category>grafana</category>
      <category>MongDB Exporter</category>
      <category>monitoring</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/138</guid>
      <comments>https://jtoday.tistory.com/138#entry138comment</comments>
      <pubDate>Wed, 13 Sep 2023 10:37:55 +0900</pubDate>
    </item>
    <item>
      <title>5.Install Database on EC2(Monitoring, Prometheus, PostgreSQL Exporter, Node Exporter)</title>
      <link>https://jtoday.tistory.com/137</link>
      <description>&lt;article class=&quot;markdown-body entry-content&quot;&gt;
&lt;h2 id=&quot;7-monitoring-1prometheus-postgresql-exporter-node-exporter&quot; data-ke-size=&quot;size26&quot;&gt;7. Monitoring 1(Prometheus, PostgreSQL Exporter, Node Exporter)&lt;/h2&gt;
&lt;h3 id=&quot;71-architecture&quot; data-ke-size=&quot;size23&quot;&gt;7.1 Architecture&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 사용하는 Database의 사용 관련한 지표를 수집하고 시각화해줄 수 있는 형태가 필요함&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PostgreSQL&lt;/code&gt; &amp;rarr; &lt;code&gt;Prometheus&lt;/code&gt; &amp;rarr; &lt;code&gt;Grafana&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;형태로 진행되는것을 많이 사용함 여기서 Promethenus 를 InfluxDB를 사용하기도 한다고함.&lt;/li&gt;
&lt;li&gt;여기서 PostgreSQL에서 Grafana로 바로 접근할 수 있지만 바로 접근한다면 이것 또한 DB 과부하의 영향을 줄 수 있는 형태로 Prometheus를 중간 매개체 역할을 수행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgDC85/btstRIJOtlB/R7IFtThsArfLJHfBvvyzRK/img.png&quot; alt=&quot;[https://badcandy.github.io/2018/12/25/prometheus-architecture/&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://badcandy.github.io/2018/12/25/prometheus-architecture/&quot;&gt;참조 : https://badcandy.github.io/2018/12/25/prometheus-architecture/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;72-pull-metrics&quot; data-ke-size=&quot;size23&quot;&gt;7.2 PULL Metrics&lt;/h3&gt;
&lt;h5 id=&quot;721-pull-metrics&quot;&gt;7.2.1 Pull MEtrics&lt;/h5&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Prometheus는 Pull 방식을 통해 데이터를 수집 즉, 해당 데이터를 요청을 직접하여 데이터를 수집해서 감.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 HTTP ENDPOINT를 통해 접근을 하는데, 예를 들어&amp;nbsp;&lt;code&gt;/api/testservice/metric&lt;/code&gt;&amp;nbsp;과 같이 해당 포인트를 열어 놓는다면, Prometheus가 HTTP 요청을 통해 데이터를 수집할 수 있다.&lt;/p&gt;
&lt;h5 id=&quot;722-exporter&quot;&gt;7.2.2 Exporter&lt;/h5&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP Endpoint를 각 시스템에 맞게 수집할 수 있게 만들어 놓은 것이 &lt;code&gt;Exporter&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서에는 다양한 Exporter가 존재하고 이번 실습에서 사용한 Exporter는 총 2개&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Node Exporter&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 사용하는 서버의 정보(Metrics)를 수집하여 서버의 사용량으 모니터링에 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Postgresql Exporter&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PostgreSQL의 사용량을 관리하는 모니터링에 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIGQxB/btstMloyiWv/LqREmzLcf5aIVanUkKY0zk/img.png&quot; alt=&quot;[https://velog.io/@anrnyeondo/모니터링-환경-구축-prometheus&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@anrnyeondo/%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-prometheus&quot;&gt;참조 : https://velog.io/@anrnyeondo/모니터링-환경-구축-prometheus&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;73-node-exporter-설치&quot; data-ke-size=&quot;size23&quot;&gt;7.3 Node Exporter 설치&lt;/h3&gt;
&lt;h5 id=&quot;731-다운로드-및-폴더-이동&quot;&gt;7.3.1 다운로드 및 폴더 이동&lt;/h5&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz  tar -xvzf node_exporter-1.0.1.linux-amd64.tar.gz  sudo mv node_exporter-1.0.1.linux-amd64/node_exporter /usr/sbin/&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;732-node_exporter-서비스-등록&quot;&gt;7.3.2 node_exporter 서비스 등록&lt;/h5&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo vi /etc/systemd/system/node_exporter.service  [Unit] Description=Node Exporter [Service] User=ubuntu EnvironmentFile=/etc/sysconfig/node_exporter ExecStart=/usr/sbin/node_exporter $OPTIONS [Install] WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;733-config-파일-생성&quot;&gt;7.3.3 Config 파일 생성&lt;/h5&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;sudo mkdir -p /etc/sysconfig sudo touch /etc/sysconfig/node_exporter # OPTIONS=&quot;--collector.textfile.directory /var/lib/node_exporter/textfile_collector&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;734-daemon-reload--service-start&quot;&gt;7.3.4 Daemon Reload &amp;amp; Service Start&lt;/h5&gt;
&lt;pre class=&quot;smali&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload sudo systemctl enable node_exporter.service sudo systemctl start node_exporter.service  sudo systemctl status node_exporter.service&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;735-테스트&quot;&gt;7.3.5 테스트&lt;/h5&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;curl http://localhost:9100/metrics curl http://localhost:9100/target&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;74-postgres-exporter-설치&quot; data-ke-size=&quot;size23&quot;&gt;7.4 Postgres Exporter 설치&lt;/h3&gt;
&lt;h5 id=&quot;741-설치&quot;&gt;7.4.1 설치&lt;/h5&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;wget https://github.com/wrouesnel/postgres_exporter/releases/download/v0.8.0/postgres_exporter_v0.8.0_linux-amd64.tar.gz  sudo tar -xvzf postgres_exporter_v0.8.0_linux-amd64.tar.gz  sudo mv postgres_exporter_v0.8.0_linux-amd64/postgres_exporter /usr/local/bin/  sudo chown -R postgres:postgres /usr/local/bin/postgres_exporter&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;742-postgres_exporter-서비스-등록&quot;&gt;7.4.2 Postgres_exporter 서비스 등록&lt;/h5&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo vi /etc/systemd/system/postgres_exporter.service  [Unit] Description=Prometheus PostgreSQL Exporter After=network.target  [Service] Type=simple Restart=always User=postgres Group=postgres #Environment=DATA_SOURCE_NAME=&quot;user=postgres host=/var/run/postgresql/ sslmode=disable&quot; Environment=DATA_SOURCE_NAME=postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable ExecStart=/usr/local/bin/postgres_exporter [Install] WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;743-daemon-실행&quot;&gt;7.4.3 Daemon 실행&lt;/h5&gt;
&lt;pre class=&quot;smali&quot;&gt;&lt;code&gt;sudo systemctl daemon-reload sudo systemctl enable postgres_exporter.service sudo systemctl start postgres_exporter.service  sudo systemctl status postgres_exporter.service&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;744-테스트&quot;&gt;7.4.4 테스트&lt;/h5&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;curl http://localhost:9187/metrics # postgresql-exporter&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;745-postgresql와-연결-필요-프로그램-설치&quot;&gt;7.4.5 PostgreSQL와 연결 필요 프로그램 설치&lt;/h5&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;sudo apt-get update sudo apt-get -y upgrade  sudo apt-get install golang-go  go env -w GO111MODULE=auto # 이걸 안하면 에러가 발생한다.  go get github.com/lib/pq  ## configure 설정 sudo su postgres ## cd /usr/local/pgsql/data/.  # 설치형으로 했을때 Path ## vi pg_hba.conf sudo vi /etc/postgresql/13/main/pg_hba.conf  -맨 하단부 내용 수정- (아래 내용이 기존 내용과 수정해서 추가가 되어야함) local   all             all                                     md5 host    all             all             127.0.0.1/32            trust ## host    replication     all             ::1/128                 trust host    all             all             0.0.0.0/0               md5&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;75-prometheus-설치&quot; data-ke-size=&quot;size23&quot;&gt;7.5 Prometheus 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조 : &lt;a href=&quot;https://prometheus.io/download/&quot;&gt;https://prometheus.io/download/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조 : &lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-monitor-mongodb-with-grafana-and-prometheus-on-ubuntu-20-04&quot;&gt;https://www.digitalocean.com/community/tutorials/how-to-monitor-mongodb-with-grafana-and-prometheus-on-ubuntu-20-04&lt;/a&gt;&lt;/p&gt;
&lt;h5 id=&quot;751-폴더-생성-및-다운로드&quot;&gt;7.5.1 폴더 생성 및 다운로드&lt;/h5&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;sudo apt update ## create prometheus configuration folder sudo mkdir -p /etc/prometheus  ## create prometheus data folder sudo mkdir -p /var/lib/prometheus  wget https://github.com/prometheus/prometheus/releases/download/v2.37.5/prometheus-2.37.5.linux-amd64.tar.gz  tar xzvf prometheus-2.37.5.linux-amd64.tar.gz  cd prometheus-2.37.5.linux-amd64&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;752-파일-이동&quot;&gt;7.5.2 파일 이동&lt;/h5&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;## move the prometheus and promtool binary files to the /usr/local/bin/ sudo mv prometheus promtool /usr/local/bin/  ## related files mv to /etc/prometheus sudo mv consoles/ console_libraries/ /etc/prometheus/  ## prometheus.yml to /etc/prometheus sudo mv prometheus.yml /etc/prometheus/prometheus.yml&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;753-version-check&quot;&gt;7.5.3 Version Check&lt;/h5&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;ubuntu@ip-10-0-157-31:~/download/prometheus-2.37.5.linux-amd64$ prometheus --version prometheus, version 2.37.5 (branch: HEAD, revision: 8d25a0867918173e501b417e7acd85861df8fb0e)   build user:       root@fa6380105630   build date:       20221209-12:46:41   go version:       go1.18.9   platform:         linux/amd64&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;754-사용자-추가-후-권한-부여&quot;&gt;7.5.4 사용자 추가 후 권한 부여&lt;/h5&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;sudo groupadd --system prometheus  sudo useradd -s /sbin/nologin --system -g prometheus prometheus  sudo chown -R prometheus:prometheus /etc/prometheus/ /var/lib/prometheus/ sudo chmod -R 775 /etc/prometheus/ /var/lib/prometheus/&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;755-서비스-등록&quot;&gt;7.5.5 서비스 등록&lt;/h5&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo nano /etc/systemd/system/prometheus.service  [Unit] Description=Prometheus Wants=network-online.target After=network-online.target  [Service] User=prometheus Group=prometheus Restart=always Type=simple ExecStart=/usr/local/bin/prometheus \     --config.file=/etc/prometheus/prometheus.yml \     --storage.tsdb.path=/var/lib/prometheus/ \     --web.console.templates=/etc/prometheus/consoles \     --web.console.libraries=/etc/prometheus/console_libraries \     --web.listen-address=0.0.0.0:9090  [Install] WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;756-prometheus-에-exporter-연결&quot;&gt;7.5.6 Prometheus 에 exporter 연결&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;yaml 파일 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;sudo vi /etc/prometheus/prometheus.yml  scrape_configs:   # The job name is added as a label `job=&amp;lt;job_name&amp;gt;` to any timeseries scraped from this config.   - job_name: &quot;prometheus&quot;      # metrics_path defaults to '/metrics'     # scheme defaults to 'http'.      static_configs:       - targets: [&quot;localhost:9090&quot;]   - job_name: &quot;postgresql&quot;     static_configs:       - targets: [&quot;localhost:9187&quot;]         labels:           instance: postgres-bcheck     - job_name: &quot;node&quot;         static_config:           - targets: [&quot;localhost:9100&quot;]             labels:               instance: db-server&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;757-서비스-시작&quot;&gt;7.5.7 서비스 시작&lt;/h5&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;sudo systemctl start prometheus  sudo systemctl enable prometheus # startup boot  sudo systemctl status prometheus&lt;/code&gt;&lt;/pre&gt;
&lt;/article&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;다음 편에 계속....&lt;/h4&gt;</description>
      <category>AWS/EC2</category>
      <category>AWS</category>
      <category>EC2</category>
      <category>exporter</category>
      <category>node exporter</category>
      <category>PostgreSQL</category>
      <category>PostgreSQL Exporter</category>
      <category>prometheus</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/137</guid>
      <comments>https://jtoday.tistory.com/137#entry137comment</comments>
      <pubDate>Wed, 13 Sep 2023 10:36:04 +0900</pubDate>
    </item>
    <item>
      <title>4.Install Database on EC2(Redis 설치)</title>
      <link>https://jtoday.tistory.com/136</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. Redis 설치&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)입니다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소 Redis 는 다양한 자료구조를 API로 제공하는 in memory database이다. (기본적으로 key- value이다)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;참고 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://redis.io/docs/getting-started/installation/install-redis-on-linux/&quot;&gt;https://redis.io/docs/getting-started/installation/install-redis-on-linux/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6.1 설치&lt;/h3&gt;
&lt;h5&gt;6.1.1 사전 설치&lt;/h5&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;sudo apt install lsb-release&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;6.1.2 Add Repository &amp;amp; Make List&lt;/h5&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg  echo &quot;deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main&quot; | sudo tee /etc/apt/sources.list.d/redis.list&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;6.1.3 Install &amp;amp; Start Server&lt;/h5&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;sudo apt-get update sudo apt-get install redis-server  ## 설치되면 바로 실행된다.  sudo systemctl status redis-server  ## 실행 ## sudo systemctl start redis-server&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nn19e/btstH2ptLmI/KwD1P7bzkiLQRJAyeA6k4k/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;6.1.4 외부 연결 Config&lt;/h5&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;sudo vim /etc/redis/redis.conf  ## 127.0.0.1 에서 0.0.0.0 으로 변경  bind 0.0.0.0 -::1  ## requirepass XXXXX , 주석 제거 후 pw 입력 ## requirepass hist1234  # 이걸 지정 안해야 exporter 를 실행할 수 있다.  port 6379 # 유지&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;6.1.5 Check Redis&lt;/h5&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;## redis에 passwd가 설정되어있으면 에러가 발생한다 아래 내용ㅇ, ubuntu@ip-10-0-155-246:~$ redis-cli 127.0.0.1:6379&amp;gt; auth 'passwd' 127.0.0.1:6379&amp;gt; ping PONG 127.0.0.1:6379&amp;gt; set mykey somevalue OK 127.0.0.1:6379&amp;gt; get mykey &quot;somevalue&quot; 127.0.0.1:6379&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6.2 Port Open&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 위에서 Open 했지만 리마인드.&lt;/li&gt;
&lt;li&gt;Private Security Group : 6379, source : public sg&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6.3 Public EC2(Bastion Host)에서 Connect to Private Redis&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;## on Bastion Host sudo apt-get update  sudo apt-get install redis-tools  redis-cli -h 10.0.155.246 -p 6379 -a hist1234 ## redis-cli -h &amp;lt;redis 서버 ip&amp;gt; -p &amp;lt;redis port&amp;gt; -a &amp;lt;password&amp;gt;  - 10.0.157.31:6379&amp;gt; get mykey &quot;myvalue&quot; 10.0.157.31:6379&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;다음 편에 계속....&lt;/h4&gt;</description>
      <category>AWS/EC2</category>
      <category>AWS</category>
      <category>EC2</category>
      <category>redis</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/136</guid>
      <comments>https://jtoday.tistory.com/136#entry136comment</comments>
      <pubDate>Wed, 13 Sep 2023 10:31:15 +0900</pubDate>
    </item>
    <item>
      <title>3.Install Database on EC2(MongoDB 설치)</title>
      <link>https://jtoday.tistory.com/135</link>
      <description>&lt;article class=&quot;markdown-body entry-content&quot;&gt;
&lt;h2 id=&quot;5-mongodb-설치-ssh-tunneling&quot; data-ke-size=&quot;size26&quot;&gt;5. MongoDB 설치, SSH Tunneling&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;참조: &lt;a href=&quot;https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/&quot;&gt;https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/&lt;/a&gt;&lt;/blockquote&gt;
&lt;h3 id=&quot;51-설치&quot; data-ke-size=&quot;size23&quot;&gt;5.1 설치&lt;/h3&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;## import the MongoDB public GPG Key from [https://www.mongodb.org/static/pgp/server-6.0.asc](https://www.mongodb.org/static/pgp/server-6.0.asc)  wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -  ## ****Create a list file for MongoDB.**** echo &quot;deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse&quot; | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list  ## reload local package database &amp;amp; install package(libssl1.1) sudo apt-get update  sudo -i wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb  sudo apt-get install libssl1.1  ## install mongodb packages sudo apt-get install -y mongodb-org&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;52-start-mongodb-stop-restart-check-status&quot; data-ke-size=&quot;size23&quot;&gt;5.2 Start MongoDB, Stop, Restart, Check Status&lt;/h3&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;sudo systemctl start mongod  ## stop sudo systemctl stop mongod  ## restart sudo systemctl restart mongod  ## Check Status  sudo systemctl status mongod&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKMd4l/btstMdKSEx9/q7sbIhAvTPXxNmlVnQ1q3k/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h5 id=&quot;option-remove-mongo-db&quot;&gt;[Option] Remove Mongo DB&lt;/h5&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;## Stop MongoDB sudo service mongod stop ## Remove Packages. sudo apt-get purge mongodb-org* ## Remove Data Directories. sudo rm -r /var/log/mongodb sudo rm -r /var/lib/mongodb&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;53-외부-접근--config-수정-&quot; data-ke-size=&quot;size23&quot;&gt;5.3 외부 접근 ( Config 수정 )&lt;/h3&gt;
&lt;h5 id=&quot;531-config&quot;&gt;5.3.1 Config&lt;/h5&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;sudo vi /etc/mongod.conf  ## network interfaces net:   port: 27017   bindIp: 0.0.0.0 #127.0.0.1 -&amp;gt; 0.0.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;532-aws-security-group&quot;&gt;5.3.2 AWS Security Group&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 Port 해놓았지만 한번 더 확인&lt;/li&gt;
&lt;li&gt;Private Subnet
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;27017 &amp;larr; public security group&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;54-db-테스트-및-데이터-입력-테스트&quot; data-ke-size=&quot;size23&quot;&gt;5.4 DB 테스트 및 데이터 입력 테스트&lt;/h3&gt;
&lt;h5 id=&quot;541-접속&quot;&gt;5.4.1 접속&lt;/h5&gt;
&lt;pre class=&quot;objectivec&quot;&gt;&lt;code&gt;mongosh ## 계정과 PW가 있다면 mongosh --username &amp;lt;userid&amp;gt; --password &amp;lt;password&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;542-db-생성&quot;&gt;5.4.2 DB 생성&lt;/h5&gt;
&lt;pre class=&quot;fsharp&quot;&gt;&lt;code&gt;use &amp;lt;databasename&amp;gt; # 있는거라면 사용, 없으면 생성 따로 Create 가 없다.  use histdb switched to db histdb  histdb&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;543-collection-생성&quot;&gt;5.4.3 Collection 생성&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mongo db 데이터를 관리하는 묶음 &amp;rarr; Collection&lt;/li&gt;
&lt;li&gt;RDBMS에서는 Table과 동일한 컨셉&lt;/li&gt;
&lt;li&gt;데이터 하나하나를 Document라고 한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 내용이 와도된다.&lt;/li&gt;
&lt;li&gt;스키마가 정의 되어있지 않다.&lt;/li&gt;
&lt;li&gt;스키마가 같은 도큐먼트의 집합 &amp;rarr; Collection&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;db.myFirstCollection.insertOne({x:1})  myFirstDatabase&amp;gt; db.myFirstCollection.insertOne({x:1}) {   acknowledged: true,   insertedId: ObjectId(&quot;6385b61abe4338a8f21eef17&quot;) }&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;544-데이터-입력&quot;&gt;5.4.4 데이터 입력&lt;/h5&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;db.movies.insertOne(   {     title: &quot;The Favourite&quot;,     genres: [ &quot;Drama&quot;, &quot;History&quot; ],     runtime: 121,      rated: &quot;R&quot;,     year: 2018,     directors: [ &quot;Yorgos Lanthimos&quot; ],     cast: [ &quot;Olivia Colman&quot;, &quot;Emma Stone&quot;, &quot;Rachel Weisz&quot; ],     type: &quot;movie&quot; } )  db.movies.insertMany([    {       title: &quot;Jurassic World: Fallen Kingdom&quot;,       genres: [ &quot;Action&quot;, &quot;Sci-Fi&quot; ],       runtime: 130,       rated: &quot;PG-13&quot;,       year: 2018,       directors: [ &quot;J. A. Bayona&quot; ],       cast: [ &quot;Chris Pratt&quot;, &quot;Bryce Dallas Howard&quot;, &quot;Rafe Spall&quot; ],       type: &quot;movie&quot; }, {       title: &quot;Tag&quot;,       genres: [ &quot;Comedy&quot;, &quot;Action&quot; ],       runtime: 105,       rated: &quot;R&quot;,       year: 2018,       directors: [ &quot;Jeff Tomsic&quot; ],       cast: [ &quot;Annabelle Wallis&quot;, &quot;Jeremy Renner&quot;, &quot;Jon Hamm&quot; ],       type: &quot;movie&quot; } ])&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;545-데이터-확인&quot;&gt;5.4.5 데이터 확인&lt;/h5&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;db.movies.find()&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bISBHc/btstS82lqzJ/q86nOZJJ0JjwLNInkSgVH0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;55-dbms-toolstudio-3t-연결&quot; data-ke-size=&quot;size23&quot;&gt;5.5 DBMS Tool(Studio 3T) 연결&lt;/h3&gt;
&lt;h5 id=&quot;551-ssh-tunneling&quot;&gt;5.5.1 SSH Tunneling&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;New Connection
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Manually configure my connection settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check use SSH tunnel to connect&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x3tUB/btstLRBeppn/7L7bDKKL5GQttukr3rUJO0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;552-db-connection&quot;&gt;5.5.2 DB Connection&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;host :&lt;/li&gt;
&lt;li&gt;connection Test&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDrWN8/btstMirPJTo/KMKYiaxJt4XJQPT9ILtkfK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h5 id=&quot;553-run-query&quot;&gt;5.5.3 Run Query&lt;/h5&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3bCSj/btstMkwoVLl/uz7h1laS3vb5a2rb2OUHz0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/article&gt;
&lt;article class=&quot;markdown-body entry-content&quot;&gt;&lt;/article&gt;
&lt;article class=&quot;markdown-body entry-content&quot;&gt;다음 편에 계속....&lt;/article&gt;</description>
      <category>AWS/EC2</category>
      <category>AWS</category>
      <category>EC2</category>
      <category>MongoDB</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/135</guid>
      <comments>https://jtoday.tistory.com/135#entry135comment</comments>
      <pubDate>Wed, 13 Sep 2023 10:29:11 +0900</pubDate>
    </item>
    <item>
      <title>2.Install Database on EC2(PostgreSQL 설치)</title>
      <link>https://jtoday.tistory.com/134</link>
      <description>&lt;article class=&quot;markdown-body entry-content&quot;&gt;
&lt;h2 id=&quot;4-postgresql-설치-ssh-tunneling&quot; data-ke-size=&quot;size26&quot;&gt;4. PostgreSQL 설치, SSH Tunneling&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a href=&quot;https://postgresql.kr/docs/13/&quot;&gt;https://postgresql.kr/docs/13/&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://docs.3rdeyesys.com/database/ncloud-database-postgresql-install-connect-guide-ubuntu.html#%EB%B0%A9%EB%B2%951%EB%8F%99%EC%9D%BC%ED%95%9C-%EA%B3%84%EC%A0%95-%EC%83%9D%EC%84%B1&quot;&gt;https://docs.3rdeyesys.com/database/ncloud-database-postgresql-install-connect-guide-ubuntu.html#방법1동일한-계정-생성&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;41-postgresql-설치&quot; data-ke-size=&quot;size23&quot;&gt;4.1 PostgreSQL 설치&lt;/h3&gt;
&lt;h5 id=&quot;411-레포지토리-설정&quot;&gt;4.1.1 레포지토리 설정&lt;/h5&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;sudo sh -c 'echo &quot;deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main&quot; &amp;gt; /etc/apt/sources.list.d/pgdg.list' sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;412-postgresql-설치&quot;&gt;4.1.2 PostgreSQL 설치&lt;/h5&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo apt-get update sudo apt-get -y install postgresql-13&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;413-postgresql-시스템-설정-및-시작&quot;&gt;4.1.3 PostgreSQL 시스템 설정 및 시작&lt;/h5&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;## ubuntu pw 설정  sudo passwd ubuntu sudo passwd postgres  sudo systemctl enable postgresql sudo systemctl start postgresql sudo systemctl status postgresql&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;414-db-접속&quot;&gt;4.1.4 DB 접속&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;postgres로 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;sudo -i -u postgres psql  ## 비밀번호 변경 alter user postgres with password 'hist1234'&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;415-유저-생성&quot;&gt;4.1.5 유저 생성&lt;/h5&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;create user blee password 'blee1234' superuser;  \du&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHunjO/btstRJ9N1Di/olk0Lz7DT73dKY2LV6ju20/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h5 id=&quot;416-db-생성-및-소유자-지정&quot;&gt;4.1.6 DB 생성 및 소유자 지정&lt;/h5&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;create database testdb owner blee;&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/nY4nT/btstHcTkH0V/LrC8uyJRsJasEUMmu8kX00/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h5 id=&quot;417-접속-시도-인증-오류&quot;&gt;4.1.7 접속 시도 인증 오류&lt;/h5&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;postgres@ip-10-0-147-22:~$ psql -U blee -d testdb psql: error: connection to server on socket &quot;/var/run/postgresql/.s.PGSQL.5432&quot; failed: FATAL:  Peer authentication failed for user &quot;blee&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;418-인증-오류-해결&quot;&gt;4.1.8 인증 오류 해결&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[&lt;b&gt;PostgreSQL&lt;/b&gt;]에 접속하는 방법은 크게 2가지가 있는데 한가지씩 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;code&gt;동일한 계정 생성&lt;/code&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처음에 DB 생성 후에 추가 했던 [&lt;b&gt;PostgreSQL&lt;/b&gt;] 유저 계정과 동일한 계정을 OS 사용자에도 추가하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;## root 로 들어가서 adduser  sudo su -  adduser blee&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Ifv2/btstM3VsF1A/q4iNCuGrKK6UXTPtbQ18b1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;postgres@ip-10-0-147-22:~$ sudo -i -u blee blee@ip-10-0-147-22:~$ psql -U blee -d testdb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;인증 설정 파일 수정 -&amp;gt; 안됨... 뭐지&lt;/code&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;pg_hba.conf 파일을 수정&lt;/li&gt;
&lt;li&gt;DB 접근 설정 파일 중 local과 IPv4용 host method 항목이 각각 peer, md5로 되어있음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;peer &amp;rArr; 운영체제에 클라이언트의 운영체제 사용자 이름과 DB 사용자 이름이 같아야됨.&lt;/li&gt;
&lt;li&gt;md5로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;## &quot;local&quot; is for Unix domain socket connections only local   all             all                                     md5&lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;419-config-환경-설정-파일-위치-찾기-내용-수정&quot;&gt;4.1.9 Config 환경 설정 파일 위치 찾기, 내용 수정&lt;/h5&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;psql -U postgres -c 'show config_file'  ## /etc/postgresql/13/main/postgresql.conf sudo vi /etc/postgresql/13/main/postgresql.conf   listen_addresses = '0.0.0.0' # localhost 에서 0.0.0.0 으로 변경, &lt;/code&gt;&lt;/pre&gt;
&lt;h5 id=&quot;4110-인증시스템-관련-설정&quot;&gt;4.1.10 인증시스템 관련 설정&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위와 동일 폴더&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;sudo vi /etc/postgresql/13/main/pg_hba.conf  ## local host -&amp;gt; 0.0.0.0/0 으로 변경 ## IPv4 local connections: host    all             all             0.0.0.0/0           trust&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;42-datagrip-연결ssh---tunneling&quot; data-ke-size=&quot;size23&quot;&gt;4.2 DataGrip 연결(SSH - Tunneling)&lt;/h3&gt;
&lt;h5 id=&quot;421-ssh-configuration&quot;&gt;4.2.1 SSH Configuration&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;host : bastion host ip&lt;/li&gt;
&lt;li&gt;port : 22(ssh)&lt;/li&gt;
&lt;li&gt;username : ubuntu&lt;/li&gt;
&lt;li&gt;Authentication type : key-pair&lt;/li&gt;
&lt;li&gt;private key file : *.pem&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwsmoO/btstRSZVNHM/WTdBXMTKu2GtMyd7gvT1g1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h5 id=&quot;422-연결&quot;&gt;4.2.2 연결&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;host : private ec2 ip&lt;/li&gt;
&lt;li&gt;port : 5432&lt;/li&gt;
&lt;li&gt;user : userid&lt;/li&gt;
&lt;li&gt;pw : pw(쉘에서 미리 세팅해야됨, 처음에는 없음)&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmqjdZ/btstHb7R9kB/nW1itfhqDt7X0WXwrR32A0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/article&gt;
&lt;article class=&quot;markdown-body entry-content&quot;&gt;&lt;/article&gt;
&lt;h4 class=&quot;markdown-body entry-content&quot; data-ke-size=&quot;size20&quot;&gt;다음편에 계속....&lt;/h4&gt;</description>
      <category>AWS/EC2</category>
      <category>AWS</category>
      <category>dbms</category>
      <category>EC2</category>
      <category>PostgreSQL</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/134</guid>
      <comments>https://jtoday.tistory.com/134#entry134comment</comments>
      <pubDate>Wed, 13 Sep 2023 10:27:28 +0900</pubDate>
    </item>
    <item>
      <title>1.Install Database on EC2(VPC, EC2 Instance(BastionHost, DB))</title>
      <link>https://jtoday.tistory.com/133</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  AWS를 사용하다보면 Managed 된 서비스들을 이용하는 비용이 지속적으로 증가하게 된다.&lt;br /&gt;EC2에 각 DB를 설치하고 관리하는 방법을 습득하고자 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Architecture&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bastion Host를 통해 Private Subnet에 있는 DB Instance를 접근&lt;/li&gt;
&lt;li&gt;Bastion host
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Grafana&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DB Instance
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Prometheus&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5qjSn/btstRSexb4I/QfxoCNRN922jjk9RelncKk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. VPC(Network)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림과 달리 EC2 Instance Type을 가장 크기가 작은 Type으로 하기 위해서는 AZ a,c에서 생성해야되므로 가용영역을 A, C로 선택.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 VPC 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 VPC, Subnet, Routing Table, NACL을 생성해도 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 AWS Console에서 지원해주는 VPC + Subnet + Endpoint 생성해주는걸로 VPC 생성.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rznwL/btstG7j8UkA/Sfbcq2JmmUC3Sx4JLKMAck/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 Security Group 생성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Bastion Host&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Public Subnet에서 Private Subnet으로 연결하기 위한 대리자 Instance&lt;/li&gt;
&lt;li&gt;Public Subnet에 EC2 생성&lt;/li&gt;
&lt;li&gt;생성을 위한 Security Group 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.2.1 Public Security Group&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Bastion Host&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Grafana&lt;/code&gt; : Monitoring Dashboard&lt;/li&gt;
&lt;li&gt;두가지 항목을 위한 Security Group&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Port&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Type&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;SSH&lt;/code&gt;(22)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Tunneling 을 위한 SSH 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;모든 ICMP - IPv4&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 Ping Test와 같은 서버 체크용도로 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TCP(3000)&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Grafana를 위한 Port&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;소스&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;My IP에만 Open&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1.2.2 Private Security Group&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;PostgreSQL, Redis, MongoDB&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;PostgreSQL&lt;/code&gt; : 5432&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MongoDB&lt;/code&gt; : 27017&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Redis&lt;/code&gt; : 6379&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSH&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;22&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Prometheus&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 서버 또는 DB Metrics 수집을 위한 Open Source Monitoring Solution&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://prometheus.io/&quot;&gt;Prometheus - Monitoring system &amp;amp; time series database&lt;/a&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;9090 : PostgreSQL Exporter&lt;/li&gt;
&lt;li&gt;9100 : Node Exporter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;모든 ICMP - IPv4&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 Ping Test와 같은 서버 체크용도로 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;소스(Source)&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;Public Security Group&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;모든 Port는 Bastion Host를 통해서만 통신할 수 있도록 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. EC2 Instance 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 EC2를 생성하는 방법과 동일함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Access Key&lt;/code&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 사용하고 있는 Access Key 또는 신규로 발급하여 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Public EC2(Bastion Host)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Public Security Group을 Binding 한 EC2 Instance 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 Private EC2&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Private Security Group을 Binding 한 EC2 Instance 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 How to Connect Private EC2 Through Bastion Host&lt;/h3&gt;
&lt;h5&gt;2.3.1 방법 1&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;터미널 2개를 이용.&lt;/li&gt;
&lt;li&gt;1번 터미널에서 SSH 터널링&lt;/li&gt;
&lt;li&gt;2번 터미널에서 Private EC2 SSH 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;## Terminal 1 ssh -i &quot;accesskey.pem&quot; -N -L {customport}:{target-private-ip}:22 {userid}@{bastion-host-public-ip}  ## Terminal 2 ssh -i &quot;accesskey&quot; -p 33322 {userid}@localhost  *ssh -i &quot;ma-pipeline-key.pem&quot; -N -L 33322:10.15.159.221:22 ubuntu@3.38.92.37* ssh -i ma-pipeline-key.pem -p 33322 ubuntu@localhost&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.3.2 방법 2&lt;/h5&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ssh config 파일에 host 정보를 입력하여 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;vi ~/.ssh/config  Host bastion-host HostName &amp;lt;Public IP address of Bastion Host&amp;gt; User &amp;lt;USERID&amp;gt; Port 22 IdentityFile ~/.ssh/&amp;lt;key pair&amp;gt; IdentitiesOnly yes  Host private-ec2 HostName &amp;lt;Private IP address of private EC2 instance&amp;gt; User &amp;lt;USERID&amp;gt; Port 22 IdentityFile ~/.ssh/&amp;lt;key pair&amp;gt; IdentitiesOnly yes ProxyJump bastion-host&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ssh 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;ssh private-ec2 # bastion-host를 접프하여 접근함. &lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4 Bastion-host Access Key 복사&lt;/h3&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;scp -i ma-pipeline-key.pem ma-pipeline-key.pem ubuntu@13.124.178.153:/home/ubuntu/  scp -i [Bastion-EC2키페어경로] [업로드할파일] [user id]@[ec2 public IP]:[저장경로]&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;2.4.1 Bastion &amp;rarr; Private EC2 접근&lt;/h5&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;ssh -i /home/ubuntu/workspace/ma-pipeline-key.pem ubuntu@10.15.159.221 #복사된 Key 로 ssh 접근하면됨.&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. NAT Gateway&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Private Subnet이 NAT Gateway를 통해 외부로 접근할 수 있도록 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 생성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브넷 : Public Subnet&lt;/li&gt;
&lt;li&gt;탄력적 IP 할당&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1YUP1/btstG5Nn9P7/vxkdoFpxJFvv2l9Fgo1bPk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2 Route Table 수정&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Route Table에서 허용이 되야된다.&lt;/li&gt;
&lt;li&gt;Private Route Table 에서 NAT로 전달되야된다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0.0.0.0/0 &amp;rarr; NAT Gateway로 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kVr3I/btstG8QSl7c/eGLH8YuNZrDTJkl4hpZEOk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rlqVO/btstOhzagzC/Vd0Tk3kN4mHMpxFK5neKL0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;다음 편에 계속....&lt;/h4&gt;</description>
      <category>AWS/EC2</category>
      <category>AWS</category>
      <category>bastionhost</category>
      <category>database</category>
      <category>EC2</category>
      <category>Nat</category>
      <category>VPC</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/133</guid>
      <comments>https://jtoday.tistory.com/133#entry133comment</comments>
      <pubDate>Wed, 13 Sep 2023 10:24:35 +0900</pubDate>
    </item>
    <item>
      <title>Python 패키지 만들기</title>
      <link>https://jtoday.tistory.com/129</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 수행하다보면 공통 모듈을 생성하여 다른사람 또는 스스로 재활용해야할 경우가 자주 발생힙니다.&lt;br /&gt;파이썬 공식 문서를 참고하여 패키지 만드는 방법을 정리하겠습니다.&lt;br /&gt;&lt;a href=&quot;https://docs.python.org/ko/3/tutorial/modules.html&quot;&gt;참고 : Python 공식문서&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure id=&quot;og_1694158062352&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;6. Modules&quot; data-og-description=&quot;If you quit from the Python interpreter and enter it again, the definitions you have made (functions and variables) are lost. Therefore, if you want to write a somewhat longer program, you are bett...&quot; data-og-host=&quot;docs.python.org&quot; data-og-source-url=&quot;https://docs.python.org/ko/3/tutorial/modules.html&quot; data-og-url=&quot;https://docs.python.org/3/tutorial/modules.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dPsXcK/hyTPDxaOaj/RaIcJwOjxWB7JUkXbRMrr0/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://docs.python.org/ko/3/tutorial/modules.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.python.org/ko/3/tutorial/modules.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dPsXcK/hyTPDxaOaj/RaIcJwOjxWB7JUkXbRMrr0/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;6. Modules&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you quit from the Python interpreter and enter it again, the definitions you have made (functions and variables) are lost. Therefore, if you want to write a somewhat longer program, you are bett...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.python.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 패키지는 &lt;code&gt;dotted module names&lt;/code&gt; 를 사용하여 구조화 하고 있습니다.&lt;br /&gt;즉, 패키지 내 Level down으로 여러 모듈을 이용한다면 A.B 와 같은 형태로 &lt;code&gt;.&lt;/code&gt; 을 이용하여 패키지 서브 모듈을 지정하게 됩니다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;    sound/                          Top-level package
          __init__.py               Initialize the sound package
          formats/                  Subpackage for file format conversions
                  __init__.py
                  wavread.py
                  wavwrite.py
                  aiffread.py
                  aiffwrite.py
                  auread.py
                  auwrite.py
                  ...
          effects/                  Subpackage for sound effects
                  __init__.py
                  echo.py
                  surround.py
                  reverse.py
                  ...
          filters/                  Subpackage for filters
                  __init__.py
                  equalizer.py
                  vocoder.py
                  karaoke.py
                  ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지를 임포트할 때, 파이썬은 &lt;code&gt;sys.path&lt;/code&gt; 에 있는 디렉터리들을 검색하면서 패키지 서브 디렉터리를 찾습니다.&lt;br /&gt;각 패키지 Level(폴더) 마다 &lt;code&gt;__init__.py&lt;/code&gt; 을 필수로 만들어 줘야합니다.&lt;br /&gt;Python이 파일을 포함하는 디렉터리를 패키지로 취급하도록 하는 데 필요한데, 간단하게 &lt;code&gt;__init_.py&lt;/code&gt;는 빈 파일일 수 있지만 패키지에 대한 초기화 코드를 실행하거나 나중에 설명할 &lt;code&gt;__all__&lt;/code&gt; 변수를 설정할 수도 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;패키지에서 * 임포트 하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지에서 * 를 이용하여 모든 모듈을 Import 할때 아래와 같이 수행하게 됩니다.&lt;/p&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;from package import *&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;code&gt;__all__&lt;/code&gt; 변수에 해당 모듈을 할당 해놓지 않는다면 패키지 내용을 읽을 수가 없어 &lt;code&gt;Undefined&lt;/code&gt; 가 발생한다.&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;    sound/                          Top-level package
          __init__.py               Initialize the sound package
          effects/                  Subpackage for sound effects
                  __init__.py
                  echo.py
                  surround.py
                  reverse.py
    test.py&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;echo.py&lt;/h4&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;def echo_function1():
    print(&quot;echo function1&quot;)

def echo_function2():
    print(&quot;echo function2&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Package 호출 테스트 1&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호출하는 Python Script 에서 명시적으로 해당 모듈이름을 지정해줬을 경우. &lt;br /&gt;아래와 같이 호출하게 되면 문제 없이 해당 모듈 내 function을 호출 할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;test.py&lt;/h4&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;from sound.effects import echo

def main():
    echo.echo_function1()

    echo.echo_function2()

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python test.py 

echo function1
echo function2&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Package 호출 테스트 2&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;__init__.py&lt;/code&gt; 파일 내 모듈을 명시적으로 표시하지 않고 현재와 같은 &lt;code&gt;Blank&lt;/code&gt; 상태로 &lt;code&gt;from package import *&lt;/code&gt; 로 호출 할 경우 아래와 같이 에러가 발생하게 됩니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from sound.effects import *

def main():
    echo.echo_function1()

    echo.echo_function2()

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python test.py

NameError: name 'echo' is not defined&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Package 호출 테스트 3&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;effects 폴더 내 &lt;code&gt;__init__.py&lt;/code&gt; 파일에 &lt;code&gt;__all__&lt;/code&gt; 변수에 포함 시킬 모듈명을 명시적으로 할당하게 된다면 Python 에서도 해당 모듈의 Path를 인지하고 호출할 수 있게 됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;sound/effect/&lt;b&gt;init&lt;/b&gt;.py&lt;/h4&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;__all__ = [&quot;echo&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;test.py&lt;/h4&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from sound.effects import *

def main():
    echo.echo_function1()

    echo.echo_function2()

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;python test.py

echo function1
echo function2&lt;/code&gt;&lt;/pre&gt;</description>
      <category>BIGDATA/Python</category>
      <category>Module</category>
      <category>Package</category>
      <category>Python</category>
      <category>__init__.py</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/129</guid>
      <comments>https://jtoday.tistory.com/129#entry129comment</comments>
      <pubDate>Fri, 8 Sep 2023 16:17:54 +0900</pubDate>
    </item>
    <item>
      <title>AWS Lakeformation #2 ( QuickSight 사용자 )</title>
      <link>https://jtoday.tistory.com/128</link>
      <description>&lt;article class=&quot;markdown-body entry-content&quot;&gt;
&lt;h2 id=&quot;aws-lake-formation-lab-2--quicksight-&quot; data-ke-size=&quot;size26&quot;&gt;AWS Lakeformation Lab #2 ( QuickSight )&lt;/h2&gt;
&lt;h2 id=&quot;1-사전-준비&quot; data-ke-size=&quot;size26&quot;&gt;1. 사전 준비&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 Lab은 IAM 을 사용하는 것이 아니라 QuickSight 계정 및 그룹을 사용하는 Lab이므로 QuickSight 가입이 필수적으로 필요하다.&lt;/li&gt;
&lt;li&gt;참고&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/quicksight/latest/user/signing-up.html&quot;&gt;아마존 QuickSight 서브스크립션 가입하기 - Amazon QuickSight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2-glue-catalog-database&quot; data-ke-size=&quot;size26&quot;&gt;2. Glue Catalog Database&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;21-데이터-확인&quot; data-ke-size=&quot;size23&quot;&gt;2.1 데이터 확인&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXeMcx/btssvwDpq6l/LSpOnG0gtBK0qdQjbzqhg1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qHefi/btssiiGbswT/zWv0Fcin7v1YYPn3yoP3E0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;22-database-생성&quot; data-ke-size=&quot;size23&quot;&gt;2.2 Database 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Management Console &amp;rarr; Lakeformation &amp;rarr; DataCatalog, Database &amp;rarr; Create Database&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;database : &lt;code&gt;lk_db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Use only IAM access control for new tables in this database : &lt;code&gt;비활성화&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 옵션을 활성화 하게 된다면, IAM 정책을 통해 Glue 권한이 있을 경우 모든 데이터를 확인이 가능하기 때문에 데이터 권한 자체를 Lakeformation으로 이관시킬려면 해당 권한을 비활성화 해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/DGvzZ/btsshmB2BIh/k1KmHacZX1Us1QfX1WOotk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEN5v4/btssvYmfL7K/L5YJinM3vZ1benK2TTXTsk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;3-glue-crawler&quot; data-ke-size=&quot;size26&quot;&gt;3. Glue Crawler&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;31-crawler-생성&quot; data-ke-size=&quot;size23&quot;&gt;3.1 Crawler 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Glue Crawler 를 통해 데이터를 Crawling 하여 Data Catalog로 생성.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Management Console &amp;rarr; Glue &amp;rarr; &lt;a href=&quot;https://ap-northeast-2.console.aws.amazon.com/glue/home?region=ap-northeast-2#/v2/data-catalog/crawlers&quot;&gt;DataCatalog 내 Crawlers&lt;/a&gt; &amp;rarr; Create crawler&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/QogAb/btssig9qxKz/qqrjVBgLQnlvfPE4yprnNk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;crawler 이름 : &lt;code&gt;cr_lk_init_price&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA4KM1/btssfw6I8aV/inIzsUyCYaoxxXdC22BQY0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;32-datasource-추가&quot; data-ke-size=&quot;size23&quot;&gt;3.2 Datasource 추가&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/oOPAd/btsslcy37pf/H2eeh7l2n2GxDzUpV5DXg0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S3 path : &lt;code&gt;s3://blee-lab/lakeformation/data/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;나머지 내용은 그대로&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jgddi/btsshmWob0R/KOKSePBPMKzUtseDy9OC7K/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;33-security--role&quot; data-ke-size=&quot;size23&quot;&gt;3.3 Security &amp;amp; Role&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IAM Role : GlueSerivceRole 정책을 가지고있는 Role 이면 됨. (미리 생성해놓게 있어서 그대로 수행)&lt;/li&gt;
&lt;li&gt;나머지 항목은 &lt;code&gt;디폴트&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/xp7Qc/btssilwfcsR/epNhaZWFMdXBT5JRKOkkU0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;34-output-setting&quot; data-ke-size=&quot;size23&quot;&gt;3.4 Output Setting&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Target database : &lt;code&gt;lk_db&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위에서 생성한 Database&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/OkW64/btssinHzzSx/4GZPXfj0hKcOu212yx00a0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;35-run-crawler&quot; data-ke-size=&quot;size23&quot;&gt;3.5 Run Crawler&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdCCgw/btssfVd8ooY/KqmlC21INibvqUP2BEOIcK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;36-테이블-및-데이터-확인&quot; data-ke-size=&quot;size23&quot;&gt;3.6 테이블 및 데이터 확인&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/brc2IF/btssfx5F6Rf/3wZYXXDhbKKwQQeOz9LIgk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블명은 S3 내 폴더 Key를 따라감.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/UmrD7/btssimIE3mb/sgClDDJLg6NqV60prJZZSk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSAn2z/btssilwfcuz/VGvraokaAHrKZsNlkMEjI1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;4-quicksight&quot; data-ke-size=&quot;size26&quot;&gt;4. QuickSight&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;QuickSight Account 는 사전에 만들어 놓아져있는 계정을 사용함.&lt;br /&gt;새롭게 만들 경우 크게 어려움 없이 &lt;code&gt;Next&lt;/code&gt; &amp;rarr; &lt;code&gt;Next&lt;/code&gt; 버튼으로 사용 가능함.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;41-사용자-및-그룹-생성&quot; data-ke-size=&quot;size23&quot;&gt;4.1 사용자 및 그룹 생성&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/tKKhi/btssuy9iv0K/bQGzHZxfttUBIzPsC7AgbK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;411-그룹-생성&quot; data-ke-size=&quot;size20&quot;&gt;4.1.1 그룹 생성&lt;/h4&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/cybll1/btssqCjKr6V/r2LQQNrVkTyUDFjqprjHx0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;lk_group1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/tm8s3/btsshkEilZ2/9KjeEJ3pXU51vjYpoRIYa1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;lk_group2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eaR82u/btssk3BXZ7k/r1V2WgxykGa40Ep9Is1m9k/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;412-사용자-생성&quot; data-ke-size=&quot;size20&quot;&gt;4.1.2 사용자 생성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;lk_user1 &amp;rarr; lk_group1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lk_user2 &amp;rarr; lk_group2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;독자 &amp;rarr; 작성자로 변경 필요(데이터세트 확인 불가), 만들어진 Dashboard만 보려면 확인이 가능하나 작성까지 확인하기 위해서는 작성자로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/beFxbn/btssvgOdUfX/KRuexSwHfUZGKQLGAQEi70/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;413-초대메일-및-암호-입력&quot; data-ke-size=&quot;size20&quot;&gt;4.1.3 초대메일 및 암호 입력&lt;/h4&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/IO1K6/btsshp6E2cA/tT4gkI4uk7g4aDE2oCpYC0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;414-생성된-사용자-그룹-할당&quot; data-ke-size=&quot;size20&quot;&gt;4.1.4 생성된 사용자, 그룹 할당&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;QuickSight 관리 &amp;rarr; 그룹관리 &amp;rarr; 그룹 선택 &amp;rarr; 사용자 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bekKJ2/btssiie46iu/uRHvv9lxToVBuD8aKKOnk1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7PhaA/btssf25tnqF/wTewkD4NL8v5eAwb3DQxwk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;415-사용자-로그인-후-현재-상태-확인&quot; data-ke-size=&quot;size20&quot;&gt;4.1.5 사용자 로그인 후 현재 상태 확인&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://quicksight.aws.amazon.com/sn/start?directory_alias=hist-dt-abc-quicksight&quot;&gt;https://quicksight.aws.amazon.com/sn/start?directory_alias=hist-dt-abc-quicksight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;위 URL로 접근 후 로그인&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/sFI2K/btsskZ0FkUs/KHP8mb0Fqn7I3cxecTKKHk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 독자이므로 Dashboard만 사용이 가능하다 &amp;rarr; 데이터 세트 까지 확인 하기 위해서 작성자로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/QF4IV/btsshw5N3d9/t0PsxhqqUsCUTRsHGkYjZ0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o1sYP/btssfV6nynx/d1qqdsEBeGQb2XzMB6sQr1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;42-데이터셋-생성lk_user1-lk_group1&quot; data-ke-size=&quot;size23&quot;&gt;4.2 데이터셋 생성(lk_user1, lk_group1)&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB6GD1/btssihHfB6t/XVKaGjqPJWKYly9o5wRyPk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tc2c8/btssingumSD/Z9vgtUf9XhRaRyZYwCcGvk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터에 대한 권한이 없기 때문에 테이블 목록에 나오지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/kXx2U/btssgFaOH6p/BzuM5HCylAp4XsMKlKm6t1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;5-lake-formation-권한-부여&quot; data-ke-size=&quot;size26&quot;&gt;5. Lake formation 권한 부여&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;aside&gt;  Lake formation에서 이전 Lab과는 다르게 IAM User를 사용하는 것이 아니라 QuickSight 계정(user) 또는 Group으로 권한을 부여하기 때문에 아래 CLI를 잘 참고 하여 ARN을 찾아야 함.&lt;/aside&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/U2h6i/btssvZMeFxF/fWw9qbCaQ8hWcxKodGNyE0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;51-quicksight&quot; data-ke-size=&quot;size23&quot;&gt;5.1 QuickSight&lt;/h3&gt;
&lt;h4 id=&quot;511-group-arn&quot; data-ke-size=&quot;size20&quot;&gt;5.1.1 Group ARN&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Group 내 ARN 값을 복사(메모장에 복사)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;aws quicksight describe-group --aws-account-id xxxxxxxx --namespace default --group-name lk_group1  {     &quot;Status&quot;: 200,     &quot;Group&quot;: {         &quot;Arn&quot;: &quot;arn:aws:quicksight:ap-northeast-2:xxxxxxx:group/default/lk_group1&quot;,         &quot;GroupName&quot;: &quot;lk_group1&quot;,         &quot;Description&quot;: &quot;gold + All column\n&quot;,         &quot;PrincipalId&quot;: &quot;group/d-9b671572e9/fbdc3e89-560c-4294-a5bc-dd184ed8867a&quot;     },     &quot;RequestId&quot;: &quot;1b87ebd3-da8f-4384-852c-34e062b063b6&quot; }&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;512-user-arn&quot; data-ke-size=&quot;size20&quot;&gt;5.1.2 User ARN&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Group 으로 권한 부여하는 것이 아닐 경우 User 별로 권한 부여를 해야한다.&lt;/li&gt;
&lt;li&gt;User ARN 은 아래와 같이 찾을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;aws quicksight describe-user --aws-account-id xxxxx --namespace default --user-name lk_user1  {     &quot;Status&quot;: 200,     &quot;User&quot;: {         &quot;Arn&quot;: &quot;arn:aws:quicksight:ap-northeast-2:xxxxx:user/default/lk_user1&quot;,         &quot;UserName&quot;: &quot;lk_user1&quot;,         &quot;Email&quot;: &quot;bjlee0689@nate.com&quot;,         &quot;Role&quot;: &quot;AUTHOR&quot;,         &quot;IdentityType&quot;: &quot;QUICKSIGHT&quot;,         &quot;Active&quot;: true,         &quot;PrincipalId&quot;: &quot;user/d-9b671572e9/4b12446b-2ef6-4145-9e0b-8c849c8e153d&quot;     },     &quot;RequestId&quot;: &quot;78d30867-3c09-4d95-8f1d-46a00c92df12&quot; }&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;52-lake-formation-권한-부여&quot; data-ke-size=&quot;size23&quot;&gt;5.2 Lake formation 권한 부여&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블에 대한 권한을 전체 부여&lt;/li&gt;
&lt;li&gt;대상 Group : &lt;code&gt;lk_group1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/B29wX/btssvepkWFZ/tyih5wzqPnFACalB0hKKz0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;53-데이터-권한-확인&quot; data-ke-size=&quot;size23&quot;&gt;5.3 데이터 권한 확인&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.notion.so/4-2-lk_user1-lk_group1-fc324d9a7ea04d19803dfb183602e603?pvs=21&quot;&gt;4.2 데이터셋 생성(lk_user1, lk_group1)&lt;/a&gt; 과 동일한 방법으로 데이터 셋 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/cONEY8/btssfv06qH7/MfMrJwPBTdhXKmQqLMUjj0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kZHcS/btssqwKDBR2/0tvKdl5lPMNopltuDtm2Lk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;에러발생&quot; data-ke-size=&quot;size20&quot;&gt;에러발생&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 버킷에 대한 권한이 QuickSight 자체에 없기 때문에 관리자 계정에서 해당 버킷도 데이터 사용할 수 있도록 포함 시켜줘야함&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxUSxO/btssvvLffFK/eIQZPTjkVpkxRTreDzTs81/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdGy6K/btssgp7bsDS/g614NmNzpiYolZYm2B3qzK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rrh5b/btssf1ldj7v/WJcp33vWktIWtIUrTjnJkK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lpAS4/btssfUM5Ry6/0wnHiPd1qpRq7AWiaD2IT0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 사항이 적용 되려면 조금 걸리거나 새롭게 그냥 데이터세트를 만들면 됨.&lt;/li&gt;
&lt;li&gt;데이터 확인 후 저장 및 게시&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfDfkG/btssv2IW45R/OCuO3xaktI38kjviWFmYYk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcBPvU/btssfZOs1zL/pr49vmfpBm73fKsPXCg6M1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;54-시각화&quot; data-ke-size=&quot;size23&quot;&gt;5.4 시각화&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/eoNKhZ/btssf1rZaV7/X6RifsbOZ7KzJsnRRUSoe0/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csCx8q/btssqyVWVXl/IguKbksqMZZ0WS3X2q7sr0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;6-심화-권한-관리&quot; data-ke-size=&quot;size26&quot;&gt;6. 심화 권한 관리&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;61-전제조건&quot; data-ke-size=&quot;size23&quot;&gt;6.1 전제조건&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lk_group1은 &lt;code&gt;metal&lt;/code&gt; 이 &lt;code&gt;Gold&lt;/code&gt; 인 데이터만 확인이 가능하고&lt;br /&gt;lk_group2은 &lt;code&gt;metal&lt;/code&gt; 이 &lt;code&gt;Iron&lt;/code&gt; 인 데이터와 radius 컬럼을 제외한 나머지만 사용이 가능하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;62-권한-말소&quot; data-ke-size=&quot;size23&quot;&gt;6.2 권한 말소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 lk_group1 에 부여되었던 권한은 말소 시켜야함 &amp;rarr; 아래 그림처럼(Revoke)&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/GS2b2/btssfWqFDcc/TS64txSUv46XTKLIrHCye0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;63-datafilter&quot; data-ke-size=&quot;size23&quot;&gt;6.3 DataFilter&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Row (행) 기반으로 데이터 Filter을 걸기 위해서는 Lakeformation에서 Data filters라는 메뉴에서 필터를 생성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Management Console &amp;rarr; Lakeformation 서비스 &amp;rarr; Data catalog 내 Data filters&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWh714/btssvx98kjk/64nrZfjtcDbA3ETNPfk5r0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;631-metal--gold&quot; data-ke-size=&quot;size20&quot;&gt;6.3.1 metal == Gold&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Data Filter Name : &lt;code&gt;MetalGold&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target database : &lt;code&gt;lk_db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target table : &lt;code&gt;data&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Column-level access : &lt;code&gt;Access to all columns&lt;/code&gt;, 컬럼은 전체 보여줘야하기 때문에&lt;/li&gt;
&lt;li&gt;Row filter expression : &lt;code&gt;metal = &amp;lsquo;Gold&amp;rsquo;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsCtA2/btssihgbRaN/vUkYuWHgCOrCuNe7SKOaH0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;632-metal--iron&quot; data-ke-size=&quot;size20&quot;&gt;6.3.2 metal == Iron&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Data Filter Name : &lt;code&gt;MetalIron&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target database : &lt;code&gt;lk_db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target table : &lt;code&gt;data&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Column-level access : &lt;code&gt;Exclude Columns&lt;/code&gt;, radius 선택 (해당 컬럼은 제외 하기 위해서)&lt;/li&gt;
&lt;li&gt;Row filter expression : &lt;code&gt;metal = &amp;lsquo;Iron&amp;rsquo;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/9ZNF5/btssuv5PLHO/4FepgSx55i56RbCb271yc0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;64-권한부여&quot; data-ke-size=&quot;size23&quot;&gt;6.4 권한부여&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.notion.so/5-2-Lake-formation-d66a1e40eeed4f728405bcc7ee2a7630?pvs=21&quot;&gt;5.2 Lake formation 권한 부여 &lt;/a&gt; 와 동일하게 권한을 부여 하나 Row Filter 만 위에서 생성한 항목 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;641-lk_group1&quot; data-ke-size=&quot;size20&quot;&gt;6.4.1 lk_group1&lt;/h4&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYjVMF/btssveQqbd9/hnkZHciVH1jSpmYKxTzMk1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;642-lk_group2&quot; data-ke-size=&quot;size20&quot;&gt;6.4.2 lk_group2&lt;/h4&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/TrEz6/btssqwRm8TM/7tYG4Uu1ThHYbGCrKkta41/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;65-확인&quot; data-ke-size=&quot;size23&quot;&gt;6.5 확인&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DataSet 생성하는 형태로 확인, DataSet 생성은 &lt;a href=&quot;https://www.notion.so/4-2-lk_user1-lk_group1-fc324d9a7ea04d19803dfb183602e603?pvs=21&quot;&gt;4.2 데이터셋 생성(lk_user1, lk_group1)&lt;/a&gt; 과 동일한 방법으로 데이터 셋 생성&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;651-lk_group1&quot; data-ke-size=&quot;size20&quot;&gt;6.5.1 lk_group1&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gold 데이터만 조회됨을 확인 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/JON3I/btssvVXmBa0/zSicTzqkkmqIKheQgKAeD0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;652-lk_group2&quot; data-ke-size=&quot;size20&quot;&gt;6.5.2 lk_group2&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;radius 컬럼 제외 및 Iron 데이터만 조회 됨을 확인 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/AOUds/btssimhAbKK/cihpKJ9kiBETEqxwnQkmv1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;7-clean&quot; data-ke-size=&quot;size26&quot;&gt;7. Clean&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Lake Formation 에서 적용한 Permissions 삭제&lt;/li&gt;
&lt;li&gt;QuickSight 사용자 삭제&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4rBA/btsshkRMWWO/WRmJnks0qVysiqPs5Dy5PK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;QuickSight 그룹 삭제
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Console로 삭제 되지 않기 때문에 CLI를 이용해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;aws quicksight delete-group --aws-account-id xxxxxx --namespace default --group-name lk_group1  {     &quot;Status&quot;: 200,     &quot;RequestId&quot;: &quot;57d822b4-00b6-463b-bfd9-308deb1c7d00&quot; }&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/article&gt;</description>
      <category>AWS/Lake formation</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/128</guid>
      <comments>https://jtoday.tistory.com/128#entry128comment</comments>
      <pubDate>Mon, 28 Aug 2023 14:52:09 +0900</pubDate>
    </item>
    <item>
      <title>AWS Lakeformation #1(IAM 사용자)</title>
      <link>https://jtoday.tistory.com/125</link>
      <description>&lt;article class=&quot;markdown-body entry-content&quot;&gt;
&lt;h2 id=&quot;aws-lake-formation-lab&quot; data-ke-size=&quot;size26&quot;&gt;AWS Lake formation Lab&lt;/h2&gt;
&lt;h2 id=&quot;1-iam-user-추가&quot; data-ke-size=&quot;size26&quot;&gt;1. IAM User 추가&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;lk_test1 : AdministratorAccess&lt;/li&gt;
&lt;li&gt;lk_test2 : AdministratorAccess&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/A0Zlg/btssfT8t1xg/REvUyB3jVkh4z4KcCkezi1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;2-glue-catalog-database&quot; data-ke-size=&quot;size26&quot;&gt;2. Glue Catalog Database&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;21-데이터-확인&quot; data-ke-size=&quot;size23&quot;&gt;2.1 데이터 확인&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bavTZK/btssfD5UfWI/ZUEeR8GXQ8sJnOkH8zKkkk/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwXbKL/btsshtuuZjX/DuUtPMqAP3YEtGc6fSOtI0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;22-database-생성&quot; data-ke-size=&quot;size23&quot;&gt;2.2 Database 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Management Console &amp;rarr; Lakeformation &amp;rarr; DataCatalog, Database &amp;rarr; Create Database&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;database : &lt;code&gt;lk_db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Use only IAM access control for new tables in this database : &lt;code&gt;비활성화&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 옵션을 활성화 하게 된다면, IAM 정책을 통해 Glue 권한이 있을 경우 모든 데이터를 확인이 가능하기 때문에 데이터 권한 자체를 Lakeformation으로 이관시킬려면 해당 권한을 비활성화 해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/upWGd/btssvebNpYf/q9Tng1gIpjqwkHkpo2mV41/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bveQLa/btssfvfIOHg/4UjgOMnrTukXpQMVZpByl0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;3-glue-crawler&quot; data-ke-size=&quot;size26&quot;&gt;3. Glue Crawler&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;31-crawler-생성&quot; data-ke-size=&quot;size23&quot;&gt;3.1 Crawler 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Glue Crawler 를 통해 데이터를 Crawling 하여 Data Catalog로 생성.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Management Console &amp;rarr; Glue &amp;rarr; &lt;a href=&quot;https://ap-northeast-2.console.aws.amazon.com/glue/home?region=ap-northeast-2#/v2/data-catalog/crawlers&quot;&gt;DataCatalog 내 Crawlers&lt;/a&gt; &amp;rarr; Create crawler&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/FOutQ/btssvvqWqSj/VKjhPfkHSaFOvUX7RwmwF1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;crawler 이름 : &lt;code&gt;cr_lk_init_price&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/PrwwB/btssgsCONgP/yQNYDVvpZROFOXIGElzCtK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;32-datasource-추가&quot; data-ke-size=&quot;size23&quot;&gt;3.2 Datasource 추가&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/DYGjK/btssht2hS3i/aWfh82T0RM0RVBRw8e7MJ0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S3 path : &lt;code&gt;s3://blee-lab/lakeformation/data/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;나머지 내용은 그대로&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/qKTyu/btsshwSjctD/AR8OnK35ePU59iTph6mZ2K/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;33-security&quot; data-ke-size=&quot;size23&quot;&gt;3.3 Security&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IAM Role : GlueSerivceRole 정책을 가지고있는 Role 이면 됨. (미리 생성해놓게 있어서 그대로 수행)&lt;/li&gt;
&lt;li&gt;나머지 항목은 &lt;code&gt;디폴트&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZekBM/btssf1epkAa/nMP5Ytzxc4f1ZWWkg1qsj1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;34-output-setting&quot; data-ke-size=&quot;size23&quot;&gt;3.4 Output Setting&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Target database : &lt;code&gt;lk_db&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위에서 생성한 Database&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/J20ws/btssf1lcPaA/U2vdbC4WxRgLhAAqYhnT71/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;35-run-crawler&quot; data-ke-size=&quot;size23&quot;&gt;3.5 Run Crawler&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/XqhKw/btssgqkG445/nkVc5QxGRJLt8dSbchgAPk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;36-테이블-및-데이터-확인&quot; data-ke-size=&quot;size23&quot;&gt;3.6 테이블 및 데이터 확인&lt;/h3&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/lMePE/btssilbTJ1Z/mVXQipNk9UqSRktx7Y48XK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블명은 S3 내 폴더 Key를 따라감.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/duNXUb/btssf3DipXd/CE6LOWRm3KqBmve8VZzSNK/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mfYel/btssqCD3eHJ/z3f7Pdraik4ifRLbTvhHB1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;4-사용자별-확인&quot; data-ke-size=&quot;size26&quot;&gt;4. 사용자별 확인&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lk_test1 로 테스트 진행&lt;br /&gt;현재 lk_test1과 lk_test2는 동일한 권한임&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;41-해당-테이블-여부-확인&quot; data-ke-size=&quot;size23&quot;&gt;4.1 해당 테이블 여부 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Athena를 통해 확인 결과 테이블 목록이 보이지 않음 &amp;rarr; Lakeformation으로 권한 부여가 안되어있음.&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/yiXAN/btssvwci1gt/JpSQdvBVR9SkskwyRNIgfK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;데이터-조회&quot; data-ke-size=&quot;size20&quot;&gt;데이터 조회&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권한이 없어서 조회가 안되다는 에러 메세지&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/PKneB/btssfHgaXFQ/TNPgYWZintd3uvvkVTyvdK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;glue-database-정보-조회&quot; data-ke-size=&quot;size20&quot;&gt;Glue Database 정보 조회&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Glue 관련하여 스키마같은 정보 또한 권한이 없기 때문에 확인 불가&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/9WACx/btssvfhtnmt/QapOKHl4KrxDDVAHSxCS21/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;42-권한-부여&quot; data-ke-size=&quot;size23&quot;&gt;4.2 권한 부여&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lakeformation을 사용할 수 있는 master 계정으로 lk_test1 계정에 권한 부여 수행&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Management Console &amp;rarr; Lakeformation &amp;rarr; Permissions &amp;rarr; Data Lake permissions 메뉴로 이동&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dypcmQ/btsshr4tb2a/teBcbQ1sMKBY39bOOcOD60/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baU2LU/btssilbTJ35/ZpoWO3bu1RxgdiCkOJGWSK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Principals&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IAM Users and roles : &lt;code&gt;lk_test1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LF-Tags or catalog resources&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Named data catalog resources 선택&lt;/li&gt;
&lt;li&gt;Databases : &lt;code&gt;lk_db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tables : &lt;code&gt;data&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Table permissions&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Table permissions : &lt;code&gt;Select, Describe&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data Permissions : &lt;code&gt;All Data access&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdvUrN/btssimWbI7r/fokooxKX7QJkslu8aWOCaK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;43-데이터-확인&quot; data-ke-size=&quot;size23&quot;&gt;4.3 데이터 확인&lt;/h3&gt;
&lt;h4 id=&quot;431-glue-datacatalog&quot; data-ke-size=&quot;size20&quot;&gt;4.3.1 Glue DataCatalog&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새롭게 테이블이 추가 된 것을 확인할 수 있다.&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/yxqJT/btssgm3Dsul/sfwg2Ir1PhLnkz7bJeJFck/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxikRK/btssveJDbO4/voWlpjyCKSNNzGsmzYX0eK/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;432-athena-데이터-조회&quot; data-ke-size=&quot;size20&quot;&gt;4.3.2 Athena 데이터 조회&lt;/h4&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/ng6ev/btssvgUZun3/WeKEjXT7i3KmW7ToiWVjA0/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h2 id=&quot;5-심화-권한-관리&quot; data-ke-size=&quot;size26&quot;&gt;5. 심화 권한 관리&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;51-전제조건&quot; data-ke-size=&quot;size23&quot;&gt;5.1 전제조건&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lk_test1 사용자는 &lt;code&gt;metal&lt;/code&gt; 이 &lt;code&gt;Gold&lt;/code&gt; 인 데이터만 확인이 가능하고&lt;br /&gt;lk_test2 사용자는 &lt;code&gt;metal&lt;/code&gt; 이 &lt;code&gt;Iron&lt;/code&gt; 인 데이터와 radius 컬럼을 제외한 나머지만 사용이 가능하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;52-권한-말소&quot; data-ke-size=&quot;size23&quot;&gt;5.2 권한 말소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 lk_test1 에 부여되었던 권한은 말소 시켜야함&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOHfqr/btssuwjkpyu/YlhjEuPB99F5X4Fk3KCIyk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;53-datafilter&quot; data-ke-size=&quot;size23&quot;&gt;5.3 DataFilter&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Row (행) 기반으로 데이터 Filter을 걸기 위해서는 Lakeformation에서 Data filters라는 메뉴에서 필터를 생성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Management Console &amp;rarr; Lakeformation 서비스 &amp;rarr; Data catalog 내 Data filters&lt;/p&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEsIe2/btssgt9yN4R/ja9oqE0BvpKqbBLe2ceIhk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;531-metal--gold&quot; data-ke-size=&quot;size20&quot;&gt;5.3.1 metal == Gold&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Data Filter Name : &lt;code&gt;MetalGold&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target database : &lt;code&gt;lk_db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target table : &lt;code&gt;data&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Column-level access : &lt;code&gt;Access to all columns&lt;/code&gt;, 컬럼은 전체 보여줘야하기 때문에&lt;/li&gt;
&lt;li&gt;Row filter expression : &lt;code&gt;metal = &amp;lsquo;Gold&amp;rsquo;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/F77Oo/btssk9vvhhO/CzWC1UKZmVmbvK3Kzm18Jk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;532-metal--iron&quot; data-ke-size=&quot;size20&quot;&gt;5.3.2 metal == Iron&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Data Filter Name : &lt;code&gt;MetalIron&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target database : &lt;code&gt;lk_db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target table : &lt;code&gt;data&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Column-level access : &lt;code&gt;Exclude Columns&lt;/code&gt;, radius 선택 (해당 컬럼은 제외 하기 위해서)&lt;/li&gt;
&lt;li&gt;Row filter expression : &lt;code&gt;metal = &amp;lsquo;Iron&amp;rsquo;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/beUxHB/btsshmvf84j/qu57ALlRfyJmGKa7X47Hn1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;54-권한-부여&quot; data-ke-size=&quot;size23&quot;&gt;5.4 권한 부여&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/AWS-Lake-formation-Lab-5c5538efd51d4afab86c226b6667a91e?pvs=21&quot;&gt;4.2 권한 부여&lt;/a&gt; 와 동일 방법으로 부여 하나 Row Filter만 추가 하면 됨.&lt;/p&gt;
&lt;h4 id=&quot;541-lk_test1&quot; data-ke-size=&quot;size20&quot;&gt;5.4.1 lk_test1&lt;/h4&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/dI6Sah/btssqn74VKv/lmp8of6KjlvyBu20EfbfC1/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;542-lk_test2&quot; data-ke-size=&quot;size20&quot;&gt;5.4.2 lk_test2&lt;/h4&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/FDr3U/btssveiyvRU/aawjNOX2CNoExvLvuFkkwk/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h3 id=&quot;55-확인&quot; data-ke-size=&quot;size23&quot;&gt;5.5 확인&lt;/h3&gt;
&lt;h4 id=&quot;551-lk_test1&quot; data-ke-size=&quot;size20&quot;&gt;5.5.1 lk_test1&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gold + 모든 컬럼만 확인 가능한 상태&lt;/p&gt;
&lt;/blockquote&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB5tG7/btssuxoZp0k/8ukBoAYjVrySC5KMqi3u81/img.png&quot; alt=&quot;Untitled&quot; /&gt;
&lt;h4 id=&quot;552-lk_test2&quot; data-ke-size=&quot;size20&quot;&gt;5.5.2 lk_test2&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Iron + &lt;b&gt;radius&lt;/b&gt; 컬럼 제외 컬럼만 확인&lt;/p&gt;
&lt;/blockquote&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dn/b30nTt/btssfvtgi4h/gOKJn912SywLBre8I3wEp1/img.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/article&gt;</description>
      <category>AWS/Lake formation</category>
      <author>J_Today</author>
      <guid isPermaLink="true">https://jtoday.tistory.com/125</guid>
      <comments>https://jtoday.tistory.com/125#entry125comment</comments>
      <pubDate>Mon, 28 Aug 2023 14:47:14 +0900</pubDate>
    </item>
  </channel>
</rss>