AWS CloudFormation Contoh komponen - AWS Proton

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

AWS CloudFormation Contoh komponen

Berikut adalah contoh lengkap dari komponen yang didefinisikan AWS Proton secara langsung dan bagaimana Anda dapat menggunakannya dalam suatu AWS Proton layanan. Komponen ini menyediakan bucket Amazon Simple Storage Service (Amazon S3) dan kebijakan akses terkait. Instance layanan dapat merujuk ke bucket ini dan menggunakannya. Nama bucket didasarkan pada nama lingkungan, layanan, instance layanan, dan komponen, yang berarti bahwa bucket digabungkan dengan instance spesifik dari template komponen yang memperluas instance layanan tertentu. Pengembang dapat membuat beberapa komponen berdasarkan templat komponen ini, untuk menyediakan bucket Amazon S3 untuk berbagai instans layanan dan kebutuhan fungsional.

Contoh ini mencakup penulisan berbagai AWS CloudFormation infrastruktur yang diperlukan sebagai file kode (IAc) dan membuat peran yang diperlukan AWS Identity and Access Management (IAM). Contoh mengelompokkan langkah-langkah dengan peran orang yang memiliki.

Langkah-langkah administrator

Untuk memungkinkan pengembang menggunakan komponen dengan layanan
  1. Buat peran AWS Identity and Access Management (IAM) yang mencakup sumber daya yang secara langsung mendefinisikan komponen yang berjalan di lingkungan Anda dapat menyediakan. AWS Proton mengasumsikan peran ini nanti untuk menyediakan komponen yang didefinisikan secara langsung di lingkungan.

    Untuk contoh ini, gunakan kebijakan berikut:

    contoh peran komponen yang didefinisikan secara langsung
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:CancelUpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:DescribeStacks", "cloudformation:ContinueUpdateRollback", "cloudformation:DetectStackResourceDrift", "cloudformation:DescribeStackResourceDrifts", "cloudformation:DescribeStackEvents", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack", "cloudformation:DescribeChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:ListChangeSets", "cloudformation:ListStackResources" ], "Resource": "arn:aws:cloudformation:*:123456789012:stack/AWSProton-*" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucket", "iam:CreatePolicy", "iam:DeletePolicy", "iam:GetPolicy", "iam:ListPolicyVersions", "iam:DeletePolicyVersion" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "cloudformation.amazonaws.com" } } } ] }
  2. Berikan peran yang Anda buat pada langkah sebelumnya saat Anda membuat atau memperbarui lingkungan. Di AWS Proton konsol, tentukan peran Komponen pada halaman Konfigurasi lingkungan. Jika Anda menggunakan AWS Proton API atau AWS CLI, tentukan componentRoleArn tindakan CreateEnvironmentatau UpdateEnvironmentAPI.

  3. Buat template layanan yang mengacu pada komponen yang didefinisikan secara langsung yang dilampirkan ke instance layanan.

    Contoh menunjukkan cara menulis template layanan yang kuat yang tidak rusak jika komponen tidak dilampirkan ke instance layanan.

    contoh layanan file CloudFormation iAc menggunakan komponen
    # service/instance_infrastructure/cloudformation.yaml Resources: TaskDefinition: Type: AWS::ECS::TaskDefinition Properties: TaskRoleArn: !Ref TaskRole ContainerDefinitions: - Name: '{{service_instance.name}}' # ... {% if service_instance.components.default.outputs | length > 0 %} Environment: {{ service_instance.components.default.outputs | proton_cfn_ecs_task_definition_formatted_env_vars }} {% endif %} # ... TaskRole: Type: AWS::IAM::Role Properties: # ... ManagedPolicyArns: - !Ref BaseTaskRoleManagedPolicy {{ service_instance.components.default.outputs | proton_cfn_iam_policy_arns }} # Basic permissions for the task BaseTaskRoleManagedPolicy: Type: AWS::IAM::ManagedPolicy Properties: # ...
  4. Buat versi minor template layanan baru yang mendeklarasikan komponen yang didefinisikan secara langsung sebagai didukung.

    • Bundel templat di Amazon S3 — Di AWS Proton konsol, saat Anda membuat versi templat layanan, untuk sumber komponen yang didukung, pilih Ditentukan secara langsung. Jika Anda menggunakan AWS Proton API atau AWS CLI, tentukan DIRECTLY_DEFINED dalam supportedComponentSources parameter tindakan CreateServiceTemplateVersionatau UpdateServiceTemplateVersionAPI.

    • Sinkronisasi templat — Komit perubahan ke repositori bundel templat layanan Anda, tempat Anda menentukan DIRECTLY_DEFINED sebagai item supported_component_sources: dalam .template-registration.yaml file di direktori versi utama. Untuk informasi selengkapnya tentang file ini, lihatMenyinkronkan templat layanan.

  5. Publikasikan template layanan baru versi minor. Untuk informasi selengkapnya, lihat Daftarkan dan terbitkan templat.

  6. Pastikan untuk mengizinkan peran IAM pengembang yang menggunakan template layanan ini. proton:CreateComponent

Langkah-langkah pengembang

Untuk menggunakan komponen yang didefinisikan secara langsung dengan instance layanan
  1. Buat layanan yang menggunakan versi template layanan yang dibuat administrator dengan dukungan komponen. Atau, perbarui salah satu instance layanan Anda yang ada untuk menggunakan versi template terbaru.

  2. Tulis file template komponen iAc yang menyediakan bucket Amazon S3 dan kebijakan akses terkait dan mengekspos sumber daya ini sebagai output.

    contoh file komponen CloudFormation iAc
    # cloudformation.yaml # A component that defines an S3 bucket and a policy for accessing the bucket. Resources: S3Bucket: Type: 'AWS::S3::Bucket' Properties: BucketName: '{{environment.name}}-{{service.name}}-{{service_instance.name}}-{{component.name}}' S3BucketAccessPolicy: Type: AWS::IAM::ManagedPolicy Properties: PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - 's3:Get*' - 's3:List*' - 's3:PutObject' Resource: !GetAtt S3Bucket.Arn Outputs: BucketName: Description: "Bucket to access" Value: !GetAtt S3Bucket.Arn BucketAccessPolicyArn: Value: !Ref S3BucketAccessPolicy
  3. Jika Anda menggunakan AWS Proton API atau AWS CLI, tulis file manifes untuk komponen tersebut.

    contoh manifes komponen yang didefinisikan secara langsung
    infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
  4. Buat komponen yang didefinisikan secara langsung. AWS Proton mengasumsikan peran komponen yang didefinisikan administrator untuk menyediakan komponen.

    Di AWS Proton konsol, pada halaman Components, pilih Create component. Untuk pengaturan Komponen, masukkan nama Komponen dan deskripsi Komponen opsional. Untuk lampiran Komponen, pilih Lampirkan komponen ke instance layanan. Pilih contoh lingkungan, layanan, dan layanan Anda. Untuk sumber Komponen, pilih AWS CloudFormation, lalu pilih file komponen IAc.

    catatan

    Anda tidak perlu menyediakan manifes—konsol membuatnya untuk Anda.

    Jika Anda menggunakan AWS Proton API atau AWS CLI, gunakan tindakan CreateComponentAPI. Tetapkan komponen name dan opsionaldescription. SetenvironmentName,serviceName, danserviceInstanceName. Atur templateSource dan manifest ke jalur file yang Anda buat.

    catatan

    Menentukan nama lingkungan adalah opsional saat Anda menentukan nama instance layanan dan layanan. Kombinasi keduanya unik di AWS akun Anda, dan AWS Proton dapat menentukan lingkungan dari instance layanan.

  5. Perbarui instance layanan Anda untuk menerapkannya kembali. AWS Proton menggunakan output dari komponen Anda dalam template instance layanan yang dirender, untuk memungkinkan aplikasi Anda menggunakan bucket Amazon S3 yang disediakan komponen tersebut.