티스토리 뷰
728x90
CDK Module 선분석
- 일단 Athena에 해당되는 CDK module이 있는지 봅니다.
- 먼저 CDK API 문서를 엽니다: API Reference · AWS CDK
- 그리고 Athena를 찾아서 overview page를 엽니다: @aws-cdk/aws-athena module · AWS CDK
- 보면 다음과 같이 나와있습니다.
- 이렇게 CFN-resource만 있으므로 이 CDK code는 CloudFormation (CFN)의 wrapper 수준이라는 것을 알 수 있습니다. 자세한 사항은 CFN의 Athena module을 참고해야 합니다.
- 중요한 class는 다음과 같이 4개가 나오는데요. 이것들이 각각 무엇을 하는 class인지 알아봅니다.
- Resource types
- AWS::Athena::DataCatalog
- The AWS::Athena::DataCatalog resource specifies an Amazon Athena data catalog, which contains a name, description, type, parameters, and tags. For more information, see DataCatalog in the Amazon Athena API Reference.
- AWS::Athena::NamedQuery
- The AWS::Athena::NamedQuery resource specifies an Amazon Athena saved query, where QueryString is the list of SQL query statements that comprise the query.
- AWS::Athena::PreparedStatement
- Specifies a prepared statement for use with SQL queries in Athena.
- AWS::Athena::WorkGroup
- The AWS::Athena::WorkGroup resource specifies an Amazon Athena workgroup, which contains a name, description, creation time, state, and other configuration, listed under WorkGroupConfiguration. Each workgroup enables you to isolate queries for you or your group from other queries in the same account. For more information, see CreateWorkGroup in the Amazon Athena API Reference.
- AWS::Athena::DataCatalog
Boto3 Athena 선분석
- 그런데 생각을 해보면 우리는 이미 짜여진 SQL query를 다시 돌리는 것이 아니라 user가 변경할 수 있는 SQL query를 lambda에서 dynamic하게 call을 해주는 것이기 때문에 boto3 level에서 이해할 필요가 있다.
- Athena — Boto3 Docs 1.21.43 documentation
- 여기에서 보면 다음과 같이 SQL query를 실행하는 것을 알 수 있다.
- Athena — Boto3 Docs 1.21.42 documentation
- Runs the SQL query statements contained in the Query . Requires you to have access to the workgroup in which the query ran. Running queries against an external catalog requires GetDataCatalog permission to the catalog. For code samples using the Amazon Web Services SDK for Java, see Examples and Code Samples in the Amazon Athena User Guide .
- Request Syntax
response = client.start_query_execution(
QueryString='string',
ClientRequestToken='string',
QueryExecutionContext={
'Database': 'string',
'Catalog': 'string'
},
ResultConfiguration={
'OutputLocation': 'string',
'EncryptionConfiguration': {
'EncryptionOption': 'SSE_S3'|'SSE_KMS'|'CSE_KMS',
'KmsKey': 'string'
}
},
WorkGroup='string'
)
- See also: AWS API Documentation
- 그래서 Lambda는 결국 Athena service를 사용하면 되고 CDK는 Athena의 resource를 생성한 것은 아니기에 간단하게 CDK IAM으로 해결하는 것이 옳을 것으로 보임.
CDK IAM: Athena
- 그러면 CDK IAM에서 Athena access를 주는 것을 알아보도록 하겠습니다.
- 이런 경우 제일 편한 방법이 IAM console을 이용하는 것입니다.
- IAM의 Policies 선택
- Athena 검색. 다음과 같이 두 개의 policy가 나옵니다.
- 간단하게 하려면 managed policy인 athena full access를 주고 다음의 code를 참조해서 반영을 합니다.
// packages/cdk-infra/src/stack-Glue.ts
const role = new iam.Role(this, "my-glue-job-role", {
assumedBy: new iam.ServicePrincipal("glue.amazonaws.com"),
});
const gluePolicy = iam.ManagedPolicy.fromAwsManagedPolicyName(
"service-role/AWSGlueServiceRole"
);
role.addManagedPolicy(gluePolicy);
- 좀 더 보안을 지키려면 자세한 access를 제한해서 주는 것이 좋습니다.
- 좀 더 세밀하게 IAM policy를 주는 참고 code는 다음을 보세요.
// packages/cdk-infra/src/utils/cdk-ssm.ts
public static GrantReadByPath(
prefix: string,
func: IFunction,
region: string | undefined = process.env.CDK_DEFAULT_REGION,
account: string | undefined = process.env.CDK_DEFAULT_ACCOUNT
) {
// The policy to enable SSM parameter describe
const pSsmDesc = new PolicyStatement();
pSsmDesc.addActions("ssm:DescribeParameters");
pSsmDesc.addResources("*");
func.addToRolePolicy(pSsmDesc);
// The policy to enable SSM Parameters Read by path
const pSsmReadP = new PolicyStatement();
pSsmReadP.addActions("ssm:GetParameter*");
const resourcePath =
"arn:aws:ssm:" + region + ":" + account + ":parameter" + prefix;
pSsmReadP.addResources(resourcePath, resourcePath + "/*");
func.addToRolePolicy(pSsmReadP);
}
728x90
'Dev Story > AWS' 카테고리의 다른 글
AWS EC2 및 CloudWatch 모니터링 지표: 안정적인 클라우드 인프라 운영을 위한 필수 도구 (0) | 2023.04.28 |
---|---|
AWS Step Function 입문해보기 - 람다편 (2) | 2023.04.21 |
쉽고 빠르게 AWS Lambda로 파일 압축 및 해제하기: tar 압축과 arcname 옵션 활용! (0) | 2023.04.14 |
Getting Started with AWS Autogluon: A Step-by-Step Guide (0) | 2023.03.15 |
AWS CodeWhisperer를 활용한 코드 작성 (0) | 2023.03.04 |
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- frontend
- Docker 관리
- AI
- ubuntu
- 쉽게따라하기
- GPT
- 개발이야기
- Redis
- 딥러닝
- svelte
- nestjs
- docker
- Containerization
- MongoDB
- svelte 따라해보기
- 한식
- typescript
- DevOps
- 따라하기
- AWS
- EC2
- python
- cloudcomputing
- 실습
- ML
- 따라해보기
- 클라우드
- ChartGPT
- 티스토리
- lambda
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함