AWS- MarketplaceMeteringClient를 통한 marketplace 고객 관리

코드생성기·2024년 10월 2일

AWSMarketplace

목록 보기
3/3
post-thumbnail

앞의 글에서 마켓플레이스에 대해 알아봤었는데 SaaS 제품을 연동하기 위해선 상당히 복잡한 절차가 필요하지만 회사에서 제공하는 서비스 방침상 비교적 간단하게 진행이 가능할 것 같았다.

결국 현재 상황에서 AWS에서 요구하는 중요한 바는

  • AWS와 외부 서비스에서의 이중 회원가입 금지
  • 선택한 요금제에 따른 미터링 정보 제공
    이 두가지 인것 같은데 제공하는 서비스 유형이 사용량만큼 비용을 지불하는 것이 아닌 계약형이기 때문에 미터링은 배제해도 될거 같았다.

그래서 랜딩페이지에서 받은 토큰을 통해 Server에서 ResolveCustomer를 통해 고객정보를 저장해 관리하기만 하도록 계획하였다.

랜딩페이지를 통한 고객정보 수집과 관리

Fulfillment option에서 URL을 변경해줘 서버에 등록한 API로 바꿔주었고
서버에서 전달받은 토큰을 가져와 AWS회원의 정보 입력 페이지로 이동하게 해주었다.
해당 정보를 통해 AWS회원을 관리하도록 하였다.

이제 제품을 구독하였다면 아래의 계정 세팅안내 URL을 클릭하게 된다면 해당 페이지로 이동하게 된다.

프론트에 등록된 아래의 페이지로 x-amzn-token을 전달 받았다.
이제 x-amzn-token을 까서 회사 DB에 저장해야 한다.

아래에 링크에 ResolveCustomer 기능을 제공하는 가이드가 있는데 자바 소스로는 구현된 정보는 제공되지 않는거 같다..
API Reference와 구글링으로 구현하는 수 밖에 없다..
파이썬 소스를 통해 어느정도 파악되는 점은 AWS Client를 구현하고 Client에서 ResolveCustomer 기능을 사용하는거 같다.

https://docs.aws.amazon.com/ko_kr/marketplace/latest/userguide/saas-code-examples.html#saas-resolvecustomer-example

우선 프로젝트의 jdk를 아마존에서 제공하는 java 11버전으로 변경해 준 다음
아래의 marketplacemetering 라이브러리의 의존성을 주입해주었다.

// awssdk dependency injection
implementation 'software.amazon.awssdk:marketplacemetering:2.28.7'

이제 MarketplaceMeteringClient클래스를 사용할 수 있게 되었다.
가이드에서 알려준 미터링 관련 메서드와 interface를 구현할 builder 메서드를 제공한다.

클라이언트를 구현할때 리전과 자격증명에 대한 정보를 요구하는것 같다.

자격증명 제공 방식

  • 자격증명의 경우 자바의 System Properties에 직접 키값을 하드코딩하는 방식
  • OS의 환경변수에 키값을 저장하여 불러오는 방식
  • 자격증명 프로필 파일에 저장된 키값을 읽어 사용하는 방식 등 여러가지의 방식
  • EC2에 접근해 자격증명을 받아오는 방식

등 여러가지의 방식을 제공하는데 EC2에 배포가 되어있지 않은 환경 때문에
자바의 System Properties 방식은 프라이빗 깃에 올라가는 소스지만
보안상 너무 취약해 보였고
서버에 직접 접근하지 않는 이상 확인이 불가능한 OS 환경변수와
aws cli 두개의 방식중 aws cli를 이용해 프로필 파일을 읽는 방법을 선택하였다.

aws cli를 이용하는 방법은 간단하다.
WAS가 배포된 서버에 aws cli를 설치하고 정보를 입력해주면 된다.
aws cli를 적용하는 방법은 아래 링크에서 확인할 수 있다.

aws cli 적용 방법

MarketplaceMeteringClient 생성

// aws cli 의 프로필을 이용해 MarketpalceMeteringClient를 생성하는 과정
private static MarketplaceMeteringClient init() {

        MarketplaceMeteringClientBuilder marketplaceMeteringClientBuilder
                 = MarketplaceMeteringClient.builder();

        // aws cli를 통해 accessKeyId, secretAccessKey로 인증 정보 생성
        ProfileCredentialsProvider profileCredentialsProvider
                = ProfileCredentialsProvider.create(프로필명);

        // MarketplaceMeteringClient 빌드
        marketplaceMeteringClientBuilder.region(Region.AP_NORTHEAST_2);
        marketplaceMeteringClientBuilder.credentialsProvider(profileCredentialsProvider);
        marketplaceMeteringClient = marketplaceMeteringClientBuilder.build();

        return marketplaceMeteringClient;
    }

resolveCustomer로 x-amzn-token 해석

public MarketplaceTokenDto getAwsToken(String awsToken) {
		MarketplaceMeteringClient marketplaceMeteringClient = MarketplaceClientUtil.getMarketplaceMeteringClient();

		ResolveCustomerRequest resolveCustomerRequest =
				ResolveCustomerRequest.builder()
				.registrationToken(awsToken)
				.build();

		ResolveCustomerResponse resolveCustomerResponse = marketplaceMeteringClient.resolveCustomer(resolveCustomerRequest);

		return MarketplaceTokenDto.builder()
				.customerIdentifier(resolveCustomerResponse.customerIdentifier())
				.productCode(resolveCustomerResponse.productCode())
				.customerAWSAccountId(resolveCustomerResponse.customerAWSAccountId())
				.build();

    }

위의 과정을 통해 marketplace를 통해 구독을 한 고객의 정보를 알 수 있고 해당 정보를 저장하여 관리하면 될것 같다.

profile
양질의 코드를 생성하기 위해 스스로 고도화 작업 진행중

0개의 댓글