Apache Spark에 대한 생성형 AI 업그레이드 평가판은 미국 동부(오하이오), 미국 동부(버지니아 북부), 미국 서부(오리건), 아시아 태평양(도쿄), 아시아 태평양(시드니)과 같은 AWS 리전에서 AWS Glue에 대해 사용할 수 있습니다. 평가판 기능은 변경될 수 있습니다. |
AWS Glue에서 Spark 업그레이드를 통해 데이터 엔지니어와 개발자는 생성형 AI를 사용하여 기존 AWS Glue Spark 작업을 최신 Spark 릴리스로 업그레이드 및 마이그레이션할 수 있습니다. 데이터 엔지니어는 이를 사용하여 AWS Glue Spark 작업을 스캔하고, 업그레이드 계획을 생성하며, 계획을 실행하고, 출력을 검증할 수 있습니다. Spark 스크립트, 구성, 종속 항목, 메서드 및 기능을 식별하고 업데이트하는 차별화되지 않은 작업을 자동화하여 Spark 업그레이드의 시간과 비용을 줄입니다.

작동 방법
업그레이드 분석을 사용할 때 AWS Glue는 작업 코드에서 버전 및 구성 간 차이를 식별하여 업그레이드 계획을 생성합니다. 업그레이드 계획에서는 모든 코드 변경 사항과 필요한 마이그레이션 단계를 자세히 설명합니다. 다음으로, AWS Glue는 샌드박스 환경에서 업그레이드된 애플리케이션을 빌드하고 실행하여 변경 사항을 검증하고 작업을 마이그레이션할 수 있는 코드 변경 사항 목록을 생성합니다. 제안된 변경 사항을 자세히 설명하는 요약과 함께 업데이트된 스크립트를 볼 수 있습니다. 자체 테스트를 실행한 후 변경 사항을 수락하면 AWS Glue 작업이 새 스크립트를 사용하여 최신 버전으로 자동 업데이트됩니다.
업그레이드 분석 프로세스는 워크로드 및 작업의 복잡성에 따라 완료하는 데 다소 시간이 걸릴 수 있습니다. 업그레이드 분석 결과는 지정된 Amazon S3 경로에 저장되며, 이를 검토하여 업그레이드 및 잠재적 호환성 문제를 파악할 수 있습니다. 업그레이드 분석 결과를 검토한 후 업그레이드하기 전에 실제 업그레이드를 진행할지 아니면 필요에 따라 작업을 변경할지 결정할 수 있습니다.
사전 조건
생성형 AI를 사용하여 AWS Glue에서 작업을 업그레이드하려면 다음 사전 조건이 필요합니다.
-
AWS Glue 2 PySpark 작업 - AWS Glue 2 작업만 AWS Glue 4로 업그레이드할 수 있습니다.
-
분석을 시작하고, 결과를 검토하며, 작업을 업그레이드하려면 IAM 권한이 필요합니다. 자세한 내용은 아래 권한 섹션의 예제를 참조하세요.
-
AWS KMS를 사용하여 분석 아티팩트 또는 서비스를 암호화하거나 분석에 사용되는 데이터를 암호화하는 경우 추가 AWS KMS 권한이 필요합니다. 자세한 내용은 아래 AWS KMS 정책 섹션의 예제를 참조하세요.
권한
-
다음 권한으로 직접 호출자의 IAM 정책을 업데이트하세요.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["glue:StartJobUpgradeAnalysis", "glue:StartJobRun", "glue:GetJobRun", "glue:GetJob", "glue:BatchStopJobRun" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:job/jobName" ] }, { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "<s3 script location associated with the job>" ] }, { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": [ "<result s3 path provided on API>" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey", ], "Resource": "<key-arn-passed in the API>" } ] }
참고
결과 아티팩트 암호화에 대한 키 및 서비스 메타데이터 암호화에 대한 키와 같은 두 가지 서로 다른 AWS KMS 키를 사용하는 경우 두 키에 대해 유사한 정책이 정책에 포함되어야 합니다.
-
다음 인라인 정책을 포함하도록 업그레이드하려는 작업의 실행 역할을 업데이트하세요.
{ "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "ARN of the Amazon S3 path provided on API", "ARN of the Amazon S3 path provided on API/*" ] }
예를 들어 Amazon S3 경로(
s3://amzn-s3-demo-bucket/upgraded-result
)를 사용하는 경우 정책은 다음과 같습니다.{ "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/upgraded-result/", "arn:aws:s3:::amzn-s3-demo-bucket/upgraded-result/*" ] }
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["glue:GetJobUpgradeAnalysis"],
"Resource": [
"arn:aws:glue:us-east-1:123456789012:job/jobName"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["glue:StopJobUpgradeAnalysis",
"glue:BatchStopJobRun"
],
"Resource": [
"arn:aws:glue:us-east-1:123456789012:job/jobName"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["glue:ListJobUpgradeAnalyses"],
"Resource": [
"arn:aws:glue:us-east-1:123456789012:job/jobName"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["glue:UpdateJob",
"glue:UpgradeJob"
],
"Resource": [
"arn:aws:glue:us-east-1:123456789012:job/jobName"
]
},
{
"Effect": "Allow",
"Action": ["iam:PassRole"],
"Resource": [
"<Role arn associated with the job>"
]
}
]
}
AWS KMS 정책
분석을 시작할 때 사용자 지정 AWS KMS 키를 전달하려면 다음 섹션을 참조하여 AWS KMS 키에 대한 적절한 권한을 구성하세요.
키를 전달하려면 권한(암호화/복호화)이 필요합니다. 아래 정책 예제에서 <IAM Customer caller ARN>
에 의해 지정된 AWS 계정 또는 역할이 허용된 작업을 수행할 수 있습니다.
-
kms:Decrypt는 지정된 AWS KMS 키를 사용하여 복호화를 허용합니다.
-
kms:GenerateDataKey는 지정된 AWS KMS 키를 사용하여 데이터 키 생성을 허용합니다.
{
"Effect": "Allow",
"Principal":{
"AWS": "<IAM Customer caller ARN>"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey",
],
"Resource": "<key-arn-passed-on-start-api>"
}
키의 암호화 및 복호화 모두에 AWS KMS 키를 사용할 수 있는 권한을 AWS Glue에 부여해야 합니다.
{
"Effect": "Allow",
"Principal":{
"Service": "glue.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey",
],
"Resource": "<key-arn>",
"Condition": {
"StringLike": {
"aws:SourceArn": "arn:aws:glue:<region>:<aws_account_id>:job/job-name"
}
}
}
이 정책을 통해 AWS KMS 키에 대한 암호화 및 복호화 권한을 모두 보유합니다.
{
"Effect": "Allow",
"Principal":{
"AWS": "<IAM Customer caller ARN>"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey",
],
"Resource": "<key-arn-passed-on-start-api>"
}
업그레이드 분석 실행 및 업그레이드 스크립트 적용
업그레이드 분석을 실행할 수 있습니다. 그러면 작업 보기에서 선택한 작업에서 업그레이드 계획이 생성됩니다.
-
작업에서 AWS Glue 2.0 작업을 선택한 다음, 작업 메뉴에서 업그레이드 분석 실행을 선택하세요.
-
모달에서 생성된 업그레이드 계획을 결과 경로에 저장할 경로를 선택하세요. 액세스하고 쓸 수 있는 Amazon S3 버킷이어야 합니다.
-
필요한 경우 다음과 같은 추가 옵션을 구성하세요.
-
실행 구성 - 선택 사항: 실행 구성은 업그레이드 분석 중에 수행된 검증 실행의 다양한 측면을 사용자 지정할 수 있는 선택적 설정입니다. 이 구성은 업그레이드된 스크립트를 실행하는 데 사용되며 여기에서 컴퓨팅 환경 속성(작업자 유형, 작업자 수 등)을 선택할 수 있습니다. 변경 사항을 검토 및 수락하고 프로덕션 환경에 적용하기 전에 비프로덕션 개발자 계정을 사용하여 샘플 데이터세트에 대한 검증을 실행해야 합니다. 실행 구성에는 다음과 같은 사용자 지정 가능한 파라미터가 포함됩니다.
-
작업자 유형: 검증 실행에 대해 사용할 작업자 유형을 지정하여 요구 사항에 따라 적절한 컴퓨팅 리소스를 선택할 수 있습니다.
-
작업자 수: 검증 실행에 대해 프로비저닝할 작업자 수를 정의하여 워크로드 요구 사항에 따라 리소스 규모를 조정할 수 있습니다.
-
작업 제한 시간(분): 이 파라미터를 사용하면 검증 실행의 시간 제한을 설정할 수 있으므로 지정된 기간 후에 작업이 종료되어 과도한 리소스 소비를 방지할 수 있습니다.
-
보안 구성: 검증 실행 중에 데이터와 리소스를 보호하도록 암호화 및 액세스 제어와 같은 보안 설정을 구성할 수 있습니다.
-
추가 작업 파라미터: 필요한 경우 새 작업 파라미터를 추가하여 검증 실행을 위한 실행 환경을 추가로 사용자 지정할 수 있습니다.
실행 구성을 활용하여 특정 요구 사항에 맞게 검증 실행을 조정할 수 있습니다. 예를 들어 더 작은 데이터세트를 사용하도록 검증 실행을 구성할 수 있습니다. 그러면 분석을 더 빠르게 완료하고 비용을 최적화할 수 있습니다. 이 접근 방식을 사용하면 검증 단계 중에 리소스 사용률과 관련 비용을 최소화하면서 업그레이드 분석을 효율적으로 수행할 수 있습니다.
-
-
암호화 구성 - 선택 사항:
-
업그레이드 아티팩트 암호화 활성화: 결과 경로에 데이터를 쓸 때 저장 데이터 암호화를 활성화합니다. 업그레이드 아티팩트를 암호화하지 않으려면 이 옵션을 선택하지 않은 상태로 둡니다.
-
서비스 메타데이터 암호화 사용자 지정: 서비스 메타데이터는 기본적으로 AWS 소유 키를 사용하여 암호화됩니다. 암호화에 자체 키를 사용하려면이 옵션을 선택하세요.
-
-
-
실행을 선택하여 업그레이드 분석을 시작하세요. 분석이 실행되는 동안 업그레이드 분석 탭에서 결과를 볼 수 있습니다. 분석 세부 정보 창에는 분석에 대한 정보와 업그레이드 아티팩트에 대한 링크가 표시됩니다.
-
결과 경로 - 결과 요약 및 업그레이드 스크립트가 저장되는 위치입니다.
-
Amazon S3에서의 업그레이드된 스크립트 - Amazon S3에서 업그레이드 스크립트 위치. 업그레이드를 적용하기 전에 스크립트를 볼 수 있습니다.
-
Amazon S3에서의 업그레이드 요약 - Amazon S3에서 업그레이드 요약 위치. 업그레이드를 적용하기 전에 업그레이드 요약을 볼 수 있습니다.
-
-
업그레이드 분석이 완료되면 업그레이드된 스크립트 적용을 선택하여 업그레이드 스크립트를 적용하여 작업을 자동으로 업그레이드할 수 있습니다.
적용 후에는 AWS Glue 버전이 4.0으로 업데이트됩니다. 스크립트 탭에서 새 스크립트를 볼 수 있습니다.
업그레이드 요약 이해
이 예제에서는 AWS Glue 작업을 버전 2.0에서 버전 4.0으로 업그레이드하는 프로세스를 보여줍니다. 샘플 작업은 Amazon S3 버킷에서 제품 데이터를 읽고 Spark SQL을 사용하여 여러 변환을 데이터에 적용한 다음, 변환된 결과를 Amazon S3 버킷에 다시 저장합니다.
from awsglue.transforms import *
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from pyspark.sql.types import *
from pyspark.sql.functions import *
from awsglue.job import Job
import json
from pyspark.sql.types import StructType
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
gdc_database = "s3://aws-glue-scripts-us-east-1-gamma/demo-database/"
schema_location = (
"s3://aws-glue-scripts-us-east-1-gamma/DataFiles/"
)
products_schema_string = spark.read.text(
f"{schema_location}schemas/products_schema"
).first()[0]
product_schema = StructType.fromJson(json.loads(products_schema_string))
products_source_df = (
spark.read.option("header", "true")
.schema(product_schema)
.option(
"path",
f"{gdc_database}products/",
)
.csv(f"{gdc_database}products/")
)
products_source_df.show()
products_temp_view_name = "spark_upgrade_demo_product_view"
products_source_df.createOrReplaceTempView(products_temp_view_name)
query = f"select {products_temp_view_name}.*, format_string('%0$s-%0$s', category, subcategory) as unique_category from {products_temp_view_name}"
products_with_combination_df = spark.sql(query)
products_with_combination_df.show()
products_with_combination_df.createOrReplaceTempView(products_temp_view_name)
product_df_attribution = spark.sql(
f"""
SELECT *,
unbase64(split(product_name, ' ')[0]) as product_name_decoded,
unbase64(split(unique_category, '-')[1]) as subcategory_decoded
FROM {products_temp_view_name}
"""
)
product_df_attribution.show()
product_df_attribution.write.mode("overwrite").option("header", "true").option(
"path", f"{gdc_database}spark_upgrade_demo_product_agg/"
).saveAsTable("spark_upgrade_demo_product_agg", external=True)
spark_upgrade_demo_product_agg_table_df = spark.sql(
f"SHOW TABLE EXTENDED in default like 'spark_upgrade_demo_product_agg'"
)
spark_upgrade_demo_product_agg_table_df.show()
job.commit()
from awsglue.transforms import *
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from pyspark.sql.types import *
from pyspark.sql.functions import *
from awsglue.job import Job
import json
from pyspark.sql.types import StructType
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
# change 1
spark.conf.set("spark.sql.adaptive.enabled", "false")
# change 2
spark.conf.set("spark.sql.legacy.pathOptionBehavior.enabled", "true")
job = Job(glueContext)
gdc_database = "s3://aws-glue-scripts-us-east-1-gamma/demo-database/"
schema_location = (
"s3://aws-glue-scripts-us-east-1-gamma/DataFiles/"
)
products_schema_string = spark.read.text(
f"{schema_location}schemas/products_schema"
).first()[0]
product_schema = StructType.fromJson(json.loads(products_schema_string))
products_source_df = (
spark.read.option("header", "true")
.schema(product_schema)
.option(
"path",
f"{gdc_database}products/",
)
.csv(f"{gdc_database}products/")
)
products_source_df.show()
products_temp_view_name = "spark_upgrade_demo_product_view"
products_source_df.createOrReplaceTempView(products_temp_view_name)
# change 3
query = f"select {products_temp_view_name}.*, format_string('%1$s-%1$s', category, subcategory) as unique_category from {products_temp_view_name}"
products_with_combination_df = spark.sql(query)
products_with_combination_df.show()
products_with_combination_df.createOrReplaceTempView(products_temp_view_name)
# change 4
product_df_attribution = spark.sql(
f"""
SELECT *,
try_to_binary(split(product_name, ' ')[0], 'base64') as product_name_decoded,
try_to_binary(split(unique_category, '-')[1], 'base64') as subcategory_decoded
FROM {products_temp_view_name}
"""
)
product_df_attribution.show()
product_df_attribution.write.mode("overwrite").option("header", "true").option(
"path", f"{gdc_database}spark_upgrade_demo_product_agg/"
).saveAsTable("spark_upgrade_demo_product_agg", external=True)
spark_upgrade_demo_product_agg_table_df = spark.sql(
f"SHOW TABLE EXTENDED in default like 'spark_upgrade_demo_product_agg'"
)
spark_upgrade_demo_product_agg_table_df.show()
job.commit()

요약에 따르면 스크립트를 AWS Glue 2.0에서 AWS Glue 4.0으로 업그레이드하기 위해 AWS Glue에서 제안하는 네 가지 변경 사항이 있습니다.
-
Spark SQL 구성(spark.sql.adaptive.enabled): 이 변경 사항은 Spark SQL 적응형 쿼리 실행을 위한 새 기능으로 애플리케이션 동작을 복원합니다. Spark 3.2부터 도입됩니다. 이 구성 변경을 검사하고 기본 설정에 따라 추가로 활성화하거나 비활성화할 수 있습니다.
-
DataFrame API 변경: 경로 옵션은
load()
와 같은 다른 DataFrameReader 작업과 공존할 수 없습니다. 이전 동작을 유지하기 위해 AWS Glue는 스크립트를 업데이트하여 새 SQL 구성(spark.sql.legacy.pathOptionBehavior.enabled)을 추가했습니다. -
Spark SQL API 변경:
format_string(strfmt, obj, ...)
에서strfmt
의 동작이 첫 번째 인수로0$
를 허용하지 않도록 업데이트되었습니다. 호환성을 보장하기 위해 AWS Glue는 대신 첫 번째 인수로1$
를 사용하도록 스크립트를 수정했습니다. -
Spark SQL API 변경:
unbase64
함수에서는 잘못된 형식의 문자열 입력을 허용하지 않습니다. 이전 동작을 유지하기 위해 AWS Glue는try_to_binary
함수를 사용하도록 스크립트를 업데이트했습니다.
진행 중인 업그레이드 분석 중지
진행 중인 업그레이드 분석을 취소하거나 분석을 중지할 수 있습니다.
-
업그레이드 분석 탭을 선택하세요.
-
실행 중인 작업을 선택한 다음, 중지를 선택하세요. 그러면 분석이 중지됩니다. 그런 다음, 동일한 작업에서 다른 업그레이드 분석을 실행할 수 있습니다.
고려 사항
평가판 기간에 Spark 업그레이드를 사용하기 시작하면 서비스의 최적 사용을 위해 고려할 몇 가지 중요한 측면이 있습니다.
-
서비스 범위 및 제한 사항: 평가판 릴리스에서는 AWS Glue 버전 2.0에서 버전 4.0으로 PySpark 코드를 업그레이드하는 데 중점을 둡니다. 현재 서비스는 추가 라이브러리 종속 항목에 의존하지 않는 PySpark 코드를 처리합니다. AWS 계정에서 동시에 최대 10개의 작업에 대해 자동화된 업그레이드를 실행할 수 있으므로 시스템 안정성을 유지하면서 여러 작업을 효율적으로 업그레이드할 수 있습니다.
-
PySpark 작업만 지원됩니다.
-
업그레이드 분석은 24시간 후에 제한 시간이 초과됩니다.
-
한 작업에 대해 한 번에 하나의 활성 업그레이드 분석만 실행할 수 있습니다. 계정 수준에서는 최대 10개의 활성 업그레이드 분석을 동시에 실행할 수 있습니다.
-
-
업그레이드 프로세스 중 비용 최적화: Spark 업그레이드는 생성형 AI를 사용하여 여러 반복을 통해 업그레이드 계획을 검증합니다. 이대 계정에서 각 반복이 AWS Glue 작업으로 실행되므로 비용 효율성을 위해 검증 작업 실행 구성을 최적화하는 것이 중요합니다. 이를 위해 업그레이드 분석을 시작할 때 다음과 같이 실행 구성을 지정하는 것이 좋습니다.
-
비프로덕션 개발자 계정을 사용하고, Spark 업그레이드를 사용하는 검증에 대해 프로덕션 데이터를 나타내지만 크기가 더 작은 샘플 모의 데이터세트를 선택합니다.
-
G.1X 작업자와 같은 적절한 크기의 컴퓨팅 리소스를 사용하고 샘플 데이터를 처리하기 위해 적절한 수의 작업자를 선택합니다.
-
워크로드에 따라 리소스를 자동으로 조정하려면 해당하는 경우 AWS Glue 작업 오트 스케일링을 활성화합니다.
예를 들어 프로덕션 작업에서 20G.2X 작업자를 사용하여 테라바이트 단위의 데이터를 처리하는 경우 검증을 위해 2G.2X 작업자를 사용하고 오토 스케일링이 활성화된 몇 기가바이트 단위의 대표 데이터를 처리하도록 업그레이드 작업을 구성할 수 있습니다.
-
-
평가판 모범 사례: 평가판 기간에 비프로덕션 작업으로 업그레이드 여정을 시작하는 것이 좋습니다. 이 접근 방식을 사용하면 업그레이드 워크플로를 숙지하고 서비스에서 다양한 유형의 Spark 코드 패턴을 처리하는 방법을 이해할 수 있습니다.
-
경보 및 알림: 작업에서 생성형 AI 업그레이드 기능을 사용하는 경우 실패한 작업 실행에 대한 경보/알림이 꺼져 있는지 확인합니다. 업그레이드 프로세스 중에는 업그레이드된 아티팩트가 제공되기 전에 계정에서 최대 10회의 작업 실행에 실패할 수 있습니다.
-
이상 탐지 규칙: 업그레이드 중인 작업에서 이상 탐지 규칙도 끕니다. 업그레이드 검증이 진행되는 동안 중간 작업 실행 중에 출력 폴더에 기록된 데이터가 예상되는 형식이 아닐 수 있습니다.
Spark 업그레이드의 교차 리전 추론
Spark 업그레이드는 Amazon Bedrock으로 구동되며 교차 리전 추론(CRIS)을 활용합니다. CRIS를 사용하면 Spark 업그레이드는 추론 요청을 처리하고 사용 가능한 컴퓨팅 리소스 및 모델 가용성을 극대화하며 최상의 고객 경험을 제공하기 위해 사용자의 지역 내에서 최적의 리전을 자동으로 선택합니다(여기에서 자세한 설명 참조). 교차 리전 추론을 사용하는 데 드는 추가 비용은 없습니다.
교차 리전 추론 요청은 데이터가 원래 상주하는 지역의 일부인 AWS 리전 내에 보관됩니다. 예를 들어, 미국 내에서 이루어진 요청은 미국의 AWS 리전 내에 보관됩니다. 데이터는 기본 리전에만 저장되어 있지만 교차 리전 추론을 사용하는 경우 입력 프롬프트와 출력 결과가 기본 리전 외부로 이동할 수 있습니다. 모든 데이터는 Amazon의 보안 네트워크를 통해 암호화되어 전송됩니다.