Loading
Loading
Oracle Cloud provides the most generous Always Free Tier in the cloud world ā no expiration and no credit card needed after verification.
from dataclasses import dataclass, field
from typing import List, Dict
# āāā Ł
ŲŲ§ŁŲ§Ų© OCI SDK āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
@dataclass
class OCIShape:
name: str
ocpus: float
memory: float # GB
arch: str # ARM, x86
free: bool = False
OCI_SHAPES = [
OCIShape("VM.Standard.A1.Flex", 4.0, 24.0, "ARM", True), # Always Free
OCIShape("VM.Standard.E2.1.Micro", 1.0, 1.0, "x86", True), # Always Free (x86)
OCIShape("VM.Standard3.Flex", 32.0, 512.0, "x86", False),
OCIShape("BM.GPU.A10.4", 64.0, 960.0, "x86", False),
]
@dataclass
class OCIInstance:
name: str
shape: OCIShape
region: str
os: str
state: str = "RUNNING"
ip: str = "0.0.0.0"
def __post_init__(self):
# Ł
ŲŲ§ŁŲ§Ų© IP
import random
random.seed(hash(self.name) % 1000)
self.ip = f"{random.randint(140,170)}.{random.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}"
@dataclass
class OCIObjectStorage:
namespace: str
bucket: str
region: str
objects: List[str] = field(default_factory=list)
def put_object(self, name: str, size_mb: float):
self.objects.append(name)
print(f" ā
Uploaded: {name} ({size_mb:.1f} MB)")
def list_objects(self):
print(f" š¦ {self.bucket}: {len(self.objects)} objects")
for obj in self.objects:
print(f" ⢠{obj}")
class OCIClient:
REGIONS = {
"us-ashburn-1": "Ashburn, Virginia (US East)",
"eu-frankfurt-1": "Frankfurt, Germany",
"ap-singapore-1": "Singapore",
"me-jeddah-1": "Jeddah, Saudi Arabia",
"me-dubai-1": "Dubai, UAE",
}
def __init__(self, tenancy: str, region: str = "us-ashburn-1"):
self.tenancy = tenancy
self.region = region
self.instances: Dict[str, OCIInstance] = {}
def show_free_shapes(self):
print(f"\nš Oracle Cloud Always Free Shapes:")
print(f" {'Shape':<28} {'OCPUs':>6} {'Memory':>8} {'Arch':>5}")
print(" " + "-"*52)
for s in OCI_SHAPES:
tag = "ā
FREE" if s.free else "š° Paid"
mem_s = f"{s.memory:.0f} GB"
print(f" {s.name:<28} {s.ocpus:>6.1f} {mem_s:>8} {s.arch:>5} {tag}")
def create_instance(self, name: str, shape_name: str, os: str = "Ubuntu 22.04") -> OCIInstance:
shape = next((s for s in OCI_SHAPES if s.name == shape_name), OCI_SHAPES[0])
inst = OCIInstance(name, shape, self.region, os)
self.instances[name] = inst
free_s = "Ł
Ų¬Ų§ŁŁ ā¾ļø" if shape.free else "Ł
ŲÆŁŁŲ¹"
print(f" ā
Instance: {name}")
print(f" Shape : {shape.name} ({shape.arch})")
print(f" OCPUs : {shape.ocpus} | RAM: {shape.memory} GB")
print(f" OS : {os}")
print(f" Ų§ŁŲŖŁŁŁŲ©: {free_s}")
print(f" IP : {inst.ip}")
return inst
def instance_summary(self):
print(f"\nš Ł
ŁŲ®Ųµ Ų§ŁŁ Instances:")
free = sum(1 for i in self.instances.values() if i.shape.free)
total_ocpu = sum(i.shape.ocpus for i in self.instances.values())
total_ram = sum(i.shape.memory for i in self.instances.values())
print(f" Instances : {len(self.instances)} ({free} Ł
Ų¬Ų§ŁŁŲ©)")
print(f" Ų„Ų¬Ł
Ų§ŁŁ OCPUs : {total_ocpu}")
total_ram_s = f"{total_ram:.0f} GB"
print(f" Ų„Ų¬Ł
Ų§ŁŁ RAM : {total_ram_s}")
# āāā Ų„Ų¹ŲÆŲ§ŲÆ Oracle Cloud āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
print("š“ Oracle Cloud ā Always Free Tier:")
print("=" * 52)
oci = OCIClient("ocid1.tenancy.oc1..aaa", "us-ashburn-1")
# Ų¹Ų±Ų¶ Ų§ŁŁ Free Shapes
oci.show_free_shapes()
# Ų„ŁŲ“Ų§Ų” VMs Ų§ŁŁ
Ų¬Ų§ŁŁŲ©
print(f"\n\nš„ļø Ų„ŁŲ“Ų§Ų” VMs Ų§ŁŁ
Ų¬Ų§ŁŁŲ© (ARM Ampere A1):")
vm1 = oci.create_instance("ai-api-server", "VM.Standard.A1.Flex", "Ubuntu 22.04")
print()
vm2 = oci.create_instance("ai-worker", "VM.Standard.A1.Flex", "Ubuntu 22.04")
print()
vm3 = oci.create_instance("admin-micro", "VM.Standard.E2.1.Micro", "Ubuntu 22.04")
# Object Storage
print(f"\n\nš¾ Object Storage (200 GB Ł
Ų¬Ų§ŁŲ§Ł):")
storage = OCIObjectStorage("my-namespace", "ai-models-bucket", oci.region)
storage.put_object("models/sentiment-v2.pkl", 45.3)
storage.put_object("data/training-set.csv", 120.8)
storage.put_object("logs/inference-2024.log", 2.1)
storage.list_objects()
# Ł
ŁŲ®Ųµ
oci.instance_summary()
# CLI Commands
print(f"\nš» Ų£ŁŲ§Ł
Ų± OCI CLI:")
cmds = [
("ŲŖŲ«ŲØŁŲŖ OCI CLI", "pip install oci-cli"),
("Ų„Ų¹ŲÆŲ§ŲÆ Ų§ŁŁ
ŁŲ§ŲŖŁŲ", "oci setup config"),
("ŁŲ§Ų¦Ł
Ų© Ų§ŁŁ VMs", "oci compute instance list --compartment-id <id>"),
("Ų±ŁŲ¹ Ł
ŁŁ ŁŁ Storage","oci os object put --bucket-name ai-models --file model.pkl"),
]
for desc, cmd in cmds:
print(f" # {desc}")
print(f" $ {cmd}")
print()
print("ā
Oracle Cloud Ų¬Ų§ŁŲ²!")