

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

# Menggunakan EC2 Image Builder untuk membuat AMI Amazon ECS-optimized yang disesuaikan
<a name="image-builder-tutorial"></a>

AWS merekomendasikan agar Anda menggunakan ECS-optimized AMI Amazon karena sudah dikonfigurasi sebelumnya dengan persyaratan dan rekomendasi untuk menjalankan beban kerja penampung Anda. Mungkin ada saat-saat ketika Anda perlu menyesuaikan AMI Anda untuk menambahkan perangkat lunak tambahan. Anda dapat menggunakan EC2 Image Builder untuk pembuatan, pengelolaan, dan penyebaran gambar server Anda. Anda mempertahankan kepemilikan gambar yang disesuaikan yang dibuat di akun Anda. Anda dapat menggunakan pipeline EC2 Image Builder untuk mengotomatiskan pembaruan dan penambalan sistem untuk gambar Anda, atau menggunakan perintah yang berdiri sendiri untuk membuat gambar dengan sumber daya konfigurasi yang ditentukan.

Anda membuat resep untuk gambar Anda. Resepnya mencakup gambar induk, dan komponen tambahan apa pun. Anda juga membuat pipeline yang mendistribusikan AMI khusus Anda.

Anda membuat resep untuk gambar Anda. Resep image Builder Image adalah dokumen yang mendefinisikan image dasar dan komponen yang diterapkan pada image dasar untuk menghasilkan konfigurasi yang diinginkan untuk gambar AMI keluaran. Anda juga membuat pipeline yang mendistribusikan AMI khusus Anda. Untuk informasi selengkapnya, lihat [Cara kerja EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/how-image-builder-works.html) di Panduan Pengguna *EC2 Image* Builder.

Kami menyarankan Anda menggunakan salah satu ECS-optimized AMI Amazon berikut sebagai “Gambar Induk” Anda di EC2 Image Builder:
+ Linux
  + Amazon ECS-optimized AL2023 x86
  + Amazon ECS-optimized Amazon Linux 2023 (arm64) AMI
  + Amazon ECS-optimized Amazon Linux 2 kernel 5 AMI
  + Amazon ECS-optimized Amazon Linux 2 x86 AMI
+ Windows
  + Amazon ECS-optimized Windows 2022 Full x86
  + Amazon ECS-optimized Windows 2022 Inti x86
  + Amazon ECS-optimized Windows 2019 x86 penuh
  + Amazon ECS-optimized Windows 2019 Inti x86
  + Amazon ECS-optimized Windows 2016 Penuh x86

Kami juga menyarankan Anda memilih “Gunakan versi OS terbaru yang tersedia”. Pipeline akan menggunakan versi semantik untuk gambar induk, yang membantu mendeteksi pembaruan ketergantungan dalam pekerjaan yang dijadwalkan secara otomatis. Untuk informasi selengkapnya, lihat [Pembuatan versi semantik](https://docs.aws.amazon.com/imagebuilder/latest/userguide/ibhow-semantic-versioning.html) di Panduan Pengguna *EC2 Image Builder*.

AWS memperbarui gambar Amazon ECS-optimized AMI secara teratur dengan tambalan keamanan dan versi agen kontainer baru. Saat Anda menggunakan ID AMI sebagai gambar induk Anda dalam resep gambar Anda, Anda perlu secara teratur memeriksa pembaruan pada gambar induk. Jika ada pembaruan, Anda harus membuat versi baru resep Anda dengan AMI yang diperbarui. Ini memastikan bahwa gambar kustom Anda menggabungkan versi terbaru dari gambar induk. Untuk informasi tentang cara membuat alur kerja untuk memperbarui instans EC2 secara otomatis di klaster Amazon ECS dengan AMI yang baru dibuat, lihat [Cara membuat pipeline pengerasan AMI dan mengotomatiskan pembaruan](https://aws.amazon.com/blogs/security/how-to-create-an-ami-hardening-pipeline-and-automate-updates-to-your-ecs-instance-fleet/) ke armada instans ECS Anda.

Anda juga dapat menentukan Amazon Resource Name (ARN) dari gambar induk yang diterbitkan melalui pipeline EC2 Image Builder terkelola. Amazon secara rutin menerbitkan gambar Amazon ECS-optimized AMI melalui saluran pipa terkelola. Gambar-gambar ini dapat diakses publik. Anda harus memiliki izin yang benar untuk mengakses gambar. Saat Anda menggunakan ARN gambar alih-alih AMI dalam resep Image Builder, pipeline Anda secara otomatis menggunakan versi terbaru dari gambar induk setiap kali dijalankan. Pendekatan ini menghilangkan kebutuhan untuk membuat versi resep baru secara manual untuk setiap pembaruan. 

## Bersihkan Amazon ECS-optimized AMI
<a name="cleanup-ecs-optimized-ami"></a>

Saat menggunakan Amazon ECS-optimized AMI sebagai gambar induk, Anda harus membersihkan gambar untuk mencegah masalah sementara. Amazon ECS-optimized AMI telah dikonfigurasi sebelumnya untuk agen Amazon ECS untuk memulai secara otomatis dan mendaftar sebagai instans penampung dengan Amazon ECS. Menggunakannya sebagai gambar dasar tanpa pembersihan yang tepat dapat menyebabkan masalah pada AMI kustom Anda.

Untuk membersihkan gambar untuk penggunaan di masa mendatang, buat komponen yang menjalankan perintah berikut untuk menghentikan paket ecs-init dan proses Docker:

```
sudo systemctl stop ecs
sudo systemctl stop docker
```

Hapus semua file log dari instance saat ini untuk mencegah melestarikannya saat menyimpan gambar. Gunakan contoh skrip dalam [praktik terbaik Keamanan untuk EC2 Image](https://docs.aws.amazon.com/imagebuilder/latest/userguide/security-best-practices.html) Builder untuk membersihkan berbagai file dari instance.

Untuk membersihkan data spesifik Amazon ECS, jalankan perintah berikut:

```
sudo rm -rf /var/log/ecs/*
sudo rm /var/lib/ecs/data/agent.db
```

Untuk informasi selengkapnya tentang membuat ECS-optimized AMI Amazon kustom, lihat [Bagaimana cara membuat AMI kustom dari Amazon ECS-optimized AMI?](https://forums.aws.amazon.com/knowledge-center/ecs-create-custom-amis/) di pusat AWS pengetahuan.

## Menggunakan gambar ARN dengan infrastruktur sebagai kode (IAc)
<a name="infrastructure-as-code-arn"></a>

Anda dapat mengonfigurasi resep menggunakan konsol EC2 Image Builder, atau infrastruktur sebagai kode (misalnya CloudFormation,), atau AWS SDK. Saat Anda menentukan gambar induk dalam resep Anda, Anda dapat menentukan ID AMI EC2, ARN image Builder Image Builder, ID produk AWS Marketplace , atau gambar kontainer. AWS menerbitkan ID AMI dan ARN image Builder Image Builder dari Amazon ECS-Optimized AMI secara publik. Berikut ini adalah format ARN untuk gambar:

```
arn:${Partition}:imagebuilder:${Region}:${Account}:image/${ImageName}/${ImageVersion}
```

Ini `ImageVersion` memiliki format berikut. Ganti{{major}}, {{minor}} dan {{patch}} dengan nilai terbaru.

```
<{{major}}>.<{{minor}}>.<{{patch}}>
```

Anda dapat mengganti`major`, `minor` dan `patch` ke nilai tertentu atau Anda dapat menggunakan ARN tanpa versi dari sebuah gambar, sehingga pipeline Anda tetap up-to-date dengan versi terbaru dari gambar induk. ARN tanpa versi menggunakan format wildcard 'x.x.x' untuk mewakili versi gambar. Pendekatan ini memungkinkan layanan Image Builder untuk secara otomatis menyelesaikan ke versi terbaru dari gambar. Menggunakan ARN tanpa versi memastikan bahwa referensi Anda selalu mengarah ke gambar terbaru yang tersedia, merampingkan proses mempertahankan gambar terbaru dalam penerapan Anda. Saat Anda membuat resep dengan konsol, EC2 Image Builder secara otomatis mengidentifikasi ARN untuk gambar induk Anda. Saat Anda menggunakan IAc untuk membuat resep, Anda harus mengidentifikasi ARN dan memilih versi gambar yang diinginkan atau menggunakan arn tanpa versi untuk menunjukkan gambar terbaru yang tersedia. Kami menyarankan Anda membuat skrip otomatis untuk memfilter dan hanya menampilkan gambar yang sesuai dengan kriteria Anda. Skrip Python berikut menunjukkan cara mengambil daftar AMI Amazon. ECS-optimized 

Skrip menerima dua argumen opsional: `owner` dan`platform`, dengan nilai default “Amazon”, dan “Windows” masing-masing. Nilai yang valid untuk argumen pemilik adalah:`Self`,`Shared`,`Amazon`, dan`ThirdParty`. Nilai yang valid untuk argumen platform adalah `Windows` dan`Linux`. Misalnya, jika Anda menjalankan skrip dengan `owner` argumen yang disetel ke `Amazon` dan `platform` disetel ke`Linux`, skrip akan menghasilkan daftar gambar yang diterbitkan oleh Amazon termasuk ECS-Optimized gambar Amazon.

```
import boto3
import argparse

def list_images(owner, platform):
    # Create a Boto3 session
    session = boto3.Session()
    
    # Create an EC2 Image Builder client
    client = session.client('imagebuilder')

    # Define the initial request parameters
    request_params = {
        'owner': owner,
        'filters': [
            {
                'name': 'platform',
                'values': [platform]
            }
        ]
    }

    # Initialize the results list
    all_images = []

    # Get the initial response with the first page of results
    response = client.list_images(**request_params)

    # Extract images from the response
    all_images.extend(response['imageVersionList'])

    # While 'nextToken' is present, continue paginating
    while 'nextToken' in response and response['nextToken']:
        # Update the token for the next request
        request_params['nextToken'] = response['nextToken']

        # Get the next page of results
        response = client.list_images(**request_params)

        # Extract images from the response
        all_images.extend(response['imageVersionList'])

    return all_images

def main():
    # Initialize the parser
    parser = argparse.ArgumentParser(description="List AWS images based on owner and platform")
    
    # Add the parameters/arguments
    parser.add_argument("--owner", default="Amazon", help="The owner of the images. Default is 'Amazon'.")
    parser.add_argument("--platform", default="Windows", help="The platform type of the images. Default is 'Windows'.")

    # Parse the arguments
    args = parser.parse_args()

    # Retrieve all images based on the provided owner and platform
    images = list_images(args.owner, args.platform)

    # Print the details of the images
    for image in images:
        print(f"Name: {image['name']}, Version: {image['version']}, ARN: {image['arn']}")

if __name__ == "__main__":
    main()
```

## Menggunakan gambar ARN dengan CloudFormation
<a name="arn-with-cloudformation"></a>

Resep gambar Image Builder adalah cetak biru yang menentukan gambar induk dan komponen yang diperlukan untuk mencapai konfigurasi gambar keluaran yang diinginkan. Anda menggunakan `AWS::ImageBuilder::ImageRecipe` sumber daya. Atur `ParentImage` nilai ke gambar ARN. Gunakan ARN tanpa versi dari gambar yang Anda inginkan untuk memastikan pipeline Anda selalu menggunakan versi gambar terbaru. Misalnya, `arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x`. Definisi `AWS::ImageBuilder::ImageRecipe` sumber daya berikut menggunakan ARN image terkelola Amazon:

```
ECSRecipe:
    Type: AWS::ImageBuilder::ImageRecipe
    Properties:
      Name: MyRecipe
      Version: '1.0.0'
      Components:
        - ComponentArn: [<The component arns of the image recipe>]
      ParentImage: "arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x"
```

Untuk informasi selengkapnya tentang [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-imagerecipe.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-imagerecipe.html)sumber daya, lihat di *Panduan AWS CloudFormation Pengguna*.

Anda dapat mengotomatiskan pembuatan gambar baru di pipeline Anda dengan menyetel `Schedule` properti `AWS::ImageBuilder::ImagePipeline` sumber daya. Jadwal mencakup kondisi awal dan ekspresi cron. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-imagepipeline.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-imagepipeline.html) di *AWS CloudFormation Panduan Pengguna*.

 `AWS::ImageBuilder::ImagePipeline`Contoh berikut ini memiliki pipeline yang menjalankan build pada pukul 10:00 AM Coordinated Universal Time (UTC) setiap hari. Tetapkan `Schedule` nilai-nilai berikut:
+ Atur `PipelineExecutionStartCondition` ke `EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE`. Build dimulai hanya jika sumber daya dependen seperti image induk atau komponen, yang menggunakan wildcard 'x' dalam versi semantiknya, diperbarui. Ini memastikan build menggabungkan pembaruan terbaru dari sumber daya tersebut.
+ Setel ScheduleExpression ke ekspresi `(0 10 * * ? *)` cron.

```
ECSPipeline:
    Type: AWS::ImageBuilder::ImagePipeline
    Properties:
      Name: my-pipeline
      ImageRecipeArn: <arn of the recipe you created in previous step>
      InfrastructureConfigurationArn: <ARN of the infrastructure configuration associated with this image pipeline>
      Schedule:
        PipelineExecutionStartCondition: EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE
        ScheduleExpression: 'cron(0 10 * * ? *)'
```

## Menggunakan gambar ARN dengan Terraform
<a name="arn-with-terraform"></a>

Pendekatan untuk menentukan gambar dan jadwal induk pipeline Anda di Terraform sejalan dengan yang ada di. AWS CloudFormation Anda menggunakan `aws_imagebuilder_image_recipe` sumber daya. Atur `parent_image` nilai ke gambar ARN. Gunakan ARN tanpa versi dari gambar yang Anda inginkan untuk memastikan pipeline Anda selalu menggunakan versi gambar terbaru. Untuk informasi lebih lanjut, lihat [https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/imagebuilder_image_recipe#argument-reference](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/imagebuilder_image_recipe#argument-reference)di dokumentasi Terraform. 

Di blok konfigurasi jadwal`aws_imagebuilder_image_pipeline resource`, atur nilai `schedule_expression` argumen ke ekspresi cron pilihan Anda untuk menentukan seberapa sering pipeline berjalan, dan atur `pipeline_execution_start_condition` ke`EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE`. Untuk informasi lebih lanjut, lihat [https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/imagebuilder_image_pipeline#argument-reference](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/imagebuilder_image_pipeline#argument-reference)di dokumentasi Terraform. 