برنامه نویسی

زیرساخت سلف سرویس AWS با استفاده از Spacelift

مقدمه

در این مقاله از سری Self-Service AWS Infrastructure for Your Devs، ما قصد داریم VPC خود و Client VPC همتا را با استفاده از Spacelift و چندین ویژگی آن مستقر کنیم. این ساده ترین روش خواهد بود زیرا حالت به طور کامل مدیریت می شود، تمام احراز هویت با Github مدیریت می شود، احراز هویت به AWS ساده است، و ویژگی Blueprints یک رابط سلف سرویس عالی را با تلاش بسیار کمی برای توسعه دهندگان شما فراهم می کند. ما کل تنظیمات را با استفاده از چند کلیک در رابط کاربری گرافیکی اجرا می کنیم و سپس بقیه موارد را در Terraform می نویسیم. بیا شروع کنیم!

فضاپیما به عنوان کد

ابتدا، ما کد مورد نیاز برای استقرار همه دارایی ها را ایجاد می کنیم. وقتی این کار را انجام دادیم، پشته مدیریت اولیه Spacelift را ایجاد می کنیم و همه چیز را مستقر می کنیم. همه اینها به‌عنوان یک monorepo در Github ایجاد می‌شود، اما اگر نیازهای سازمانی دیگری دارید، می‌توانید آن را هر طور که مناسب می‌دانید ساختار دهید.

کد مخزن پشته مدیریت

این کد Terraform پشته زیرساخت و طرح سفارشی را ایجاد می کند که توسعه دهندگان می توانند از آن برای استقرار VPC های مشتری استفاده کنند. اگر نام مخزن خود را ذکر نکنید aws-self-service و از همه نام‌های دایرکتوری یکسان استفاده کنید، مطمئن شوید که همه مراجع را در کد تغییر می‌دهید.

# ./administrative/providers.tf

terraform {
  required_providers {
    spacelift = {
      source = "spacelift-io/spacelift"
    }
  }
}

provider "spacelift" {}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

# ./administrative/stacks.tf

# this data source will retrieve the stack_id of the admin stack 
# we will create next.
data "spacelift_stack" "admin" {
  stack_id = "admin"
}
# Check the attributes below for your VCS settings
# Learn more about stacks here: 
# https://docs.spacelift.io/concepts/stack/
resource "spacelift_stack" "shared_infra" {

  autodeploy        = false
  branch            = "main"
  project_root      = "shared_infra"
  description       = "Core Infra Stack"
  name              = "shared-infra"
  space_id          = "root"
  repository        = "aws-self-service"
  terraform_version = "1.2.9"
  labels            = ["managed"]
}

# You will create the `dev-context` further in the post. 
# More about contexts here: 
# https://docs.spacelift.io/concepts/configuration/context
resource "spacelift_context_attachment" "attachment" {
  context_id = "dev-context"
  stack_id   = "spacelift_stack.shared_infra.id"
  priority   = 0
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

# ./administrative/blueprints.tf
# More about Blueprints here: 
# https://docs.spacelift.io/concepts/blueprint/

locals {
  bprint = file("${path.root}/blueprints/client_vpc.tftpl")
}

resource "spacelift_blueprint" "client_vpc" {
    name = "Client VPC"
    description = "Stack to create a new child VPC"
    space = "root"
    template = local.bprint
    state = "PUBLISHED"
    labels = ["client"]
}
# for troubleshooting purpose
output "bprint" {
  value = local.bprint
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

# ./administrative/blueprints/client_vpc.tftpl
# inputs are used to create input fields
inputs:
  - id: client_name
    name: Client name  
  - id: vpc_cidr
    name: CIDR of the VPC
    type: select
# You could use a data source here to iterate over a list of 
# available subnets that don't overlap with the main.
    default: 10.1.0.0/16
    options:
      - 10.2.0.0/16
      - 10.3.0.0/16
      - 10.4.0.0/16
  - id: region
    name: Choose AWS region
    type: select
# ensure you set these appropriately
    options:
      - us-east-1
      - us-east-2
  - id: trigger_run
    name: Trigger a run upon stack creation
    type: boolean
    default: false
stack:
  name: ${{ inputs.client_name }}-stack
# More info about Spaces here: 
# https://docs.spacelift.io/concepts/spaces/
  space: root
  description: >
    Stack created from a blueprint by ${{ context.user.name }} logged in as ${{ context.user.login }}
  labels:
    - "blueprints/${{ context.blueprint.name }}"
# Uncomment the vcs section below and add your information.
  vcs:
   branch: main
   repository: aws-self-service
   project_root: client_vpc
   provider: GITHUB
  vendor:
    terraform:
      manage_state: true
# Use your preferred version of Terraform here
      version: "1.4.0"
  attachments:
    contexts:
      - id: dev-context
        priority: 1
  environment:
    variables:
      - name: TF_VAR_client_name
        value: ${{ inputs.client_name }}
      - name: TF_VAR_vpc_cidr
        value: ${{ inputs.vpc_cidr }}
      - name: TF_VAR_region
        value: ${{ inputs.region }}
options:
  trigger_run: ${{ inputs.trigger_run }}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که همه کد را ایجاد کردید، آن را به مخزن Git خود که حاوی کد قسمت اول این سری است، متعهد کنید. اگر نمی‌خواهید تنظیمات VCS را در کد تغییر دهید، مطمئن شوید که مخزن خود را نامگذاری کرده‌اید aws-self-service و دایرکتوری های شما همان چیزی است که در قطعه کد بالا می بینید. این یک مقاله نسبتاً متوسط ​​است، بنابراین من در مورد چگونگی انجام این کار به عمق نمی پردازم. اگر سوالی دارید، در تماس باشید.

ایجاد پشته مدیریت Spacelift

راه اندازی Spacelift آسان است. اگر هنوز حسابی ندارید، می‌توانید مستندات «شروع به کار» را در اینجا ببینید تا سریعاً به سرعت برسید: https://docs.spacelift.io/getting-started.

پس از تنظیم حساب خود، مراحل زیر را دنبال کنید.

1. در کنسول، روی Add stack کلیک کنید

اضافه کردن یک پشته در کنسول Spacelift

2. تنظیمات مخزن خود را پیکربندی کنید

پیکربندی تنظیمات مخزن در کنسول Spacelift

3. هر تنظیماتی را که نیاز دارید سفارشی کنید و روی ادامه کلیک کنید

سفارشی کردن تنظیمات پشته در کنسول Spacelift

4. Administrative را تغییر دهید و ذخیره کنید

فعال کردن گزینه های اداری

زمینه اعتبارنامه AWS را ایجاد کنید

راه های متعددی برای ارائه اعتبارنامه AWS به پشته های ما وجود دارد. در Spacelift، می‌توانید یک «ادغام ابری» ایجاد کنید که نقش موقتی را بر عهده می‌گیرد و از آن برای ایجاد منابع استفاده می‌کند. این مسیر ترجیحی است، اما برای سادگی و تمرکز، می‌خواهم مدارک را به صورت دستی پاس کنم. با این روش، اطمینان حاصل کنید که کلیدهای خود را به طور مکرر بچرخانید و در صورت عدم استفاده آنها را غیرفعال کنید. اسپیس لیفت محصولی بسیار امن است، اما بهتر است همیشه محتاط باشید.

کاری که ما می خواهیم انجام دهیم این است که از یک “Spacelift Context” برای ذخیره کلیدها به عنوان متغیرهای محیطی استفاده کنیم که توسط هر پشته ای که Context به آن متصل است قابل دسترسی باشد. برای ایجاد Context جدید، به پنل Contexts در سمت چپ بروید، اطلاعات لازم را پر کنید، متغیرها را ایجاد کنید، مقادیر آنها را اضافه کنید و آنها را به عنوان “مخفی” تعیین کنید، همانطور که در تصویر زیر نشان داده شده است. مگر اینکه بخواهید کد بالا را تغییر دهید، مطمئن شوید که از “dev-context” به عنوان نام استفاده می کنید:

ایجاد زمینه Spacelift

بیایید مستقر شویم!

هنگامی که کد شما در مخزن شما قرار می گیرد، پشته Admin به آن کد متصل می شود، و Context ایجاد می شود، در نهایت زمان آن فرا رسیده است که گسترش یابد! این قرار است مستقر شود:

  1. این shared-infra پشته ای که VPC مشترک را مستقر می کند.
  2. طرح Spacelift که به شما امکان می دهد اطلاعات مورد نیاز برای ایجاد پشته ای را وارد کنید که VPC دیگری را مستقر می کند که به طور خودکار به VPC سرویس های اشتراکی همتا می شود.

هنگامی که پیکربندی به پایان رسید، ادامه دهید و پشته Admin را فعال کنید و بیایید آن را بررسی کنیم! باید پشته Admin و پشته اشتراک گذاری شده جدید خود را ببینید:

راه اندازی پشته مدیریت در Spacelift

و طرح جدید شما:

طرحی در کنسول Spacelift

هنگامی که آن منابع مستقر شدند، زمان استقرار VPC منابع مشترک است. برای انجام این کار، پشته shared_infra را فعال کنید و تأیید کنید که منابع پس از آن ایجاد شده اند:

VPC را مستقر کنید

پس از تکمیل، استقرار سلف سرویس شما کامل می شود! به تب Blueprints بروید، اطلاعات لازم را پر کنید و پشته ایجاد کنید:

یک پشته از یک Blueprint در Spacelift ایجاد کنید

هنگامی که پشته ایجاد شد، می توانید آن را فعال کنید و VPC خود سرویس خود را خواهید داشت!

VPC مستقر جدید خود را ببینید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا