๋๋ฐ์ด์ค ์ญ์ ์์
- ๋๋ฐ์ด์ค์ ๋ฑ๋ก๋ ์ธ์ฆ์ ๋ถ๋ฆฌ
- ํด๋น ์ธ์ฆ์๋ฅผ ๋นํ์ฑํ ์ํ๋ก ๋ณ๊ฒฝ
- ์ธ์ฆ์์ ์ฐ๊ฒฐ๋ ์ ์ฑ ๋ถ๋ฆฌ
- AWS์์ ์ธ์ฆ์ ์ญ์
- DB์์ ๋๋ฐ์ด์ค์ ์ธ์ฆ์ ์ญ์
๐ ์ด ๊ณผ์ ์ ๊ฑฐ์ณ์ ๋๋ฐ์ด์ค๊ฐ AWS์ DB ๋ชจ๋์์ ์ญ์ ๋๋๋ก ํ์๋ค.
1. ๋๋ฐ์ด์ค์ ๋ฑ๋ก๋ ์ธ์ฆ์ ๋ถ๋ฆฌ
public Mono<Boolean> detachThingPrincipal(String deviceId) {
// Thing์ ์ฐ๊ฒฐ๋ principals(์ธ์ฆ์ ๋ฑ) ๊ฐ์ ธ์ค๊ธฐ
ListThingPrincipalsRequest request = ListThingPrincipalsRequest.builder()
.thingName(deviceId)
.build();
return Mono.fromFuture(iotAsyncClient.listThingPrincipals(request))
.flatMap(principalResponse -> {
return Flux.fromIterable(principalResponse.principals()) // ๊ฐ principal์ ARN ๊ฐ์ ธ์ค๊ธฐ
.flatMap(principal -> {
String certificateId = principal.split("/")[1];
DetachThingPrincipalRequest detachRequest = DetachThingPrincipalRequest.builder()
.thingName(deviceId)
.principal(principal)
.build();
// ์ ์ฑ
๋ฐ ์ธ์ฆ์ ๋ถ๋ฆฌ ํ ์ญ์
return Mono.fromFuture(iotAsyncClient.detachThingPrincipal(detachRequest))
.flatMap(result -> deleteCertificate(certificateId, principal));
}).then(Mono.just(true));
});
}
iotAsyncClient.listThingPrincipals(request)
- Thing์ ์ฐ๊ฒฐ๋ ๋ชจ๋ principals(์ธ์ฆ์ ๋๋ ์๊ฒฉ ์ฆ๋ช ๋ฑ) ๊ฐ์ ธ์ค๋ ๋ฉ์๋
List<String> principals()
- ๊ฐ principal์ ARN ๊ฐ์ ธ์ค๋ ๋ฉ์๋
iotAsyncClient.detachThingPrincipal(request)
- Thing๊ณผ principal์ ์ฐ๊ฒฐ ํด์ ํ๋ ๋ฉ์๋
deleteCertificate(certificateId, principal)
- ์ธ์ฆ์ ์ญ์ ํ๋ ๋ฉ์๋
2. AWS์ ์๋ ์ธ์ฆ์ ์ญ์ ํ๊ธฐ
public Mono<Boolean> deleteCertificate(String certificateId, String certificateArn) {
// ์ธ์ฆ์ ์ญ์ ํ๊ธฐ ์ ์ ์ธ์ฆ์๋ฅผ ๋นํ์ฑํ(INACTIVE) ์ํ๋ก update
UpdateCertificateRequest request = UpdateCertificateRequest.builder()
.certificateId(certificateId)
.newStatus(CertificateStatus.INACTIVE)
.build();
// ์ ์ฑ
๋ถ๋ฆฌ
return detachPolicy(certificateArn)
.flatMap(success -> Mono.fromFuture(iotAsyncClient.updateCertificate(request))
.flatMap(updateCertificateResponse -> {
DeleteCertificateRequest deleteRequest = DeleteCertificateRequest.builder()
.certificateId(certificateId)
.build();
// ์ธ์ฆ์ ์ญ์
return Mono.fromFuture(iotAsyncClient.deleteCertificate(deleteRequest))
.then(Mono.just(true));
})
);
}
detachPolicy(certificateArn)
- ์ ์ฑ ๋ถ๋ฆฌํ๋ ๋ฉ์๋
- ํ๋จ ์ฝ๋ ์ฐธ๊ณ
iotAsyncClient.updateCertificate(request)
- ์ธ์ฆ์ ์ํ๋ฅผ ๋นํ์ฑํ๋ก ๋ณ๊ฒฝ์ํค๋ ๋ฉ์๋
iotAsyncClient.deleteCertificate(request)
- ์ธ์ฆ์ ์ญ์ ํ๋ ๋ฉ์๋
public Mono<Boolean> detachPolicy(String certificateArn) {
DetachPolicyRequest request = DetachPolicyRequest.builder()
.policyName("FleetProvDevicePolicy")
.target(certificateArn)
.build();
return Mono.fromFuture(iotAsyncClient.detachPolicy(request))
.flatMap(detachPolicyResponse -> {
return Mono.just(true);
});
}
- iotAsyncClient.detachPolicy(request)
- ์ ์ฑ ๋ถ๋ฆฌํ๋ ๋ฉ์๋
3. thing ์ญ์
public Mono<Void> remove(String deviceId) {
DeleteThingRequest request = DeleteThingRequest.builder()
.thingName(deviceId)
.build();
// ๋๋ฐ์ด์ค์ ์ฐ๊ฒฐ๋ ์ธ์ฆ์ ๋ฐ ์ ์ฑ
๋ถ๋ฆฌ
return detachThingPrincipal(deviceId)
// thing ์ญ์
.flatMap(success -> Mono.fromFuture(iotAsyncClient.deleteThing(request))
.doOnSuccess(response -> log.info("[remove] DeviceId {} removed.", deviceId))
.then());
}
iotAsyncClient.deleteThing(request)
- thing ์ญ์ ํ๋ ๋ฉ์๋
DB์์ ์ญ์ ํ๋ ๊ฒ์ ์์ ๊ณผ์ ์ ๋ชจ๋ ๋ง์น ํ repository๋ฅผ ํตํด ์ญ์ ํ๋ฉด ๋๋ค.
'AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AWS] Cognito๋ก ์ฌ์ฉ์ ์ธ์ฆํ๊ธฐ (ํ์๊ฐ์ ๋ถํฐ ํํด๊น์ง) (0) | 2025.02.14 |
---|---|
[AWS] AWS IoT ๋๋ฐ์ด์ค ๋ฑ๋ก ์ ์ฐจ ์ฝ๋๋ก ์์๋ณด๊ธฐ (0) | 2024.11.29 |
[AWS] AWS SDK๋ฅผ ํ์ฉํด AWS IoT ๋๋ฐ์ด์ค ๋ฑ๋กํ๊ธฐ (0) | 2024.11.26 |
[AWS] AWS IoT Core ์ด๊ฒ์ ๊ฒ (1) | 2024.11.21 |
[AWS] AWS Cognito์ OAuth (3) | 2024.10.28 |