

 AWS SDK untuk .NET V3 telah memasuki mode pemeliharaan.

Kami menyarankan Anda bermigrasi ke [AWS SDK untuk .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Untuk detail dan informasi tambahan tentang cara bermigrasi, silakan lihat [pengumuman mode pemeliharaan](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/) kami.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Tutorial Instans Spot Amazon EC2
<a name="how-to-spot-instances"></a>

Tutorial ini menunjukkan cara menggunakan AWS SDK untuk .NET untuk mengelola Instans Spot Amazon EC2.

## Ikhtisar
<a name="tutor-spot-net-overview"></a>

Instans Spot memungkinkan Anda meminta kapasitas Amazon EC2 yang tidak digunakan dengan harga kurang dari harga Sesuai Permintaan. Ini secara signifikan dapat menurunkan biaya EC2 Anda untuk aplikasi yang dapat terganggu.

Berikut ini adalah ringkasan tingkat tinggi tentang bagaimana Instans Spot diminta dan digunakan.

1. Buat permintaan Instans Spot, tentukan harga maksimum yang bersedia Anda bayar.

1. Ketika permintaan terpenuhi, jalankan instance seperti yang Anda lakukan pada instans Amazon EC2 lainnya.

1. Jalankan instance selama yang Anda inginkan dan kemudian hentikan, kecuali jika *Harga Spot* berubah sedemikian rupa sehingga instance dihentikan untuk Anda.

1. Bersihkan permintaan Instans Spot saat Anda tidak lagi membutuhkannya sehingga Instans Spot tidak lagi dibuat.

Ini telah menjadi ikhtisar tingkat yang sangat tinggi dari Instans Spot. Untuk mendapatkan pemahaman yang lebih baik tentang Instans Spot, lihat [Instans Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html) di Panduan Pengguna [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/).

## Tentang tutorial ini
<a name="about-spot-instances-tutorial"></a>

Ketika Anda mengikuti tutorial ini, Anda menggunakan AWS SDK untuk .NET untuk melakukan hal berikut:
+ Membuat permintaan Instans Spot
+ Tentukan kapan permintaan Instans Spot telah dipenuhi
+ Batalkan permintaan Instans Spot
+ Mengakhiri instance terkait

Bagian berikut menyediakan cuplikan dan informasi lain untuk contoh ini. [Kode lengkap untuk contoh](#tutor-spot-net-main) ditampilkan setelah cuplikan, dan dapat dibangun dan dijalankan apa adanya.

**Topics**
+ [Ikhtisar](#tutor-spot-net-overview)
+ [Tentang tutorial ini](#about-spot-instances-tutorial)
+ [Prasyarat](#tutor-spot-net-prereq)
+ [Kumpulkan apa yang Anda butuhkan](#tutor-spot-net-gather)
+ [Membuat permintaan Instans Spot](#tutor-spot-net-submit)
+ [Tentukan status permintaan Instans Spot Anda](#tutor-spot-net-request-state)
+ [Bersihkan permintaan Instans Spot Anda](#tutor-spot-net-clean-up-request)
+ [Bersihkan Instans Spot Anda](#tutor-spot-net-clean-up-instance)
+ [Kode lengkap](#tutor-spot-net-main)
+ [Pertimbangan tambahan](#tutor-spot-net-additional)

## Prasyarat
<a name="tutor-spot-net-prereq"></a>

Untuk informasi tentang APIs dan prasyarat, lihat bagian induk (). [Bekerja dengan Amazon EC2](ec2-apis-intro.md)

## Kumpulkan apa yang Anda butuhkan
<a name="tutor-spot-net-gather"></a>

Untuk membuat permintaan Instans Spot, Anda memerlukan beberapa hal. 
+ Jumlah instance dan jenis instance-nya. Ada beberapa jenis contoh untuk dipilih. Untuk informasi selengkapnya, lihat [jenis instans Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) di Panduan Pengguna [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/). Lihat juga [Detail Jenis Instance](https://aws.amazon.com/ec2/instance-types/) [dan Penjelajah Jenis Instance](https://aws.amazon.com/ec2/instance-explorer/).

  Nomor default untuk tutorial ini adalah 1.
+ Amazon Machine Image (AMI) yang akan digunakan untuk membuat instance. Untuk selengkapnya AMIs, lihat [Gambar Mesin Amazon (AMIs)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) di [Panduan Pengguna Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/). Secara khusus, lihat [Menemukan AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html) dan [Dibagikan AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharing-amis.html).
+ Harga maksimum yang bersedia Anda bayar per jam contoh. Anda dapat melihat harga untuk semua jenis instans (untuk Instans Sesuai Permintaan dan Instans Spot) di halaman [harga Amazon](https://aws.amazon.com/ec2/pricing/) EC2. Harga default untuk tutorial ini dijelaskan nanti.
+ Jika Anda ingin terhubung dari jarak jauh ke sebuah instans, grup keamanan dengan konfigurasi dan sumber daya yang sesuai. Ini dijelaskan dalam [Bekerja dengan grup keamanan di Amazon EC2](security-groups.md) dan informasi tentang [mengumpulkan apa yang Anda butuhkan](run-instance.md#run-instance-gather) dan [menghubungkan ke instance](run-instance.md#connect-to-instance) di[Meluncurkan instans Amazon EC2](run-instance.md). Untuk mempermudah, tutorial ini menggunakan grup keamanan bernama **default** yang dimiliki semua AWS akun yang lebih baru.

Ada banyak cara untuk mendekati permintaan Instans Spot. Berikut ini adalah strategi umum:
+ Buat permintaan yang pasti biayanya kurang dari harga sesuai permintaan.
+ Buat permintaan berdasarkan nilai perhitungan yang dihasilkan.
+ Buat permintaan untuk memperoleh kapasitas komputasi secepat mungkin.

Penjelasan berikut mengacu pada [riwayat harga Instans Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html) di Panduan Pengguna [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/).

### Mengurangi biaya di bawah On-Demand
<a name="reduce-cost"></a>

Anda memiliki pekerjaan pemrosesan batch yang akan memakan waktu beberapa jam atau hari untuk dijalankan. Namun, Anda fleksibel sehubungan dengan kapan dimulai dan berakhir. Anda ingin melihat apakah Anda dapat menyelesaikannya dengan harga kurang dari biaya Instans Sesuai Permintaan.

Anda memeriksa riwayat Harga Spot untuk jenis instans dengan menggunakan konsol Amazon EC2 atau Amazon EC2 API. Setelah menganalisis riwayat harga untuk jenis instans yang diinginkan di Availability Zone tertentu, Anda memiliki dua pendekatan alternatif untuk permintaan Anda:
+ Tentukan permintaan di ujung atas kisaran Harga Spot, yang masih di bawah harga Sesuai Permintaan, mengantisipasi bahwa permintaan Instans Spot satu kali Anda kemungkinan besar akan terpenuhi dan berjalan untuk waktu komputasi yang cukup berturut-turut untuk menyelesaikan pekerjaan.
+ Tentukan permintaan di ujung bawah kisaran harga, dan rencanakan untuk menggabungkan banyak instance yang diluncurkan dari waktu ke waktu melalui permintaan persisten. Contoh akan berjalan cukup lama, secara agregat, untuk menyelesaikan pekerjaan dengan biaya total yang lebih rendah.

### Bayar tidak lebih dari nilai hasilnya
<a name="value-of-result"></a>

Anda memiliki pekerjaan pemrosesan data untuk dijalankan. Anda memahami nilai hasil pekerjaan dengan cukup baik untuk mengetahui berapa nilainya dalam hal biaya komputasi.

Setelah menganalisis riwayat Harga Spot untuk jenis instans Anda, Anda memilih harga di mana biaya waktu komputasi tidak lebih dari nilai hasil pekerjaan. Anda membuat permintaan persisten dan mengizinkannya berjalan sebentar-sebentar karena Harga Spot berfluktuasi pada atau di bawah permintaan Anda.

### Memperoleh kapasitas komputasi dengan cepat
<a name="acquire-quickly"></a>

Anda memiliki kebutuhan jangka pendek yang tidak terduga untuk kapasitas tambahan yang tidak tersedia melalui Instans Sesuai Permintaan. Setelah menganalisis riwayat Harga Spot untuk jenis instans Anda, Anda memilih harga di atas harga historis tertinggi untuk meningkatkan kemungkinan permintaan Anda akan terpenuhi dengan cepat dan terus menghitung hingga selesai.

Setelah Anda mengumpulkan apa yang Anda butuhkan dan memilih strategi, Anda siap untuk meminta Instans Spot. Untuk tutorial ini, harga spot-instance maksimum default ditetapkan sama dengan harga On-Demand (yaitu \$10,003 untuk tutorial ini). Menetapkan harga dengan cara ini memaksimalkan kemungkinan permintaan akan dipenuhi.

## Membuat permintaan Instans Spot
<a name="tutor-spot-net-submit"></a>

Cuplikan berikut menunjukkan cara membuat permintaan Instance Spot dengan elemen yang Anda kumpulkan sebelumnya.

Contoh [di akhir topik ini](#tutor-spot-net-main) menunjukkan cuplikan ini digunakan.

```
    //
    // Method to create a Spot Instance request
    private static async Task<SpotInstanceRequest> CreateSpotInstanceRequest(
      IAmazonEC2 ec2Client, string amiId, string securityGroupName,
      InstanceType instanceType, string spotPrice, int instanceCount)
    {
      var launchSpecification = new LaunchSpecification{
        ImageId = amiId,
        InstanceType = instanceType
      };
      launchSpecification.SecurityGroups.Add(securityGroupName);
      var request = new RequestSpotInstancesRequest{
        SpotPrice = spotPrice,
        InstanceCount = instanceCount,
        LaunchSpecification = launchSpecification
      };

      RequestSpotInstancesResponse result =
        await ec2Client.RequestSpotInstancesAsync(request);
      return result.SpotInstanceRequests[0];
    }
```

Nilai penting yang dikembalikan dari metode ini adalah ID permintaan Instance Spot, yang terkandung dalam `SpotInstanceRequestId` anggota [SpotInstanceRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TSpotInstanceRequest.html)objek yang dikembalikan.

**catatan**  
Anda akan dikenakan biaya untuk Instans Spot apa pun yang diluncurkan. Untuk menghindari biaya yang tidak perlu, pastikan untuk [membatalkan permintaan apa pun](#tutor-spot-net-clean-up-request) dan [menghentikan instance apa pun](#tutor-spot-net-clean-up-instance).

## Tentukan status permintaan Instans Spot Anda
<a name="tutor-spot-net-request-state"></a>

Cuplikan berikut menunjukkan cara mendapatkan informasi tentang permintaan Instans Spot Anda. Anda dapat menggunakan informasi tersebut untuk membuat keputusan tertentu dalam kode Anda, seperti apakah akan terus menunggu permintaan Instans Spot dipenuhi.

Contoh [di akhir topik ini](#tutor-spot-net-main) menunjukkan cuplikan ini digunakan.

```
    //
    // Method to get information about a Spot Instance request, including the status,
    // instance ID, etc.
    // It gets the information for a specific request (as opposed to all requests).
    private static async Task<SpotInstanceRequest> GetSpotInstanceRequestInfo(
      IAmazonEC2 ec2Client, string requestId)
    {
      var describeRequest = new DescribeSpotInstanceRequestsRequest();
      describeRequest.SpotInstanceRequestIds.Add(requestId);

      DescribeSpotInstanceRequestsResponse describeResponse =
        await ec2Client.DescribeSpotInstanceRequestsAsync(describeRequest);
      return describeResponse.SpotInstanceRequests[0];
    }
```

Metode ini mengembalikan informasi tentang permintaan Instans Spot seperti ID instance, statusnya, dan kode status. Untuk informasi selengkapnya tentang kode status permintaan Instans Spot, lihat [Status permintaan Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand) di [Panduan Pengguna Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/).

## Bersihkan permintaan Instans Spot Anda
<a name="tutor-spot-net-clean-up-request"></a>

Bila Anda tidak perlu lagi meminta Instans Spot, penting untuk membatalkan permintaan yang belum selesai untuk mencegah permintaan tersebut terpenuhi kembali. Cuplikan berikut menunjukkan cara membatalkan permintaan Instans Spot.

Contoh [di akhir topik ini](#tutor-spot-net-main) menunjukkan cuplikan ini digunakan.

```
    //
    // Method to cancel a Spot Instance request
    private static async Task CancelSpotInstanceRequest(
      IAmazonEC2 ec2Client, string requestId)
    {
      var cancelRequest = new CancelSpotInstanceRequestsRequest();
      cancelRequest.SpotInstanceRequestIds.Add(requestId);

      await ec2Client.CancelSpotInstanceRequestsAsync(cancelRequest);
    }
```

## Bersihkan Instans Spot Anda
<a name="tutor-spot-net-clean-up-instance"></a>

Untuk menghindari biaya yang tidak perlu, penting bagi Anda untuk menghentikan instans apa pun yang dimulai dari permintaan Instans Spot; hanya membatalkan permintaan Instans Spot tidak akan menghentikan instans Anda, yang berarti Anda akan terus dikenakan biaya untuk itu. Cuplikan berikut menunjukkan cara menghentikan instance setelah mendapatkan pengenal instans untuk Instance Spot yang aktif.

Contoh [di akhir topik ini](#tutor-spot-net-main) menunjukkan cuplikan ini digunakan.

```
    //
    // Method to terminate a Spot Instance
    private static async Task TerminateSpotInstance(
      IAmazonEC2 ec2Client, string requestId)
    {
      var describeRequest = new DescribeSpotInstanceRequestsRequest();
      describeRequest.SpotInstanceRequestIds.Add(requestId);

      // Retrieve the Spot Instance request to check for running instances.
      DescribeSpotInstanceRequestsResponse describeResponse =
        await ec2Client.DescribeSpotInstanceRequestsAsync(describeRequest);

      // If there are any running instances, terminate them
      if(   (describeResponse.SpotInstanceRequests[0].Status.Code
              == "request-canceled-and-instance-running")
         || (describeResponse.SpotInstanceRequests[0].State == SpotInstanceState.Active))
      {
        TerminateInstancesResponse response =
          await ec2Client.TerminateInstancesAsync(new TerminateInstancesRequest{
            InstanceIds = new List<string>(){
              describeResponse.SpotInstanceRequests[0].InstanceId } });
        foreach (InstanceStateChange item in response.TerminatingInstances)
        {
          Console.WriteLine($"\n  Terminated instance: {item.InstanceId}");
          Console.WriteLine($"  Instance state: {item.CurrentState.Name}\n");
        }
      }
    }
```

## Kode lengkap
<a name="tutor-spot-net-main"></a>

Contoh kode berikut memanggil metode yang dijelaskan sebelumnya untuk membuat dan membatalkan permintaan Instans Spot dan mengakhiri Instance Spot.

### Referensi SDK
<a name="w2aac19c15c17c21c43b5b1"></a>

NuGet paket:
+ [AWSSDK.EC2](https://www.nuget.org/packages/AWSSDK.EC2)

Elemen pemrograman:
+ [Namespace Amazon.EC2](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/NEC2.html)

  [EC2Klien Kelas Amazon](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Client.html)

  Kelas [InstanceType](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TInstanceType.html)
+ [Namespace Amazon.EC2.Model](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/NEC2Model.html)

  Kelas [CancelSpotInstanceRequestsRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TCancelSpotInstanceRequestsRequest.html)

  Kelas [DescribeSpotInstanceRequestsRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TDescribeSpotInstanceRequestsRequest.html)

  Kelas [DescribeSpotInstanceRequestsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TDescribeSpotInstanceRequestsResponse.html)

  Kelas [InstanceStateChange](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TInstanceStateChange.html)

  Kelas [LaunchSpecification](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TLaunchSpecification.html)

  Kelas [RequestSpotInstancesRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TRequestSpotInstancesRequest.html)

  Kelas [RequestSpotInstancesResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TRequestSpotInstancesResponse.html)

  Kelas [SpotInstanceRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TSpotInstanceRequest.html)

  Kelas [TerminateInstancesRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TTerminateInstancesRequest.html)

  Kelas [TerminateInstancesResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TTerminateInstancesResponse.html)

### Kodenya
<a name="w2aac19c15c17c21c43b7b1"></a>

```
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using Amazon.EC2;
using Amazon.EC2.Model;

namespace EC2SpotInstanceRequests
{
  class Program
  {
    static async Task Main(string[] args)
    {
      // Some default values.
      // These could be made into command-line arguments instead.
      var instanceType = InstanceType.T1Micro;
      string securityGroupName = "default";
      string spotPrice = "0.003";
      int instanceCount = 1;

      // Parse the command line arguments
      if((args.Length != 1) || (!args[0].StartsWith("ami-")))
      {
        Console.WriteLine("\nUsage: EC2SpotInstanceRequests ami");
        Console.WriteLine("  ami: the Amazon Machine Image to use for the Spot Instances.");
        return;
      }

      // Create the Amazon EC2 client.
      var ec2Client = new AmazonEC2Client();

      // Create the Spot Instance request and record its ID
      Console.WriteLine("\nCreating spot instance request...");
      var req = await CreateSpotInstanceRequest(
        ec2Client, args[0], securityGroupName, instanceType, spotPrice, instanceCount);
      string requestId = req.SpotInstanceRequestId;

      // Wait for an EC2 Spot Instance to become active
      Console.WriteLine(
        $"Waiting for Spot Instance request with ID {requestId} to become active...");
      int wait = 1;
      var start = DateTime.Now;
      while(true)
      {
        Console.Write(".");

        // Get and check the status to see if the request has been fulfilled.
        var requestInfo = await GetSpotInstanceRequestInfo(ec2Client, requestId);
        if(requestInfo.Status.Code == "fulfilled")
        {
          Console.WriteLine($"\nSpot Instance request {requestId} " +
            $"has been fulfilled by instance {requestInfo.InstanceId}.\n");
          break;
        }

        // Wait a bit and try again, longer each time (1, 2, 4, ...)
        Thread.Sleep(wait);
        wait = wait * 2;
      }

      // Show the user how long it took to fulfill the Spot Instance request.
      TimeSpan span = DateTime.Now.Subtract(start);
      Console.WriteLine($"That took {span.TotalMilliseconds} milliseconds");

      // Perform actions here as needed.
      // For this example, simply wait for the user to hit a key.
      // That gives them a chance to look at the EC2 console to see
      // the running instance if they want to.
      Console.WriteLine("Press any key to start the cleanup...");
      Console.ReadKey(true);

      // Cancel the request.
      // Do this first to make sure that the request can't be re-fulfilled
      // once the Spot Instance has been terminated.
      Console.WriteLine("Canceling Spot Instance request...");
      await CancelSpotInstanceRequest(ec2Client, requestId);

      // Terminate the Spot Instance that's running.
      Console.WriteLine("Terminating the running Spot Instance...");
      await TerminateSpotInstance(ec2Client, requestId);

      Console.WriteLine("Done. Press any key to exit...");
      Console.ReadKey(true);
    }


    //
    // Method to create a Spot Instance request
    private static async Task<SpotInstanceRequest> CreateSpotInstanceRequest(
      IAmazonEC2 ec2Client, string amiId, string securityGroupName,
      InstanceType instanceType, string spotPrice, int instanceCount)
    {
      var launchSpecification = new LaunchSpecification{
        ImageId = amiId,
        InstanceType = instanceType
      };
      launchSpecification.SecurityGroups.Add(securityGroupName);
      var request = new RequestSpotInstancesRequest{
        SpotPrice = spotPrice,
        InstanceCount = instanceCount,
        LaunchSpecification = launchSpecification
      };

      RequestSpotInstancesResponse result =
        await ec2Client.RequestSpotInstancesAsync(request);
      return result.SpotInstanceRequests[0];
    }


    //
    // Method to get information about a Spot Instance request, including the status,
    // instance ID, etc.
    // It gets the information for a specific request (as opposed to all requests).
    private static async Task<SpotInstanceRequest> GetSpotInstanceRequestInfo(
      IAmazonEC2 ec2Client, string requestId)
    {
      var describeRequest = new DescribeSpotInstanceRequestsRequest();
      describeRequest.SpotInstanceRequestIds.Add(requestId);

      DescribeSpotInstanceRequestsResponse describeResponse =
        await ec2Client.DescribeSpotInstanceRequestsAsync(describeRequest);
      return describeResponse.SpotInstanceRequests[0];
    }


    //
    // Method to cancel a Spot Instance request
    private static async Task CancelSpotInstanceRequest(
      IAmazonEC2 ec2Client, string requestId)
    {
      var cancelRequest = new CancelSpotInstanceRequestsRequest();
      cancelRequest.SpotInstanceRequestIds.Add(requestId);

      await ec2Client.CancelSpotInstanceRequestsAsync(cancelRequest);
    }


    //
    // Method to terminate a Spot Instance
    private static async Task TerminateSpotInstance(
      IAmazonEC2 ec2Client, string requestId)
    {
      var describeRequest = new DescribeSpotInstanceRequestsRequest();
      describeRequest.SpotInstanceRequestIds.Add(requestId);

      // Retrieve the Spot Instance request to check for running instances.
      DescribeSpotInstanceRequestsResponse describeResponse =
        await ec2Client.DescribeSpotInstanceRequestsAsync(describeRequest);

      // If there are any running instances, terminate them
      if(   (describeResponse.SpotInstanceRequests[0].Status.Code
              == "request-canceled-and-instance-running")
         || (describeResponse.SpotInstanceRequests[0].State == SpotInstanceState.Active))
      {
        TerminateInstancesResponse response =
          await ec2Client.TerminateInstancesAsync(new TerminateInstancesRequest{
            InstanceIds = new List<string>(){
              describeResponse.SpotInstanceRequests[0].InstanceId } });
        foreach (InstanceStateChange item in response.TerminatingInstances)
        {
          Console.WriteLine($"\n  Terminated instance: {item.InstanceId}");
          Console.WriteLine($"  Instance state: {item.CurrentState.Name}\n");
        }
      }
    }
  }
}
```

## Pertimbangan tambahan
<a name="tutor-spot-net-additional"></a>
+ Setelah Anda menjalankan tutorial, sebaiknya masuk ke [konsol Amazon EC2](https://console.aws.amazon.com/ec2/) untuk memverifikasi bahwa [permintaan Instans Spot](https://console.aws.amazon.com/ec2/home#SpotInstances:) telah dibatalkan dan [Instans Spot telah dihentikan](https://console.aws.amazon.com/ec2/v2/home#Instances).