IT/자바, 스프링

자바 코드에서 오라클 oci 인스턴스 생성하기

thesse 2022. 1. 13. 13:52
300x250
반응형

스프링 부트에서 오라클 클라우드 oci의 인스턴스 생성을 명령해보자

 

 

1. 인스턴스 생성

    @Override
    public Instance createInstance(String domain) {

        /* 인스턴스 디테일 설정 */
        LaunchInstanceDetails launchInstanceDetails = LaunchInstanceDetails.builder()
                .availabilityDomain("...")
                .compartmentId("...")
                .shape("VM.Standard.E3.Flex")
                .displayName(domain)
                .createVnicDetails(CreateVnicDetails.builder()
                        .subnetId("...")
                        .build())
                .metadata(new HashMap<java.lang.String, java.lang.String>() {
                    {
                        put("ssh_authorized_keys","...");
                    }
                })
                .shapeConfig(LaunchInstanceShapeConfigDetails.builder()
                        .ocpus(2f)
                        .memoryInGBs(8f)
                        .baselineOcpuUtilization(LaunchInstanceShapeConfigDetails.BaselineOcpuUtilization.Baseline18).build())
                .sourceDetails(InstanceSourceViaImageDetails.builder()
                        .imageId("...")
                        .build())
                .build();

        /* 리퀘스트 만들기 */
        LaunchInstanceRequest launchInstanceRequest = LaunchInstanceRequest.builder()
                .launchInstanceDetails(launchInstanceDetails)
                .build();

        /* 리퀘스트 보내서 결과 받기 */
        LaunchInstanceResponse response = computeClient.launchInstance(launchInstanceRequest);
        log.info("oci createInstance success : instance name " +response.getInstance().getDisplayName());
        return response.getInstance();

    }

 

 

인스턴스 디테일에는 더 많은 옵션을 설정할 수 있지만 여기서는 필요한 최소한의 것만 설정했다.

리퀘스트를 보내면 oci에서 새로운 인스턴스를 생성한 후 인스턴스 정보를 리스폰스로 보내준다.

 

리스폰스로 들어온 인스턴스로 새로 생성된 인스턴스의 정보를 확인할 수 있는데

여기에 ip 정보는 없으므로 따로 리퀘스트를 보내 찾아야 한다

이때 리스폰스로 받은 인스턴스에서 인스턴스 ocid를 이용할 수 있다.

 

 

 

 

2. public ip 가져오기

 

2-1. instance id로 vnic attachment  찾아오기

    @Override
    public List<VnicAttachment> getVnicList(String instanceId) {
        ListVnicAttachmentsRequest listVnicAttachmentsRequest = ListVnicAttachmentsRequest.builder()
                .compartmentId("...")
                .availabilityDomain("...")
                .instanceId(instanceId)
                .build();

        ListVnicAttachmentsResponse response = computeClient.listVnicAttachments(listVnicAttachmentsRequest);
        return response.getItems();
    }

인스턴스의 ocid로 해당 인스턴스의 vnic attachment 목록을 받아올 수 있다.

여기에서 vnic id를 추출해서 다시 vnic를 받아온다.

 

 

2-2. vnic id로 vnic 찾아오기

    @Override
    public Vnic getVnic(String vnicId) {
        GetVnicRequest getVnicRequest = GetVnicRequest.builder()
                .vnicId(vnicId)
                .build();

        GetVnicResponse response = vnClient.getVnic(getVnicRequest);
        return response.getVnic();
    }

 

2-3. vnic에서 public id 찾기

    @Override
    public String getIp(String ocid) {

        // instance id로 vnic attachment  찾아오기
        List<VnicAttachment> vnicList = ociService.getVnicList(ocid);        
        String vnicId = vnicList.get(0).getVnicId();

        // vnic id로 vnic 찾아오기
        Vcni vcni = ociService.getVnic(vnicId);
        String publicIp = vcni.getPublicIp();
       
        // public ip 리턴
        return vcni.getPublicIp();
    }

 

 

 

참고

https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/Instance/LaunchInstance

https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/VnicAttachment/ListVnicAttachments

https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/Vnic/GetVnic

 

300x250
반응형