From 8796cf74bb7e248856fb29beaa7a66ac18b45d34 Mon Sep 17 00:00:00 2001 From: Andrii Holovin Date: Fri, 15 Nov 2024 23:44:19 +0200 Subject: [PATCH 1/2] [docs] Add Ukrainian localization for documentation --- mkdocs.yml | 77 +++ site/content/community/get-involved.uk.md | 12 + site/content/community/guides.uk.md | 80 +++ site/content/docs/concepts/applications.uk.md | 114 ++++ site/content/docs/concepts/environments.uk.md | 114 ++++ site/content/docs/concepts/jobs.uk.md | 77 +++ site/content/docs/concepts/overview.uk.md | 33 + site/content/docs/concepts/pipelines.uk.md | 242 +++++++ site/content/docs/concepts/services.uk.md | 284 +++++++++ site/content/docs/credentials.uk.md | 69 ++ .../docs/developing/addons/environment.uk.md | 259 ++++++++ .../docs/developing/addons/package.uk.md | 144 +++++ .../docs/developing/addons/workload.uk.md | 230 +++++++ .../docs/developing/content-delivery.uk.md | 125 ++++ .../custom-environment-resources.uk.md | 61 ++ site/content/docs/developing/domain.uk.md | 133 ++++ .../developing/environment-variables.uk.md | 105 ++++ .../docs/developing/internal-albs.uk.md | 99 +++ .../docs/developing/manifest-env-var.uk.md | 78 +++ .../docs/developing/observability.uk.md | 129 ++++ .../docs/developing/overrides/cdk.uk.md | 201 ++++++ .../overrides/taskdef-overrides.uk.md | 85 +++ .../docs/developing/overrides/yamlpatch.uk.md | 109 ++++ .../docs/developing/publish-subscribe.uk.md | 109 ++++ site/content/docs/developing/secrets.uk.md | 70 +++ site/content/docs/developing/sidecars.uk.md | 247 ++++++++ site/content/docs/developing/storage.uk.md | 387 ++++++++++++ .../developing/svc-to-svc-communication.uk.md | 92 +++ .../getting-started/first-app-tutorial.uk.md | 82 +++ .../docs/getting-started/install.uk.md | 54 ++ .../content/docs/getting-started/verify.uk.md | 236 +++++++ site/content/docs/include/command.uk.md | 11 + site/content/docs/include/deployment.uk.md | 23 + site/content/docs/include/entrypoint.uk.md | 11 + site/content/docs/include/environments.uk.md | 4 + site/content/docs/include/envvars.uk.md | 12 + site/content/docs/include/exec.uk.md | 4 + .../http-additionalrules-healthcheck.uk.md | 45 ++ .../docs/include/http-additionalrules.uk.md | 63 ++ .../docs/include/http-healthcheck.uk.md | 47 ++ .../docs/include/image-config-with-port.uk.md | 6 + site/content/docs/include/image-config.uk.md | 61 ++ .../docs/include/image-healthcheck.uk.md | 17 + site/content/docs/include/image.uk.md | 4 + site/content/docs/include/logging.uk.md | 25 + site/content/docs/include/network-vpc.uk.md | 68 ++ site/content/docs/include/network.uk.md | 14 + .../include/nlb-additionallisteners.uk.md | 46 ++ site/content/docs/include/nlb.uk.md | 92 +++ site/content/docs/include/observability.uk.md | 9 + .../docs/include/overrides-intro.uk.md | 10 + site/content/docs/include/platform.uk.md | 30 + site/content/docs/include/publish.uk.md | 53 ++ site/content/docs/include/secrets.uk.md | 7 + .../content/docs/include/sidecar-config.uk.md | 78 +++ site/content/docs/include/storage.uk.md | 88 +++ site/content/docs/include/task-size.uk.md | 9 + .../docs/include/taskdef-overrides.uk.md | 10 + .../docs/manifest/backend-service.uk.md | 398 ++++++++++++ site/content/docs/manifest/environment.uk.md | 378 +++++++++++ .../docs/manifest/lb-web-service.uk.md | 507 +++++++++++++++ site/content/docs/manifest/overview.uk.md | 11 + site/content/docs/manifest/pipeline.uk.md | 300 +++++++++ .../docs/manifest/rd-web-service.uk.md | 252 ++++++++ .../content/docs/manifest/scheduled-job.uk.md | 246 ++++++++ site/content/docs/manifest/static-site.uk.md | 88 +++ .../docs/manifest/worker-service.uk.md | 409 ++++++++++++ site/content/docs/overview.uk.md | 20 + site/content/index.uk.md | 4 + site/overrides/layouts/home.uk.html | 590 ++++++++++++++++++ 70 files changed, 8187 insertions(+) create mode 100644 site/content/community/get-involved.uk.md create mode 100644 site/content/community/guides.uk.md create mode 100644 site/content/docs/concepts/applications.uk.md create mode 100644 site/content/docs/concepts/environments.uk.md create mode 100644 site/content/docs/concepts/jobs.uk.md create mode 100644 site/content/docs/concepts/overview.uk.md create mode 100644 site/content/docs/concepts/pipelines.uk.md create mode 100644 site/content/docs/concepts/services.uk.md create mode 100644 site/content/docs/credentials.uk.md create mode 100644 site/content/docs/developing/addons/environment.uk.md create mode 100644 site/content/docs/developing/addons/package.uk.md create mode 100644 site/content/docs/developing/addons/workload.uk.md create mode 100644 site/content/docs/developing/content-delivery.uk.md create mode 100644 site/content/docs/developing/custom-environment-resources.uk.md create mode 100644 site/content/docs/developing/domain.uk.md create mode 100644 site/content/docs/developing/environment-variables.uk.md create mode 100644 site/content/docs/developing/internal-albs.uk.md create mode 100644 site/content/docs/developing/manifest-env-var.uk.md create mode 100644 site/content/docs/developing/observability.uk.md create mode 100644 site/content/docs/developing/overrides/cdk.uk.md create mode 100644 site/content/docs/developing/overrides/taskdef-overrides.uk.md create mode 100644 site/content/docs/developing/overrides/yamlpatch.uk.md create mode 100644 site/content/docs/developing/publish-subscribe.uk.md create mode 100644 site/content/docs/developing/secrets.uk.md create mode 100644 site/content/docs/developing/sidecars.uk.md create mode 100644 site/content/docs/developing/storage.uk.md create mode 100644 site/content/docs/developing/svc-to-svc-communication.uk.md create mode 100644 site/content/docs/getting-started/first-app-tutorial.uk.md create mode 100644 site/content/docs/getting-started/install.uk.md create mode 100644 site/content/docs/getting-started/verify.uk.md create mode 100644 site/content/docs/include/command.uk.md create mode 100644 site/content/docs/include/deployment.uk.md create mode 100644 site/content/docs/include/entrypoint.uk.md create mode 100644 site/content/docs/include/environments.uk.md create mode 100644 site/content/docs/include/envvars.uk.md create mode 100644 site/content/docs/include/exec.uk.md create mode 100644 site/content/docs/include/http-additionalrules-healthcheck.uk.md create mode 100644 site/content/docs/include/http-additionalrules.uk.md create mode 100644 site/content/docs/include/http-healthcheck.uk.md create mode 100644 site/content/docs/include/image-config-with-port.uk.md create mode 100644 site/content/docs/include/image-config.uk.md create mode 100644 site/content/docs/include/image-healthcheck.uk.md create mode 100644 site/content/docs/include/image.uk.md create mode 100644 site/content/docs/include/logging.uk.md create mode 100644 site/content/docs/include/network-vpc.uk.md create mode 100644 site/content/docs/include/network.uk.md create mode 100644 site/content/docs/include/nlb-additionallisteners.uk.md create mode 100644 site/content/docs/include/nlb.uk.md create mode 100644 site/content/docs/include/observability.uk.md create mode 100644 site/content/docs/include/overrides-intro.uk.md create mode 100644 site/content/docs/include/platform.uk.md create mode 100644 site/content/docs/include/publish.uk.md create mode 100644 site/content/docs/include/secrets.uk.md create mode 100644 site/content/docs/include/sidecar-config.uk.md create mode 100644 site/content/docs/include/storage.uk.md create mode 100644 site/content/docs/include/task-size.uk.md create mode 100644 site/content/docs/include/taskdef-overrides.uk.md create mode 100644 site/content/docs/manifest/backend-service.uk.md create mode 100644 site/content/docs/manifest/environment.uk.md create mode 100644 site/content/docs/manifest/lb-web-service.uk.md create mode 100644 site/content/docs/manifest/overview.uk.md create mode 100644 site/content/docs/manifest/pipeline.uk.md create mode 100644 site/content/docs/manifest/rd-web-service.uk.md create mode 100644 site/content/docs/manifest/scheduled-job.uk.md create mode 100644 site/content/docs/manifest/static-site.uk.md create mode 100644 site/content/docs/manifest/worker-service.uk.md create mode 100644 site/content/docs/overview.uk.md create mode 100644 site/content/index.uk.md create mode 100644 site/overrides/layouts/home.uk.html diff --git a/mkdocs.yml b/mkdocs.yml index dacc04b52c6..312870d7145 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -20,6 +20,9 @@ extra: - name: 日本語 link: ./ja/ lang: ja + - name: Українська + link: ./uk/ + lang: uk nav: - Home: index.en.md @@ -216,6 +219,11 @@ theme: markdown_extensions: - admonition - meta + - toc: + permalink: true + slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower - pymdownx.details - pymdownx.superfences - pymdownx.tabbed: @@ -238,10 +246,79 @@ plugins: 'docs/developing/service-discovery.md': 'docs/developing/svc-to-svc-communication.en.md' 'docs/developing/taskdef-overrides.md': 'docs/developing/overrides/taskdef-overrides.md' - i18n: + docs_structure: suffix default_language: en languages: en: english ja: japanese + uk: ukrainian + nav_translations: + uk: + Home: Головна + Documentation: Документація + Blogs: Блог + Community: Спільнота + Get Involved: Приєднуйтесь + Guides and Resources: Посібники та ресурси + + Overview: Огляд + + Getting Started: Початок роботи + Install Copilot: Встановлення Copilot + (Optional) Verify the installation: Перевірка встановлення (опціонально) + Deploy your first application: Розгортання першого застосунку + + Concepts: Концепції + Applications: Застосунки + Environments: Середовища + Services: Сервіси + Jobs: Завдання + Pipelines: Конвеєри + + Credentials: Облікові дані + Manifest: Маніфест + # Backend Service: Сервіс Backend + Load Balanced Web Service: Вебсервіс з балансуванням навантаження + Request-Driven Web Service: Вебсервіс на основі запитів + Scheduled Job: Заплановане завдання + Static Site: Статичний сайт + Worker Service: Сервіс робочих навантажень + # Environment: Середовище + Pipeline: Конвеєр + + Developing: Розробка + Additional AWS Resources: Додаткові ресурси AWS + Additional Workload Resources: Додаткові ресурси робочого навантаження + Additional Environment Resources: Додаткові ресурси середовища + Uploading Local Artifacts: Надсилання локальних артефактів + + Container Environment Variables: Змінні середовища + Content Delivery: Доставка контенту + Custom Environment Resources: Власні ресурси середовища + Domain: Домен + + Extend Copilot with Overrides: Розширення Copilot за допомогою перевизначень + YAML Patch Overrides: Перевизначення YAML Patch + CDK Overrides: Перевизначення CDK + Task Definition Overrides: Перевизначення завдання + + Internal Load Balancers: Внутрішні балансувальники навантаження + Manifest Environment Variables: Змінні середовища в маніфесті + Observability: Спостережуваність + Publish/Subscribe: Публікація/Підписка + Secrets: Секрети + Service-to-Service Communication: Комунікація між сервісами + # Sidecars: Sidecars + Storage: Зберігання + + Commands: Команди + Build: Збірка + Release: Реліз + Operate: Робота + Extend: Розширення + Settings: Налаштування + All: Всі + material_alternate: false - macros: include_dir: site/content/docs/include diff --git a/site/content/community/get-involved.uk.md b/site/content/community/get-involved.uk.md new file mode 100644 index 00000000000..8f98521b171 --- /dev/null +++ b/site/content/community/get-involved.uk.md @@ -0,0 +1,12 @@ +--- +title: Долучайтеся +--- + +# Ласкаво просимо до спільноти AWS Copilot ❤️ + +Це місце для обміну вашими [[застосунками, статтями, відео](../../community/guides/)] та іншими ресурсами, повʼязаними з AWS Copilot CLI 👩‍✈️. + +Ви можете долучитися до CLI, зробивши наступне: + +* Створюйте тікети в репозиторії GitHub [![GitHub issues](https://img.shields.io/github/issues/aws/copilot-cli)](https://github.com/aws/copilot-cli/issues) +* Приєднуйтесь до чату з іншими Copilotʼами [![https://gitter.im/aws/copilot-cli](https://badges.gitter.im/aws/copilot-cli.svg)](https://gitter.im/aws/copilot-cli?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) diff --git a/site/content/community/guides.uk.md b/site/content/community/guides.uk.md new file mode 100644 index 00000000000..7870f81449e --- /dev/null +++ b/site/content/community/guides.uk.md @@ -0,0 +1,80 @@ +--- +title: Посібники та ресурси +--- + +# Посібники та ресурси + +Поділіться своїми застосунками, видеороликами та публікаціями в блогах з іншими Copilots! + +## Блоги + +| Назва | Опис | +|-------|------| +|[**Deploy LangChain 🦜🔗 applications on AWS with LangServe 🦜️🏓**](https://community.aws/content/2eY9TZJMipfxYOTafH5AdjPDCKE/deploy-langchain-applications-on-aws-with-langserve) by João Galego | Learn how to deploy LangChain applications with LangServe in minutes on Amazon ECS and AWS Fargate using AWS Copilot. | +|[**Use AWS Graviton processors on AWS Fargate with Copilot**](https://dev.to/aws-builders/use-aws-graviton-processors-on-aws-fargate-with-copilot-1n6p) by Jason Andrews | Use Copilot to run containers on Fargate’s serverless compute with Graviton2 processors and benefit from improved price performance. | +|[**The AWS Copilot NowTo Guide — Introduction**](https://medium.com/@biju.krishnan_73542/the-aws-copilot-nowto-guide-introduction-793e3f1bd132) by Biju Krishnan | In a series of blogs, Biju, who focuses on AI Solutions and AI Governance, shares their experience with deploying [AI Verify](https://aiverifyfoundation.sg/what-is-ai-verify/) as a two-tier application using Copilot. | +|[**Scalable Cloud inference endpoint using ONNX and AWS Fargate**](https://awstip.com/scalable-cloud-inference-endpoint-using-onnx-and-aws-fargate-20e142d14bb2) by Rustem Feyzkhanov | Machine Learning engineer Rustem Feyzkhanov couples the ease of Copilot with the flexibility of the Open Neural Network Exchange (ONNX) AI framework. | +| [**Implementing a pub/sub architecture with AWS Copilot**](https://aws.amazon.com/blogs/containers/implementing-a-pub-sub-architecture-with-aws-copilot/) by Rafael Mosca | AWS Territory Solutions Architect Rafael Mosca leverages Copilot to quickly and easily implement the pub-sub architecture of a sample e-commerce platform. Clear steps and diagrams make concepts easy to learn. | +| [**Using Copilot to Deploy, Manage, and Secure Apps on ECS**](https://christophef.medium.com/using-copilot-to-deploy-manage-and-secure-apps-on-ecs-4b581e087c93) by @christophef | Christophe demonstrates how to deploy, manage, and secure your apps in AWS ECS and how favorable it is for most software companies that want to concentrate on building amazing apps and don’t want to spend time managing clusters, pipelines, etc. | +| [**Deploy Containers using AWS Copilot**](https://awstip.com/deploy-containers-using-aws-copilot-2213e1a81f90) by @piumsudhara | Piumsudhara takes you through detailed steps for building and deploying containerized applications using AWS Copilot. | +| [**DBT container on AWS ECS by using AWS Copilot CLI**](https://medium.com/@key.hui/dbt-container-on-aws-ecs-by-using-aws-copilot-cli-92dbe9b6af56) by @key.hui | Check out how to pack the dbt container and use the Copilot CLI to deploy on ECS. | +| [**How to set up AWS Copilot to build, release and operate containerized applications on ECS and Fargate using a CLI?**](https://www.workfall.com/learning/blog/how-to-set-up-aws-copilot-to-build-release-and-operate-containerized-applications-on-ecs-and-fargate-using-a-cli-2/) by @workfall | Check out how AWS Copilot supercharges your application by allowing you to set up infrastructure, build your application with many microservices, set up a pipeline to automate release and monitor the stack and application’s status, and add-ons all from a single CLI. | +| [**AWS Copilot でプライベートエンドポイントモードの AWS App Runner がサポートされました**](https://dev.classmethod.jp/articles/aws-copilot-private-endpoint-app-runner/) by @Tak1wa | [Japanese] Check out how easy it is to use AWS Copilot to deploy an AWS App Runner private service, one that is accessible only from within your environment. +| [**AWS CopilotでFocalboardをたててみる**](https://www.d-make.co.jp/blog/2021/08/17/focalboard-with-aws-copilot/) by @__m_sakasa | [Japanese] See how to build a [Mattermost](https://mattermost.com/) [Focalboard](https://www.focalboard.com/), an [open-source](https://github.com/mattermost/focalboard) project management tool, using Copilot. +| [**Prefect Cloud based data pipelines using AWS Copilot on ECS**](https://www.core27.co/post/prefect-cloud-based-data-pipelines-using-aws-copilot-on-ecs) by @Core27_ | Core27 takes you through building and deploying a production-grade data stack on Amazon Elastic Container Service. | +| [**AWS Copilot GitHub Actions**](https://blog.sivamuthukumar.com/aws-copilot-github-actions) by @ksivamuthu | Sivamuthu Kumar is back again, this time setting up OpenID Connect to link AWS and GitHub Actions, then using GitHub Actions to install Copilot and deploy an app. | +| [**Deploy Serverless Containerized NodeJs Apps on AWS ECS Fargate with AWS Copilot**](https://www.serverlessguru.com/blog/deploy-serverless-containerized-nodejs-application-on-aws-ecs-fargate) by @gaymitb | Jaymit Bhoraniya takes you through deploying to AWS, first with basic config, then with a CI/CD pipeline. | +| [**How to Use Copilot to Deploy Projects on ECS**](https://www.wednesday.is/writing-tutorials/how-to-use-copilot-to-deploy-projects-on-ecs) by Christin Itty | This tutorial includes a demo repo with a script of Copilot commands, showing you how to launch an entire app (including an Aurora serverless cluster with a PostgreSQL engine) in just one command. | +| [**AWS Copilot CLI を使って複数環境で既存の DynamoDB を使う**](https://zenn.dev/hkdord/articles/aws-copilot-cli-existing-dynamodb) by @hkford3 | [Japanese] Hidekazu Karino walks us through the deployment of a service to two environments, leveraging an existing DynamoDB table, and setting up a CI/CD pipeline, all with Copilot. | +| [**レンティオの本番環境をAWS Copilot/Fargate構成に切り替えた話**](https://zenn.dev/rentio/articles/convox-to-copilot) by the Rentio development team | [Japanese] A real-life account of switching from Convox to Copilot, including the 'why's and the 'how's, what went well and what didn't. | +| [**Deploy .NET 6 API to AWS App Runner using AWS Copilot CLI**](https://dev.to/aws-builders/deploy-net-6-api-to-aws-app-runner-using-aws-copilot-cli-4hnl) by @ksivamuthu | Using Copilot and App Runner, Sivamuthu Kumar deploys a .NET API project. | +| [**Container-to-Container Communication**](https://www.miketheman.net/2021/12/28/container-to-container-communication/) by @mikefiedler | Mike takes us through a science experiment of sorts, a "who will win" type of battle, to determine if TCP or Unix sockets are better for inter-container communication. | +| [**AWS Copilot で ECS(Fargate) に Express(Node.js) をデプロイする**](https://blog.morugu.com/entry/copilot-express) by Shoya Shiraki @morugu | [Japanese] Follow along this blog post to build an Express Node.js app with Copilot. | +| [**AWS Copilot – ECS**](https://blog.sivamuthukumar.com/series/aws-copilot-ecs) by @ksivamuthu | Here we have a three-part series devoted to Copilot! Sivamuthu Kumar demos launching a .NET coffeeshop app, exploring pipelines, storage, addons, and logs along the way. | +| [**Deploying a Telegram Bot to AWS ECS with AWS Copilot**](https://dev.to/chrisciokler/deploying-a-telegram-bot-to-aws-ecs-with-aws-copilot-step-by-step-for-absolut-beginners-ngl) by Christian Prado Ciokler | Christian takes you through building a Node.js app, step-by-step, with Copilot on Docker Desktop Windows Subsystem for Linux (WSL) 2. | +| [**Deploying a Containerized Web App with AWS Copilot**](https://towardsdatascience.com/deploying-a-containerized-web-app-with-aws-copilot-db5c90467fbd) by @edkruegerdata and Dylan Rossi | Edward and Dylan start from the basics, including IAM account creation and AWS CLI installation. (Note: you'll also need to install AWS Copilot.) They demonstrate using Postman to test the deployed app. | +| [**Pilot your containers like a boss with AWS Copilot!**](https://blog.flolight.dev/pilot-your-containers-like-a-boss-with-aws-copilot) by @FlolightC | Florian simplifies getting started with AWS Copilot by demoing deployment of a [sample app](https://github.com/aws-samples/amazon-ecs-cli-sample-app) from start to finish, including links to both required and optional resources. | +| [**Use AWS Copilot CLI to deploy containers on an existing infrastructure - Tutorial**](https://towardsthecloud.com/aws-copilot-cli-deploy-containers-existing-infrastructure-tutorial) by @dannysteenman | Danny explains how to use your existing VPC and subnets with AWS Copilot to quickly set up a working container environment. Follow along as he deploys a Django app with an RDS Postgres database and Elasticache Redis cluster. | +| [**Automatically deploying your container application with AWS Copilot**](https://aws.amazon.com/blogs/containers/automatically-deploying-your-container-application-with-aws-copilot/) by @nathankpeck | Nathan shows how to set up a release pipeline with the CLI that builds, pushes, and deploys an application. Finally, he sets up integration tests for validation before releasing to production. | +| [**Deploying containers with the AWS Copilot CLI**](https://maartenbruntink.nl/blog/2020/08/16/deploying-containers-with-the-aws-copilot-cli-part-1/) by @maartenbruntink | Maarten shows how to use the AWS Copilot CLI to deploy the [sample Docker voting app](https://github.com/dockersamples/example-voting-app), which showcases how to set up your own Redis and Postgres servers. In the [second part](https://maartenbruntink.nl/blog/2020/08/16/deploying-containers-with-the-aws-copilot-cli-part-2), he automates the release process. | +| [**AWS Copilot: an application-first CLI for containers on AWS**](https://aws.amazon.com/blogs/containers/aws-copilot-an-application-first-cli-for-containers-on-aws/) by @efekarakus | Efe walks through the design tenets of the CLI: why they were chosen, how they map to Copilot features, and the vision for how the CLI will evolve in the future. | +| [**Introducing AWS Copilot**](https://aws.amazon.com/blogs/containers/introducing-aws-copilot/) by @nathankpeck | Nathan explains how with the AWS Copilot CLI you can go from idea to implementation much faster, with the confidence that the infrastructure you have deployed has production-ready configuration. | + +## Відео + +| Назва | Опис | +| ----- | ---- | +| [**Build, Operate, and Observe a Containerized Application on AWS Fargate**](https://nathanpeck.com/build-operate-and-observe-container-application-on-aws-fargate/) by @nathankpeck | AWS's indefatigable Nathan Peck is back! In this session for AWS Application Modernization Day, he champions containers and demonstrates the deployment of a load-balanced web service and a load-testing scheduled job. | +| [**Using Jenkins and AWS Copilot CLI to Deploy to AWS App Runner**](https://www.youtube.com/watch?v=ajgQ4WfgKA8) by @DarinPope | Darin, a developer advocate for CloudBees, uses AWS Copilot and a Jenkinsfile to deploy to AWS AppRunner. | +| [**Deploy a Web App with AWS CoPilot**](https://www.youtube.com/watch?v=OLiO5LLl6Ng&list=PLoxFga2t8Vw0tB6QRMZiADnAvmuTUZcc6) by @edkruegerdata | This three-part series includes "Creating an Administrator User Group in AWS," "Create an IAM Account on AWS," and "Deploying the Web App." | +| [**Container Day: Amazon ECS Edition-- Demo: deploy a modern application on AWS Fargate with ECS Copilot**](https://www.youtube.com/watch?v=k01AdJC-dcA&t=14236s) by @efekarakus and @realadamjkeller | Efe goes beyond the basics, demoing how to grow [an application](https://github.com/efekarakus/day2-with-copilot); he highlights the `alias` field, secrets and environment variables, addons, and more. | +| [**Copilot– What AWS ECS and Fargate Container Management Should Have Been**](https://www.youtube.com/watch?v=YCCFK2RRm7U) by @vfarcic | Viktor lauds Copilot for its simplicity and ease of use in this clear, step-by-step demo. | +| [**AWS Copilot CLI v1.8.0 Release Highlights**](https://www.youtube.com/watch?v=Oyr-n59mVjI) by @realadamjkeller | Adam walks through the features that shipped with version 1.8.0 of the AWS Copilot CLI, including `alias`, the `svc status` update, and container dependency. | +| [**DevBeardOps with !Cobus & !Darko: Playing with Containers**](https://www.pscp.tv/w/1ypJdgQoLDqGW) by @cobusbernard and @darkosubotica | Learn alongside Cobus and Darko as they experiment with AWS Copilot, from installation to pipeline setup. | +| [**Containers from the Couch series**](https://www.youtube.com/c/ContainersfromtheCouch/search?query=copilot) by @realadamjkeller, @brentContained, and guests | Join Adam and Brent to learn about many of the existing features of AWS Copilot with fun demos. Watch as they [set up](https://www.youtube.com/watch?v=Ay8iUFWzF4U) a three-tier application [with autoscaling](https://www.youtube.com/watch?v=TE-E_ZtMiv0); [create a continuous delivery pipeline with integration tests](https://www.youtube.com/watch?v=SpTI9be5whk); show how easy it is to ['exec' with Copilot](https://www.youtube.com/watch?v=NyiMoyx_xj4); and highlight [ephemeral storage](https://www.youtube.com/watch?v=lGmLhQjagVs) and [scheduled job](https://www.youtube.com/watch?v=veffvwZ6hG8) features. | +| [**AWS Copilot and another 6 ways to easily deploy apps to AWS**](https://www.youtube.com/watch?v=0lxcfJ20TwA) by Kirill Shirinkin | Kirill Shirinkin explores ways to easily deploy a new product on AWS - including a new favorite one, AWS Copilot. | +| [**AWS re:Invent 2020: AWS Copilot: Simplifying container development**](https://youtu.be/EqW--TKQ_PQ) by @efekarakus | Learn about the motivation behind AWS Copilot, get an overview of the existing commands and a demo of how to deploy a three-tier application. | +| [**How to Deploy a .NET Application to Amazon Elastic Container Service (ECS) with AWS Copilot**](https://youtu.be/nWaw8Rp8JgQ) by @ignacioafuentes | Get a demo on how to build and deploy a .NET application to Amazon ECS on AWS Fargate. | +| [**AWS What's Next**](https://www.youtube.com/watch?v=vmTJgVDERZU) by @nathankpeck and @efekarakus | Nathan and Efe discuss what makes AWS Copilot unique compared to other infrastructure provisioning tools and then demo an overview of the existing commands. | + +## Приклади коду + +| Репозиторій | Опис | Ключові особливості | +| ----------- | ---- | ------------------- | +[**Server Side Swift Guides**](https://www.swift.org/server/guides/deploying/aws-copilot-fargate-vapor-mongo.html) | Server Side Swift on AWS with Fargate, Vapor, and MongoDB Atlas deployed with Copilot | Fargate, Vapor, MongoDB, API Gateway +[**github.com/kcearns/fargate-node-example**](https://github.com/kcearns/fargate-node-example) | A sample Node application that includes a pipeline. | Node, pipeline +[**github.com/efekarakus/day2-with-copilot**](https://github.com/efekarakus/day2-with-copilot) | A REST API coffeeshop application that goes beyond the basics, demoed in the ["Container Day" video](../guides/#videos), above. | `alias`, secrets, DynamoDB, Redis | +[**github.com/bvtujo/copilot-wordpress**](https://github.com/bvtujo/copilot-wordpress) | A WordPress installation launched by AWS Copilot with step-by-step instructions and options for customization. | [EFS](../../docs/developing/storage/#managed-efs), MySQL RDS cluster, autoscaling | +[**#2378**](https://github.com/aws/copilot-cli/discussions/2378) | Show-and-tell with sample templates for launching isolated tasks in private subnets. | VPC Endpoints, [custom environments](../../docs/developing/custom-environment-resources/) | +[**github.com/copilot-example-voting-app**](https://github.com/copilot-example-voting-app), [**#1745**](https://github.com/aws/copilot-cli/discussions/1745) | A voting application distributed over three ECS services created with AWS Copilot. | Amazon Aurora PostgreSQL database, service discovery, autoscaling | +[**#1925**](https://github.com/aws/copilot-cli/discussions/1925) | Show-and-tell explaining how you can do continuous deployments from branches with AWS Copilot pipelines. | Branch-based deploys, AWS CodePipeline | + +## Майстер-класи + +| Назва | Опис | +| ----- | ---- | +[**Explore the Foundations of AWS Containers**](https://catalog.us-east-1.prod.workshops.aws/workshops/e3652cbb-3362-4c8b-9873-09c149e87358/en-US) | Nathan Peck, a Senior Developer Advocate for ECS, walks you through an introduction to containers, using tools like AWS Copilot CLI, Amazon CloudWatch, and AWS App Runner. A sample repo allows you to focus on containerization, and there's even a bonus challenge for eager learners. | +[**Deploy .NET Apps with AWS Copilot**](https://aws-labs.net/netonaws/copilot-windows-dotnet.html) | This lab, part of the AWS Windows Workshop, guides you through creating a .NET 6 project, including deploying CI/CD pipelines. Plenty of screen shots help you see what's happening in the terminal, in VS Code, and on the console. | +[**Copilot Rocks**](https://www.copilot.rocks/) | This open-source, comprehensive, modular workshop lets you pick and choose from multiple mini-workshops, covering everything from installation to implementing pub/sub patterns. Step-by-step guides offer tips and tricks, clarify with useful diagrams, and delve into advanced patterns. (Source code is hosted [here](https://github.com/donnieprakoso/copilot.rocks).) | +[**ECS Workshop**](https://ecsworkshop.com/microservices/) | In this workshop, we deploy a three-tier microservices application using the AWS Copilot CLI. (Optional accompanying video [here](https://www.youtube.com/watch?v=o8o9Ea9o0aI).) | +[**Copilot Primer Workshop**](https://catalog.us-east-1.prod.workshops.aws/workshops/d03316be-3c29-49db-8dc3-eb196c1778c9/en-US) | In this workshop, you will experience AWS Copilot CLI through the creation of a sample to-do list application. With AWS Copilot CLI, you initialize your application, create a development environment and deploy containers onto the environment. You can also deploy your containers from a pipeline. | diff --git a/site/content/docs/concepts/applications.uk.md b/site/content/docs/concepts/applications.uk.md new file mode 100644 index 00000000000..03b99441271 --- /dev/null +++ b/site/content/docs/concepts/applications.uk.md @@ -0,0 +1,114 @@ +--- +title: Застосунки +--- + +# Застосунки + +Застосунок — це група повʼязаних сервісів, середовищ та конвеєрів. Незалежно від того, чи ви маєте один сервіс, який робить усе, чи набір мікросервісів, Copilot організовує сервіс(и) та середовища, у які вони можуть бути розгорнуті, у "застосунок". + +Розгляньмо приклад. Ми хочемо створити застосунок для голосування, який повинен збирати голоси та агрегувати результати. + +Щоб налаштувати наш застосунок для голосування з двома сервісами, ми можемо двічі запустити `copilot init`. Перший раз, коли ми запускаємо `copilot init`, він запитає, як ми хочемо назвати застосунок, до якого належатиме цей сервіс. Оскільки ми намагаємося створити систему голосування, ми можемо назвати наш застосунок "vote" і наш перший сервіс "collector". Наступного разу, коли ми запустимо `init`, нас запитають, чи хочемо ми додати наш новий сервіс до наявного застосунку "vote", і ми назвемо новий сервіс "aggregator". + +Конфігурація вашого застосунку (сервіси та середовища які до нього належать) зберігається у вашому обліковому записі AWS, тому будь-які інші користувачі у вашому обліковому записі зможуть брати участь в розробці застосунку "vote". Це означає, що ваш колега може працювати над одним сервісом, поки ви розробляєте інший. + +![](https://user-images.githubusercontent.com/879348/85869625-cd858d00-b780-11ea-817c-638814049d2d.png) + +## Створення застосунку + +!!! Attention "Увага" + Якщо у вас вже є тека `copilot/`, створена для інших цілей, ви можете виявити, що Copilot створює файли в цій теці. Якщо це станеться, ви можете створити порожню теку з назвою `copilot/` поруч з вашою робочою текою. Copilot використовуватиме цю порожню теку. + +Щоб налаштувати застосунок, ви можете просто запустити `copilot init`. Вас запитають, чи хочете ви налаштувати новий застосунок або вибрати наявний. + +```bash +copilot init +``` + +Після створення застосунку Copilot зберігає цей застосунок у SSM Parameter store у вашому обліковому записі AWS. Обліковий запис, який використовується для налаштування вашого застосунку, відомий як "обліковий запис застосунку". Тут зберігається конфігурація вашого застосунку, і будь-хто, хто має доступ до цього облікового запису, може використовувати цей застосунок. + +Усі ресурси, створені в межах цього застосунку, будуть позначені теґом `copilot-app` [теґ ресурсу aws](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html). Це допомагає вам знати, які ресурси застосунку у вашому обліковому записі належать до нього. + +Назва вашого застосунку має бути унікальною у вашому обліковому записі (навіть у різних регіонах). + +### Додаткові конфігурації застосунку + +Ви також можете надати більш детальну конфігурацію для вашого застосунку, запустивши `copilot app init`. Це включає опції для: + +* Позначення всіх ресурсів застосунку, сервісу та середовища додатковим набором [теґів ресурсу aws](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html) +* Використання власного доменного імені для сервісів з балансуванням навантаження +* Передача поточної політики IAM для встановлення межі дозволів для всіх ролей, створених у межах застосунку. + +```bash +copilot app init \ + --domain my-awesome-app.aws \ + --resource-tags department=MyDept,team=MyTeam \ + --permissions-boundary my-pb-policy +``` + +## Інфраструктура застосунку + +Хоча основна частина інфраструктури, яку надає Copilot, є специфічною для середовища та сервісу, існують також деякі ресурси, що охоплюють весь застосунок. + +![](https://user-images.githubusercontent.com/879348/85869637-d0807d80-b780-11ea-8359-6d75933c562a.png) + +### Репозиторії ECR + +Репозиторії ECR є регіональними ресурсами, які зберігають образи ваших сервісів. Кожен сервіс має свій власний репозиторій ECR для кожного регіону у вашому застосунку. + +На діаграмі вище застосунок має кілька середовищ, розподілених по трьох регіонах. Кожен з цих регіонів має свій власний репозиторій ECR для кожного сервісу у вашому застосунку. У цьому випадку є три сервіси. + +Кожного разу, коли ви додаєте сервіс, ми створюємо репозиторій ECR у кожному регіоні. Ми робимо це для підтримки ізоляції регіонів (якщо один регіон виходить з ладу, середовища в інших регіонах не будуть порушені) і для зменшення витрат на передачу даних між регіонами. + +Ці репозиторії ECR знаходяться у вашому обліковому записі застосунку (а не в облікових записах середовищ) і мають політики, які дозволяють вашим обліковим записам середовищ отримувати з них дані. + +### Інфраструктура випуску + +Для кожного регіону, представленого у вашому застосунку, ми створюємо ключ KMS та кошик S3. Ці ресурси використовуються CodePipeline для забезпечення розгортання між регіонами та обліковими записами. Усі конвеєри у вашому застосунку використовують ці самі ресурси. + +Подібно до репозиторіїв ECR, кошик S3 та ключі KMS мають політики, які дозволяють усім вашим середовищам, навіть в інших облікових записах, читати зашифровані артефакти розгортання. Це робить можливими ваші конвеєри CodePipeline між обліковими записами та регіонами. + +## Дослідження вашого застосунку + +Тепер, коли ми налаштували застосунок, ми можемо перевірити його за допомогою Copilot. Нижче наведено кілька поширених способів перевірки вашого застосунку. + +### Які застосунки є у моєму обліковому записі? + +Щоб побачити всі застосунки у вашому поточному обліковому записі та регіоні, ви можете запустити `copilot app ls`. + +```bash +copilot app ls +vote +ecs-kudos +``` + +### Що є у моєму застосунку? + +Запуск `copilot app show` покаже вам короткий опис вашого застосунку, включно з усіма сервісами та середовищами у вашому застосунку. + +```console +copilot app show +About + + Name vote + Version v1.1.0 + URI vote-app.aws + +Environments + + Name AccountID Region + ---- --------- ------ + test 000000000000 us-east-1 + +Workloads + + Name Type Environments + ---- ---- ------------ + collector Load Balanced Web Service prod + aggregator Backend Service test, prod + +Pipelines + + Name + ---- +``` diff --git a/site/content/docs/concepts/environments.uk.md b/site/content/docs/concepts/environments.uk.md new file mode 100644 index 00000000000..ac68aa368c0 --- /dev/null +++ b/site/content/docs/concepts/environments.uk.md @@ -0,0 +1,114 @@ +--- +title: Середовища +--- + +# Середовища + +Коли ви вперше запускаєте `copilot init`, вас запитують, чи хочете ви створити _тестове_ середовище. Це тестове середовище містить усі ресурси AWS для забезпечення захищеної мережі (VPC, підмережі, групи безпеки та інше), а також інші ресурси, які призначені для спільного використання між кількома сервісами, такі як Application Load Balancer або ECS Cluster. Коли ви розгортаєте свій сервіс у _тестовому_ середовищі, ваш сервіс використовуватиме мережу та ресурси _тестового_ середовища. Ваш застосунок може мати кілька середовищ, і кожне з них матиме власну мережеву та спільну інфраструктуру ресурсів. + +Хоча Copilot створює для вас тестове середовище на початку роботи, для промислової експлуатації зазвичай створюється нове, окреме середовище. Це промислове середовище буде повністю незалежним від тестового середовища, з власною мережею та копією сервісів. Маючи як тестове, так і промислове середовище, ви можете розгортати зміни в тестовому середовищі, перевіряти їх, а потім переносити їх у промислове середовище. + +На діаграмі нижче ми маємо застосунок з назвою _MyApp_ з двома сервісами, _API_ та _Backend_. Ці два сервіси розгорнуті у двох середовищах, _test_ та _prod_. Ви можете побачити, що в _test_ середовищі обидва сервіси працюють лише в одному контейнері, тоді як у _prod_ середовищі сервіси мають більше контейнерів. Сервіси можуть використовувати різні конфігурації залежно від середовища, в якому вони розгорнуті. Для отримання додаткової інформації перегляньте посібник [використання змінних середовища](../../developing/environment-variables/). + +![](https://user-images.githubusercontent.com/879348/85873795-7da9c480-b786-11ea-9990-9604a3cc5f01.png) + +## Створення середовища + +Щоб створити нове середовище у вашому застосунку, ви можете запустити `copilot env init` з вашого робочого простору. Copilot запитає вас, як ви хочете назвати це середовище та який профіль ви бажаєте використовувати для його налаштування. Ці профілі є [іменованими профілями AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html), які повʼязані з певним обліковим записом та регіоном. Коли ви вибираєте один з цих профілів, ваше середовище буде створено в обліковому записі та регіоні, з якими повʼязаний цей профіль. + +```console +copilot env init +``` + +Після запуску `copilot env init`, ви можете спостерігати, як Copilot налаштовує дві IAM ролі, які є необхідними для оновлення та управління середовищем. Якщо середовище було створено з іншим обліковим записом AWS, ніж застосунок, середовище буде повʼязане з обліковим записом застосунку; це дозволяє акторам в обліковому записі застосунку керувати середовищем, навіть без доступу до облікового запису середовища. Copilot створює [env manifest](../../manifest/environment/) у `copilot/environments/[env name]/manifest.yml`. + +## Розгортання середовища + +Якщо ви хочете, ви можете налаштувати своє середовище, змінивши ваш [env manifest](../../manifest/environment/) перед його розгортанням: + +```console +copilot env deploy +``` + +На цьому етапі Copilot створює ресурси інфраструктури вашого середовища, такі як кластер ECS, групу безпеки та приватний простір імен DNS. Після розгортання ви можете змінити свій env manifest і повторно розгорнути його, просто запустивши [`copilot env deploy`](../../commands/env-deploy/) знову. + +### Розгортання сервісу + +Коли ви вперше створюєте нове середовище, жодні сервіси не розгорнуті в ньому. Щоб розгорнути сервіс, запустіть `copilot deploy` з теки цього сервісу, і вам буде запропоновано вибрати, в яке середовище розгортати. + +## Інфраструктура середовища + +![](https://user-images.githubusercontent.com/879348/85873802-800c1e80-b786-11ea-8b2c-779b01abbaf4.png) + + +### VPC та мережа + +Кожне середовище отримує власний VPC з кількома зонами доступності (multi-AZ). Ваш VPC — це мережевий кордон вашого середовища, який пропускає трафік, який ви очікуєте, і блокує решту. VPC, створені Copilot, розподілені по двох зонах доступності, кожна з яких отримує публічну та приватну підмережу, відповідно до [найкращих практик AWS](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-best-practices.html). Стандартно ваші сервіси запускаються в загальнодоступних підмережах, обмежуючи доступ лише до інших сервісів у вашому середовищі з метою безпеки. Завдання розміщуються в публічних підмережах, щоб допомогти керувати витратами, дозволяючи вихід в інтернет без необхідності використання NAT шлюзу. + +Розміщення підмережі робочого навантаження можна змінити за допомогою поля [`network.vpc.placement`](../../manifest/lb-web-service/#network-vpc-placement) у маніфесті. + +### Балансувальники навантаження та DNS + +Якщо ви налаштували вебсервіс з балансуванням навантаження або бекенд-сервіс з полем `http` у його маніфесті, Copilot налаштує балансувальник навантаження застосунків (ALB), який буде спільним для всіх сервісів з балансуванням навантаження в цьому середовищі. ALB вебсервісів з балансуванням навантаження є інтернет-орієнтованими, тоді як ALB бекенд-сервісів є внутрішніми. Ваш балансувальник навантаження може спілкуватися з іншими сервісами Copilot у вашому VPC. + +За бажанням, коли ви налаштовуєте застосунок, ви можете надати доменне імʼя, яким ви володієте та яке зареєстроване в Route 53. Якщо ви надаєте доменне імʼя, кожного разу, коли ви створюєте середовище, Copilot створить піддомен environment-name.app-name.your-domain.com, забезпечить сертифікат ACM та привʼяже його до вашого балансувальника навантаження застосунків, щоб він міг використовувати HTTPS. + +Внутрішній ALB створюється, коли бекенд-сервіс з налаштованим [`http`](../../manifest/backend-service/#http) у його маніфесті розгортається в середовищі. Для точки доступу HTTPS використовуйте прапорець [`--import-cert-arns`](../../commands/env-init/#what-are-the-flags) під час запуску `copilot env init` та імпортуйте VPC лише з приватними підмережами. Для отримання додаткової інформації про внутрішні ALB, перейдіть [сюди](../../developing/internal-albs/). + +Якщо у вас вже є ALB у вашому VPC і ви хочете використовувати його замість того, щоб дозволити Copilot створити новий, вкажіть цей ALB за назвою або ARN у маніфесті вашого вебсервісу з балансуванням навантаження (для інтернет-орієнтованих ALB) або бекенд-сервісу (для внутрішніх ALB) перед розгортанням його в середовище: + +```yaml +http: + path: '/' + alb: [name or ARN] +``` + +Ваш імпортований ALB буде повʼязаний лише з цим сервісом (та іншими, які аналогічно імпортують його), а не спільним для всіх сервісів з балансуванням навантаження в середовищі. + +## Налаштування вашого середовища + +Ви можете імпортувати наявні ресурси середовища або налаштувати стандартні за допомогою прапорців з командами або змінивши ваш [env manifest](../../manifest/environment/). Якщо ви хочете налаштувати більше типів ресурсів, ніж зараз доступно для налаштування, не соромтеся поділитися своїми випадками використання та створити тікет! + +Для отримання додаткової інформації дивіться нашу сторінку [налаштування ресурсів середовища](../../developing/custom-environment-resources/). + +## Дослідження вашого середовища + +Тепер, коли ми створили середовище, ми можемо перевірити його за допомогою Copilot. Нижче наведено кілька поширених способів перевірки вашого середовища. + +### Які середовища є частиною мого застосунку? + +Щоб побачити всі середовища у вашому застосунку, ви можете запустити `copilot env ls`. + +```console +$ copilot env ls +test +production +``` + +### Що є у вашому середовищі? + +Запуск `copilot env show` покаже вам опис вашого середовища. Ось приклад виводу, який ви можете побачити для нашого тестового середовища. Цей вивід включає обліковий запис та регіон, у якому знаходиться середовище, сервіси, розгорнуті в цьому середовищі, та теґ, який матимуть усі ресурси, створені в цьому середовищі. Ви також можете надати додатковий прапорець `--resources`, щоб побачити всі ресурси AWS, повʼязані з цим середовищем. + +```console +$ copilot env show --name test +About + + Name test + Region us-west-2 + Account ID 693652174720 + +Workloads + + Name Type + ---- ---- + api Load Balanced Web Service + backend Backend Service + + +Tags + + Key Value + --- ----- + copilot-application my-app + copilot-environment test +``` diff --git a/site/content/docs/concepts/jobs.uk.md b/site/content/docs/concepts/jobs.uk.md new file mode 100644 index 00000000000..4bcf3ffe022 --- /dev/null +++ b/site/content/docs/concepts/jobs.uk.md @@ -0,0 +1,77 @@ +--- +tite: "Завдання" +--- + +# Завдання + +Завдання (Job) — це завдання (task) Amazon ECS, які запускаються за подією. Наразі Copilot підтримує лише "Заплановані Завдання". Це завдання, які можуть запускатися або за фіксованим розкладом, або періодично, вказавши частоту. + +## Створення Завдання + +Найпростіший спосіб створити завдання — виконати команду `init` з теки з вашим Dockerfile. + +```console +copilot init +``` + +Після того, як ви виберете, до якого застосунку має належати завдання, Copilot запитає вас про __тип__ завдання, яке ви хочете створити. Наразі Copilot підтримує лише "Заплановане Завдання". + +## Конфігурація та Маніфест + +Після того, як ви виконали `copilot init`, CLI створить файл з назвою `manifest.yml` у теці `copilot/[назва завдання]/`. [Маніфест запланованого завдання](../../manifest/scheduled-job/) — це простий декларативний файл, який містить найпоширеніші налаштування для завдання, яке запускається за запланованою подією. Наприклад, ви можете налаштувати, коли ви хочете запустити завдання, розмір контейнера, тайм-аут для завдання, а також кількість спроб у разі невдач. + +## Розгортання Завдання + +Після того, як ви налаштували файл маніфесту відповідно до ваших вимог, ви можете розгорнути зміни за допомогою команди deploy: + +```console +copilot deploy +``` + +Виконання цієї команди: + +1. Збере ваш образ локально +2. Завантажить його до репозиторію ECR вашого завдання +3. Перетворить файл маніфесту на шаблон CloudFormation +4. Упакує будь-яку додаткову інфраструктуру в шаблон CloudFormation +5. Розгорне ваші ресурси + +## Інші опції, повʼязані з Завданням + +Припустимо, ви хочете протестувати нове завдання або запустити його з якоїсь іншої причини. Використовуйте команду [`job run`](../../commands/job-run/): + +```console +copilot job run +``` + +Якщо ви хочете тимчасово вимкнути своє завдання, не видаляючи його повністю, встановіть розклад на `none` у вашому [маніфесті](../../manifest/scheduled-job/): + +```yaml +on: + schedule: "none" +``` + +Щоб вивести шаблон CloudFormation для налаштованого завдання, виконайте команду [`job package`](../../commands/job-package/): + +```console +copilot job package +``` + +### Що входить до Завдання? + +Оскільки Copilot використовує CloudFormation під капотом, усі створені ресурси видимі та позначені Copilot. Заплановані Завдання складаються з AmazonECS Task Definition (Визначення Завдання AmazonECS), Task Role (Ролі Завдання), Task Execution Role (Ролі Виконання Завдання), Step Function State Machine (Машини Станів Step Function) для повторних спроб у разі невдач, і нарешті Event Rule (Правила Події) для запуску машини станів. + +### Де знаходяться логи мого Завдання? + +Перевірка логів вашого завдання також проста. Виконання [`copilot job logs`](../../commands/job-logs/) покаже найновіші логи вашого завдання. Ви можете слідкувати за своїми логами в реальному часі за допомогою прапорця `--follow`, який буде показувати логи з будь-якого нового запуску вашого завдання після виконання команди. + +```console +$ copilot job logs +copilot/myjob/37236ed Doing some work +copilot/myjob/37236ed Did some work +copilot/myjob/37236ed Exited... +copilot/myjob/123e300 Doing some work +copilot/myjob/123e300 Did some work +copilot/myjob/123e300 Did some additional work +copilot/myjob/123e300 Exited +``` diff --git a/site/content/docs/concepts/overview.uk.md b/site/content/docs/concepts/overview.uk.md new file mode 100644 index 00000000000..d6895572c54 --- /dev/null +++ b/site/content/docs/concepts/overview.uk.md @@ -0,0 +1,33 @@ +--- +title: Огляд концепцій +--- + +# Концепції + +Copilot робить налаштування та розгортання ваших контейнерів в AWS надзвичайно простим, але те що описано в настановах Початок роботи це лише перший крок у подорожі. Що відбувається, коли ви хочете мати одну копію вашого сервісу лише для тестування, а іншу копію для обслуговування промислового трафіку? Що відбувається, коли ви хочете додати ще один сервіс? Як ви керуєте розгортанням усіх цих сервісів? Copilot хоче допомогти вам з усіма цими речами, тож розгляньмо деякі основні концепції Copilot, щоб зрозуміти, як вони можуть допомогти. + +## [Застосунки](../applications/) + +Застосунок — це колекція сервісів та середовищ. Коли ви починаєте роботу з Copilot, перше, що вам буде запропоновано зробити, це вибрати імʼя застосунку. Це може бути високорівневий опис продукту, який ви намагаєтеся створити. Прикладом може бути застосунок з назвою _"chat"_, який має два сервіси _"frontend"_ та _"api"_. Ці два сервіси можуть бути розгорнуті у середовищах _"test"_ та _"production"_. + +## [Середовища](../environments/) + +Ходять чутки, що є люди, які можуть писати ідеальний код з першого разу без жодних помилок. Хоча ми знімаємо капелюха перед такими людьми, ми вважаємо, що важливо мати можливість тестувати новий код на версії вашого сервісу, яка не є клієнтською, перед тим, як запускати його в промислову експлуатацію. У Copilot ми робимо це за допомогою _середовищ_. Кожне середовище може мати свою власну версію сервісу, що дозволяє створити "тестове" та "промислове" середовище. Ви можете розгорнути свій сервіс у тестовому середовищі, переконатися, що все добре, а потім розгорнути його в промисловому середовищі. Оскільки кожне середовище є незалежним, якщо ви розгорнете помилку у тестовому середовищі, клієнти, які використовують сервіс, розгорнутий в промисловому середовищі, будуть у безпеці. + +До цього часу ми говорили лише про один сервіс, але що відбувається, коли ви хочете додати ще один сервіс? Можливо, ви хочете додати бекенд-сервіс, щоб доповнити ваш фронтенд-сервіс. Кожне середовище містить набір ресурсів, спільних для всіх розгорнутих сервісів, ці ресурси включають мережу (VPC, підмережі, групи безпеки тощо), кластер ECS та балансувальник навантаження. Якщо ви розгорнете як фронтенд, так і бекенд-сервіс у тестовому середовищі, обидва сервіси будуть використовувати одну й ту ж мережу та кластер. + +## [Сервіси](../services/) + +Сервіс — це ваш код та вся інфраструктура, необхідна для його запуску на AWS. Коли ви вперше починаєте налаштовувати сервіс, Copilot запитає вас, який _тип_ сервісу ви хочете створити. _Тип_ сервісу визначає інфраструктуру, яка буде створена для підтримки вашого коду. Наприклад, якщо ви хочете, щоб ваш код обслуговував трафік з інтернету, Copilot може налаштувати балансувальник навантаження застосунків та сервіс Amazon ECS, що працює на AWS Fargate. + +Після того, як ви повідомите Copilot, який тип сервісу ви створюєте, Copilot подбає про створення Dockerfile вашого коду та безпечне зберігання образів у репозиторії Amazon ECR. Copilot також створить простий файл з назвою _manifest_, який містить усі налаштування для вашого сервісу. Це включає такі речі, як скільки памʼяті та процесорних ресурсів має бути виділено для кожної копії вашого сервісу, скільки копій вашого сервісу ви хочете запустити тощо. + +## [Завдання](../jobs/) + +Завдання — це _ефемерні_ завдання Amazon ECS, які запускаються подією. Після завершення роботи таке завдання завершується. Як і у випадку з сервісами, Copilot запитає вас всю необхідну інформацію, щоб швидко розпочати роботу з запланованим завданням на AWS. Файл маніфесту завжди можна використовувати для налаштування конфігурації та надання більш розширених налаштувань. + +## [Конвеєри](../pipelines/) + +Тепер, коли у вас є застосунок з кількома сервісами, розгорнутими у кількох середовищах, стежити за цими розгортаннями може стати складно. Copilot може допомогти, налаштувавши конвеєр випуску, який розгортає ваш сервіс щоразу, коли ви робите push у свій git-репозиторій. (Зараз Copilot підтримує репозиторії GitHub, Bitbucket та CodeCommit.) Коли буде виявлено push, ваш конвеєр створить сервіс, відправить образ до ECR і розгорне його у ваших середовищах. + +Загальноприйнятим шаблоном є налаштування конвеєра для конкретного сервісу, який розгортається у тестовому середовищі, запускає автоматизоване тестування, а потім розгортається в промисловому середовищі. diff --git a/site/content/docs/concepts/pipelines.uk.md b/site/content/docs/concepts/pipelines.uk.md new file mode 100644 index 00000000000..1cc7dbadd33 --- /dev/null +++ b/site/content/docs/concepts/pipelines.uk.md @@ -0,0 +1,242 @@ +--- +title: Конвеєри +--- + +# Конвеєри + +Наявність автоматизованого процесу випуску є однією з найважливіших частин доставки програмного забезпечення, тому Copilot прагне зробити налаштування цього процесу якомога простішим 🚀. + +У цьому розділі ми поговоримо про використання Copilot для налаштування CodePipeline, який автоматично збирає код вашого сервісу, коли ви робите push до вашого GitHub, Bitbucket або AWS CodeCommit репозиторію, розгортає його у ваших середовищах і запускає автоматизоване тестування. + +!!! Attention "Увага" + AWS CodePipeline не підтримується для сервісів з Windows як сімейством ОС. + CodePipeline використовує заснований на Linux AWS CodeBuild для стадії 'build', тому наразі Copilot конвеєри не можуть збирати Windows контейнери. + +## Чому? + +Ми не будемо занадто філософствувати про випуск програмного забезпечення, але в чому сенс мати конвеєр випуску? З `copilot deploy` ви можете розгорнути свій сервіс безпосередньо з вашого компʼютера в Amazon ECS на AWS Fargate, то навіщо додавати посередника? Це чудове питання. Для деяких застосунків ручне використання `deploy` є достатнім, але коли ваш процес випуску стає складнішим (наприклад, коли ви додаєте більше середовищ або автоматичне тестування), ви захочете передати нудну роботу з постійного оркестрування цього процесу сервісу. З двома сервісами, кожна з яких має два середовища (скажімо, тестове та промислове), запуск інтеграційних тестів після розгортання у вашому тестовому середовищі стає достатньо обтяжливим для ручного виконання. + +Використання автоматизованого інструменту випуску, такого як CodePipeline, допомагає зробити ваш процес випуску керованим. Навіть якщо ваш випуск не є особливо складним, знання того, що ви можете просто зробити `git push`, щоб розгорнути вашу зміну, завжди викликає трохи магії 🌈. + +## Структура конвеєра + +Copilot може налаштувати CodePipeline для вас за допомогою декількох команд — але перед тим, як перейти до цього, давайте трохи поговоримо про структуру конвеєра, який ми будемо генерувати. Наш конвеєр матиме наступну базову структуру: + +1. __Стадія коду__ — коли ви робите push до налаштованої гілки GitHub, Bitbucket або CodeCommit репозиторію, запускається нове виконання конвеєра. +2. __Стадія збірки__ — після того, як ваш вихідний код отримано з вашого хостингу репозиторію, контейнерний образ вашого сервісу збирається та публікується в ECR репозиторії кожного середовища, а будь-які вхідні файли, такі як шаблони [надбудов](../../developing/addons/workload/), zip-файли lambda функцій та [файли змінних середовища](../../developing/environment-variables/), завантажуються до S3. +3. __Стадії розгортання__ — після того, як ваш код зібрано, ви можете виконувати розгортання до будь-яких або всіх ваших середовищ, з опціональними ручними підтвердженнями, діями до та після розгортання та/або командами тестування. + +Після того, як ви налаштуєте CodePipeline за допомогою Copilot, все, що вам потрібно зробити, це робити push до вашого GitHub, Bitbucket або CodeCommit репозиторію, і CodePipeline буде оркеструвати розгортання. + +Хочете дізнатися більше про CodePipeline? Ознайомтеся з їхніми [документами початку роботи](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome-introducing.html). + +## Створення конвеєра в 3 кроки + +Створення конвеєра вимагає лише трьох кроків: + +1. Підготовка структури конвеєра. +2. Фіксація та push файлів, згенерованих у теці `copilot/`. +3. Створення фактичного CodePipeline. + +Виконайте три кроки нижче з кореня вашого робочого простору: + +```bash +copilot pipeline init +git add copilot/ && git commit -m "Adding pipeline artifacts" && git push +copilot pipeline deploy +``` + +!!! Note "Примітка" + Ви повинні ініціювати принаймні одну роботу (сервіс або завдання) перед запуском `pipeline deploy`, щоб ваш конвеєр мав що розгортати у ваших середовищах. + +✨ І у вас буде новий конвеєр, налаштований __у вашому обліковому записі застосунку__. Хочете зрозуміти трохи більше, що відбувається? Читайте далі! + +## Налаштування конвеєра, крок за кроком + +### Крок 1: Налаштування вашого конвеєра + +Конфігурації конвеєра створюються на рівні робочого простору. Якщо ваш робочий простір має один сервіс, то ваш конвеєр буде запускатися тільки для цього сервісу. Однак, якщо у вас є кілька сервісів у робочому просторі, то конвеєр буде збирати всі сервіси у робочому просторі. Щоб почати налаштування конвеєра, перейдіть `cd` у робочий простір вашого застосунку і запустіть: + +```sh +copilot pipeline init +``` + +Це не створить ваш конвеєр, але створить деякі локальні файли у `copilot/pipelines`, які будуть використовуватися при створенні вашого конвеєра. + +* __Назва конвеєра__: Ми пропонуємо назвати ваш конвеєр `[назва репозиторію]-[назва гілки]` (натисніть 'Enter', коли вас запитають, щоб прийняти стандартну назву). Це відрізнить його від інших ваших конвеєрів, якщо ви створите кілька, і добре працює, якщо ви дотримуєтеся робочого процесу один конвеєр на гілку. + +* __Тип конвеєра__: Ви можете вибрати або 'Workloads', або '[Environments](../../../blogs/release-v120/#continuous-delivery)'; це визначає, що ваш конвеєр розгортає при запуску. + +* __Порядок випуску__: Вам буде запропоновано вибрати середовища, до яких ви хочете розгортати або розгортати на основі порядку, в якому ви хочете, щоб вони були розгорнуті у вашому конвеєрі (розгортання відбувається по одному середовищу за раз). Наприклад, ви можете спочатку розгорнути застосунок до вашого `test` середовища, а потім до вашого `prod` середовища. + +* __Відстеження репозиторію__: Після того, як ви вибрали середовища, до яких хочете розгортати, вам буде запропоновано вибрати, який репозиторій ви хочете, щоб ваш CodePipeline відстежував. Це репозиторій, який, коли до нього відбувається push, запускає виконання конвеєра. (Якщо репозиторій, який вас цікавить, не показується, ви можете вказати його за допомогою прапорця `--url`.) + +* __Відстеження гілки__: Після того, як ви вибрали репозиторій, Copilot призначить вашу поточну локальну гілку як гілку, яку буде відстежувати ваш конвеєр. Це можна змінити на Кроці 2. + +### Крок 2: Оновлення маніфесту конвеєра (опціонально) + +Ваш сервіс має простий файл маніфесту, як і ваш конвеєр. Після запуску `pipeline init` створюються два файли: `manifest.yml` та `buildspec.yml`, обидва у новій теці `copilot/pipelines/[назва вашого конвеєра]`. Якщо ви заглянете всередину, ви побачите, що `manifest.yml` виглядає приблизно так (для сервісу з назвою "api-frontend" з двома середовищами, "test" та "prod"): + +```yaml +# Маніфест для конвеєра "demo-api-frontend-main". +# Цей YAML файл визначає ваш конвеєр: репозиторій джерела, який він відстежує, та порядок середовищ для розгортання. +# Для отримання додаткової інформації: https://aws.github.io/copilot-cli/docs/manifest/pipeline/ + +# Назва конвеєра. +name: demo-api-frontend-main + +# Версія схеми, що використовується в цьому шаблоні. +version: 1 + +# Цей розділ визначає ваше джерело, зміни в якому запускають ваш конвеєр. +source: + # Назва провайдера, який використовується для зберігання артефактів джерела. + # (тобто GitHub, Bitbucket, CodeCommit) + provider: GitHub + # Додаткові властивості, які додатково визначають розташування артефактів. + properties: + branch: main + repository: https://github.com/kohidave/demo-api-frontend + # Опціонально: вкажіть назву наявного зʼєднання CodeStar Connections. + # connection_name: a-connection + +# Цей розділ визначає порядок середовищ, до яких ваш конвеєр буде робити розгортання. +stages: + - # Назва середовища. + name: test + test_commands: + - make test + - echo "woo! Tests passed" + - # Назва середовища. + name: prod + # requires_approval: true +``` + +Ви можете побачити всі доступні параметри конфігурації для `manifest.yml` на сторінці [маніфесту конвеєра](../../manifest/pipeline/). + +Є 3 основні частини цього файлу: поле `name`, яке є назвою вашого конвеєра, розділ `source`, який детально описує репозиторій та гілку для відстеження, та розділ `stages`, який перераховує середовища, до яких ви хочете, щоб цей конвеєр розгортав. Ви можете оновлювати це в будь-який час, але ви повинні зробити commit та push змінених файлів та запустити `copilot pipeline deploy` після цього. + +Зазвичай ви будете оновлювати цей файл, щоб змінити, до яких середовищ розгортати робочі навантаження, вказати порядок розгортань, додати дії для виконання конвеєром до або після розгортання, або змінити гілку для відстеження. Ви також можете додати крок ручного підтвердження перед розгортанням або команди для запуску тестів (див. [Налаштування](#налаштування)). Якщо ви використовуєте CodeStar Connections для підключення до вашого репозиторію і хочете використовувати наявне зʼєднання, а не дозволити Copilot створити його для вас, ви можете додати назву зʼєднання тут. + +### Крок 3: Оновлення Buildspec (опціонально) + +Разом з `manifest.yml`, команда `pipeline init` також згенерувала файл `buildspec.yml` у теці `copilot/pipelines/[назва вашого конвеєра]`. Він містить інструкції для збирання та публікації вашого сервісу. Якщо ви хочете виконати будь-які додаткові команди, крім `docker build`, такі як юніт-тести або перевірки стилю, додайте їх до фази `build` у buildspec. + +Коли цей buildspec запускається, він завантажує версію Copilot, яка використовувалася, коли ви запускали `pipeline init`, щоб забезпечити зворотну сумісність. + +Альтернативно, ви можете використовувати свій власний buildspec для виконання CodeBuild. Вкажіть його розташування у [вашому файлі `manifest.yml`](../../manifest/pipeline/). + +```yaml +build: + buildspec: +``` + +### Крок 4: Додавання нових файлів до вашого репозиторію + +Тепер, коли ваші файли `manifest.yml`, `buildspec.yml` та `.workspace` створені, додайте їх до вашого репозиторію. Ці файли у вашій теці `copilot/` необхідні для успішного виконання стадії `build` вашого конвеєра. + +### Крок 5: Створення вашого конвеєра + +Ось найцікавіша частина! Запустіть: + +```sh +copilot pipeline deploy +``` + +Ця команда аналізує ваш `manifest.yml`, створює CodePipeline __у тому ж обліковому записі та регіоні, що і ваш застосунок__ і запускає виконання конвеєра. Увійдіть до консолі AWS, щоб спостерігати за вашим конвеєром, або запустіть `copilot pipeline status`, щоб перевірити його виконання. + +![Ваш завершений CodePipeline](https://user-images.githubusercontent.com/828419/71861318-c7083980-30aa-11ea-80bb-4bea25bf5d04.png) + +!!! info Інформація + Якщо ви вибрали репозиторій GitHub або Bitbucket, Copilot допоможе вам підʼєднатися до вашого вихідного коду за допомогою [CodeStar Connections](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html). Вам потрібно буде встановити застосунок автентифікації AWS на вашому сторонньому обліковому записі та оновити статус зʼєднання. Copilot та консоль управління AWS проведуть вас через ці кроки. + +### Крок 6: Управління версією Copilot для вашого конвеєра (опціонально) + +Після створення вашого конвеєра ви можете керувати версією Copilot, яка використовується вашим конвеєром, оновивши наступні рядки вашого `buildspec.yml` до останньої версії: + +```yaml +... + # Завантажте бінарний файл copilot для Linux. + - wget -q https://ecs-cli-v2-release.s3.amazonaws.com/copilot-linux-v1.16.0 + - mv ./copilot-linux-v1.16.0 ./copilot-linux +... +``` + +## Налаштування + +### Ручне підтвердження + +Щоб додати крок підтвердження, встановіть поле `require_approval` в 'true'. Жодні дії до розгортання не будуть виконуватися без ручного втручання через консоль CodePipeline. + +### Дії до та після розгортання + +Починаючи з [v1.30.0](../../../blogs/release-v130/), ви можете вставляти дії у ваш конвеєр до та/або після кожного розгортання робочого навантаження або середовища. Додайте ці дії міграції бази даних, тестування або інші дії прямо у ваш маніфест конвеєра. + +```yaml +stages: + - name: test + require_approval: true + pre_deployments: + db_migration: # Назва цієї дії. + buildspec: copilot/pipelines/demo-api-frontend-main/buildspecs/buildspec.yml # Шлях до buildspec. + deployments: # Опціонально, порядок розгортань. + orders: + warehouse: + frontend: + depends_on: [orders, warehouse] + post_deployments: + db_migration: + buildspec: copilot/pipelines/demo-api-frontend-main/buildspecs/post_buildspec.yml + integration: + buildspec: copilot/pipelines/demo-api-frontend-main/buildspecs/integ-buildspec.yml + depends_on: [db_migration] # Опціонально, порядок дій. +``` + +У полі `buildspec` маніфесту додайте шлях, відносно кореня вашого проєкту, до вашого [файлу buildspec](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html). +Змінні середовища Copilot `$COPILOT_APPLICATION_NAME` та `$COPILOT_ENVIRONMENT_NAME` доступні для використання у цих buildspec. + +Ви можете вказати порядок виконання дій, використовуючи підполе `depends_on`, так само як ви б вказали бажаний [порядок розгортань](#порядок). + +!!! info "Інформація" + Проєкти CodeBuild, згенеровані для дій до та після розгортання та тестових команд, розгортаються у тому ж регіоні, що і конвеєр та застосунок. Щоб отримати доступ до VPC середовища, яке розгортається, використовуйте команди Copilot у вашій дії до/після розгортання buildspec або безпосередньо у ваших тестових командах. + +### Порядок + +Поле `deployments` дозволяє вам вказати порядок розгортання робочих навантажень або середовищ (залежно від типу конвеєра). Якщо це не вказано, розгортання виконуються паралельно. (Див. [цей блог-пост](../../../blogs/release-v118/#controlling-order-of-deployments-in-a-pipeline) для отримання додаткової інформації.) + +### Тестування + +Якщо ваше тестування після розгортання вимагає лише кількох команд і не обовʼязково потребує налаштування окремого buildspec, використовуйте поле `test_commands`. + +!!! warning "Попередження" + Поля `post_deployments` та `test_commands` у стадії є взаємозаперечними. + +Дії до розгортання, після розгортання та тестові команди генерують проєкти CodeBuild з образом [aws/codebuild/amazonlinux2-x86_64-standard:5.0](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html), тому більшість команд з Amazon Linux 2 (включаючи `make`) доступні для використання. Ваші тести налаштовані для запуску всередині Docker контейнера? Проєкт тестових команд Copilot підтримує Docker, тому команди `docker build` також доступні. + +У наведеному нижче прикладі конвеєр виконає команду `make test` (у вашій теці вихідного коду) і тільки перенесе зміну до стадії prod, якщо ця команда завершиться успішно. + +```yaml +name: demo-api-frontend-main +version: 1 +source: + provider: GitHub + properties: + branch: main + repository: https://github.com/kohidave/demo-api-frontend + +stages: + - name: test + # Зміна буде розгорнута до стадії prod тільки якщо + # команди make test та echo завершаться успішно. + test_commands: + - make test + - echo "woo! Tests passed" + - name: prod +``` + +!!! info "Інформація" + Натан Пек з AWS надає чудовий приклад конвеєра Copilot, приділяючи особливу увагу `test_commands`: + +### Перевизначення конвеєра + +Якщо всі ці варіанти налаштувань все ще не дають вам бажаного конвеєра, ви можете скористатися рішенням Copilot в стилі «break the glass» («розбити скло»), [перевизначення конвеєра](../../../blogs/release-v129/#pipeline-overrides), з [CDK](../../developing/overrides/cdk/) або [YAML](../../developing/overrides/yamlpatch/) для зміни шаблону CloudFormation конвеєра. diff --git a/site/content/docs/concepts/services.uk.md b/site/content/docs/concepts/services.uk.md new file mode 100644 index 00000000000..f78e47ce1ad --- /dev/null +++ b/site/content/docs/concepts/services.uk.md @@ -0,0 +1,284 @@ +--- +title: "Сервіси" +--- + +# Сервіси + +Одна з чудових особливостей контейнерів полягає в тому, що коли ви написали свій код, запустити його локально так само просто, як набрати `docker run`. Copilot робить запуск тих самих контейнерів на AWS таким же простим, як введення `copilot init`. Copilot збере ваш образ, завантажить його в Amazon ECR і налаштує всю інфраструктуру для запуску вашого сервісу у масштабованому та безпечному режимі. + +## Створення Сервісу + +Створення сервісу для запуску ваших контейнерів на AWS можна здійснити кількома способами. Найпростіший спосіб — виконати команду `init` з теки з вашим Dockerfile. + +```console +copilot init +``` + +Вас запитають, до якого застосунку ви хочете додати цей сервіс (або запропонують створити застосунок, якщо його ще немає). Copilot потім запитає про __тип__ сервісу, який ви намагаєтеся створити. + +Після вибору типу сервісу, Copilot виявить будь-які перевірки справності або відкриті порти з вашого Dockerfile і запитає, чи хочете ви розгорнути. + +## Вибір типу Сервісу + +Ми вже згадували, що Copilot налаштує всю інфраструктуру, необхідну для запуску вашого сервісу. Але як він знає, який тип інфраструктури використовувати? + +Коли ви налаштовуєте сервіс, Copilot запитає вас про те, який тип сервісу ви хочете створити. + +### Інтернет-орієнтовані сервіси + +Якщо ви хочете, щоб ваш сервіс обслуговував публічний інтернет-трафік, у вас є три варіанти: + +* "Запит-орієнтований вебсервіс" створить сервіс AWS App Runner для запуску вашого сервісу. +* "Статичний сайт" створить спеціальний дистрибутив CloudFront та S3 кошик для вашого статичного вебсайту. +* "Вебсервіс з балансуванням навантаження" створить Application Load Balancer, Network Load Balancer або обидва, разом з групами безпеки, сервісом ECS на Fargate для запуску вашого сервісу. + +#### Запит-орієнтований вебсервіс + +Сервіс AWS App Runner, який автоматично масштабує ваші екземпляри на основі вхідного трафіку і зменшує до базової кількості екземплярів, коли немає трафіку. Цей варіант є більш економічно вигідним для HTTP сервісів з раптовими сплесками обсягів запитів або низькими обсягами запитів. + +На відміну від ECS, сервіси App Runner стандартно не підключені до VPC. Щоб маршрутизувати вихідний трафік через VPC, ви можете налаштувати поле [`network`](../../manifest/rd-web-service/#network) у маніфесті. + +#### Статичний сайт + +Статичний вебсайт, розміщений у S3, який обслуговується розподілом Amazon CloudFront. Copilot завантажує ваші статичні активи в новий S3 кошик, налаштований для розміщення статичного вебсайту. Кешування з [CloudFront Content Delivery Network (CDN)](../../developing/content-delivery/) оптимізує вартість і швидкість. З кожним повторним розгортанням попередній кеш анулюється. + +#### Вебсервіс з балансуванням навантаження + +Сервіс ECS, що запускає завдання на Fargate з Application Load Balancer, Network Load Balancer або обома як вхідними точками. Цей варіант підходить для HTTP або TCP сервісів зі стабільними обсягами запитів, які потребують доступу до ресурсів у VPC або вимагають розширеної конфігурації. + +Зверніть увагу, що керований Copilot Application Load Balancer є ресурсом на рівні середовища і використовується всіма вебсервісами з балансуванням навантаження в межах середовища. Починаючи з версії v1.32.0, у вас є можливість імпортувати наявний ALB на рівні сервісу, вказавши його у вашому [маніфесті робочого навантаження](../../manifest/lb-web-service/#http-alb). Щоб дізнатися більше, перейдіть [сюди](../environments/#load-balancers-and-dns). На відміну від цього, Network Load Balancer є ресурсом на рівні сервісу і тому не використовується спільно між сервісами. + +Нижче наведена діаграма для вебсервісу з балансуванням навантаження, який включає лише Application Load Balancer. + +![lb-web-service-infra](https://user-images.githubusercontent.com/879348/86045951-39762880-ba01-11ea-9a47-fc9278600154.png) + +### Сервіс бекенду + +Якщо ви хочете створити сервіс, який не може бути доступний зовні, а лише з інших сервісів у вашому застосунку, ви можете створити __Сервіс бекенду__. Copilot створить сервіс ECS, що працює на AWS Fargate, але не налаштує жодних інтернет-орієнтованих точок доступу. Балансування навантаження доступне для сервісів бекенду. Щоб дізнатися про створення внутрішніх балансувальників навантаження, перейдіть [сюди](../../developing/internal-albs/). + +![backend-service-infra](https://user-images.githubusercontent.com/879348/86046929-e8673400-ba02-11ea-8676-addd6042e517.png) + +### Сервіс робочих навантажень + +__Сервіси робочого навантаження__ дозволяють реалізувати асинхронну комунікацію між сервісами за допомогою [архітектур pub/sub](https://aws.amazon.com/pub-sub-messaging/). Мікросервіси у вашому застосунку можуть `публікувати` події до [топіків Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html), які потім можуть бути спожиті "Сервісом робочого навантаження". + +Сервіс робочого навантаження складається з: + +* Однієї або більше [черг Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) для обробки сповіщень, опублікованих у топіках, а також [черг для мертвих листів](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) для обробки збоїв. +* Сервісу Amazon ECS на AWS Fargate, який має дозвіл на опитування черг SQS і асинхронну обробку повідомлень. + +![worker-service-infra](https://user-images.githubusercontent.com/25392995/131420719-c48efae4-bb9d-410d-ac79-6fbcc64ead3d.png) + +## Конфігурація та Маніфест + +Після того, як ви виконали `copilot init`, ви могли помітити, що Copilot створив файл з назвою `manifest.yml` у теці `copilot/[назва сервісу]/`. Цей файл маніфесту містить загальні параметри конфігурації для вашого сервісу. Хоча точний набір параметрів залежить від типу сервісу, який ви запускаєте, загальні параметри включають ресурси, виділені для вашого сервісу (наприклад, памʼять і процесор), перевірки справності та змінні середовища. + +Розгляньмо маніфест для вебсервісу з балансуванням навантаження з назвою _front-end_. + +```yaml +name: front-end +type: Load Balanced Web Service + +image: + # Шлях до Dockerfile вашого сервісу. + build: ./Dockerfile + # Порт, відкритий у ваш контейнер для маршрутизації трафіку до нього. + port: 8080 + +http: + # Запити до цього шляху будуть перенаправлені до вашого сервісу. + # Щоб відповідати всім запитам, ви можете використовувати шлях "/". + path: '/' + # Ви можете вказати користувацький шлях перевірки справності. Стандартно "/" + # healthcheck: '/' + +# Кількість одиниць CPU для завдання. +cpu: 256 +# Кількість памʼяті в MiB, що використовується завданням. +memory: 512 +# Кількість завдань, які повинні працювати у вашому сервісі. +count: 1 + +# Необовʼязкові поля для більш складних випадків використання. +# +variables: # Передача змінних середовища у вигляді пар ключ-значення. + LOG_LEVEL: info + +#secrets: # Передача секретів з AWS Systems Manager (SSM) Parameter Store. +# GITHUB_TOKEN: GH_SECRET_TOKEN # Ключ - це назва змінної середовища, + # значення - це назва параметра SSM. + +# Ви можете перевизначити будь-яке з значень, визначених вище, для кожного середовища. +environments: + prod: + count: 2 # Кількість завдань для запуску в середовищі "prod". +``` + +Щоб дізнатися про специфікацію файлів маніфесту, дивіться сторінку [manifest](../../manifest/overview/). + +## Розгортання Сервісу + +Після того, як ви налаштували свій сервіс, ви можете розгорнути його (і будь-які зміни до вашого маніфесту) за допомогою команди розгортання: + +```console +copilot deploy +``` + +Виконання цієї команди: + +1. Збере ваш образ локально +2. Завантажить його в репозиторій ECR вашого сервісу +3. Перетворить ваш файл маніфесту в CloudFormation +4. Упакує будь-яку додаткову інфраструктуру в CloudFormation +5. Розгорне ваш оновлений сервіс і ресурси в CloudFormation + +Якщо у вас є кілька середовищ, вам буде запропоновано вибрати, до якого середовища ви хочете виконати розгортання. + +## Дослідження вашого Сервісу + +Тепер, коли ми запустили сервіс, ми можемо перевірити його за допомогою Copilot. Нижче наведено кілька поширених способів перевірки вашого розгорнутого сервісу. + +### Що у вашому сервісі? + +Виконання `copilot svc show` покаже вам опис вашого сервісу. Ось приклад виводу, який ви можете побачити для __Вебсервісу з балансуванням навантаження__. Цей вивід включає конфігурацію вашого сервісу для кожного середовища, будь-які налаштовані сигнали відкату, всі точки доступу вашого сервісу та змінні середовища і секрети, передані у ваш сервіс. Ви також можете надати необовʼязковий прапорець `--resources`, щоб побачити всі ресурси AWS, повʼязані з вашим сервісом. + +```console +$ copilot svc show +About + + Application my-app + Name front-end + Type Load Balanced Web Service + +Configurations + + Environment Tasks CPU (vCPU) Memory (MiB) Port + ----------- ----- ---------- ------------ ---- + test 1 0.25 512 80 + +Rollback Alarms + + Name Environment Description + ---- ----------- ----------- + my-app-test-front-end-CopilotRol test Roll back ECS service if CPU utilizat + lbackCPUAlarm ion is greater than or equal to 50% t + wice in 3 minutes. + +Routes + + Environment URL + ----------- --- + test http://my-ap-Publi-1RV8QEBNTEQCW-1762184596.ca-central-1.elb.amazonaws.com + +Internal Service Endpoints + + Endpoint Environment Type + -------- ----------- ---- + front-end:80 test Service Connect + front-end.test.my-app.local:8080 test Service Discovery + +Variables + + Name Container Environment Value + ---- --------- ----------- ----- + COPILOT_APPLICATION_NAME front-end test my-app + COPILOT_ENVIRONMENT_NAME " test test + COPILOT_LB_DNS " test my-ap-Publi-1RV8QEBNTEQCW-1762184596.ca-central-1.elb.amazonaws.com + COPILOT_SERVICE_DISCOVERY_ENDPOINT " test test.my-app.local + COPILOT_SERVICE_NAME " test front-end + +Secrets + + Name Container Environment Value + ---- --------- ----------- ----- + GITHUB_WEBHOOK_SECRET front-end test parameter/GH_WEBHOOK_SECRET +``` + +Вивід `copilot svc show` змінюється залежно від типу вашого сервісу. Наприклад, опис для __Статичного сайту__ включає дерево вмісту вашого S3 кошику. + +```console +% copilot svc show +Service name: static-site +About + + Application my-app + Name static-site + Type Static Site + +Routes + + Environment URL + ----------- --- + test https://d399t9j1xbplme.cloudfront.net/ + +S3 Bucket Objects + + Environment test +. +├── ReadMe.md +├── error.html +├── index.html +├── Images +│ ├── SomeImage.PNG +│ └── AnotherImage.PNG +├── css +│ ├── Style.css +│ ├── all.min.css +│ └── bootstrap.min.css +└── images + └── bg-masthead.jpg +``` + +### Який статус вашого сервісу? + +Часто корисно мати можливість перевірити статус вашого сервісу. Чи всі екземпляри мого сервісу справні? Чи є якісь сигнали тривоги? Для цього ви можете виконати `copilot svc status`, щоб отримати зведений статус вашого сервісу. + +```console +$ copilot svc status +Service: front-end +Task Summary + + Running ██████████ 1/1 desired tasks are running + Health ██████████ 1/1 passes HTTP health checks + ██████████ 1/1 passes container health checks + +Tasks + + ID Status Revision Started At Cont. Health HTTP Health + -- ------ -------- ---------- ------------ ----------- + 37236ed3 RUNNING 9 12 minutes ago HEALTHY HEALTHY + +Alarms + + Name Type Condition Last Updated Health + ---- ---- --------- ------------ ------ + TargetTracking-service/my-app- Auto Scaling CPUUtilization > 70.00 for 3 d 5 minutes ago OK + test-Cluster-0jTKWTNBKviF/my-a atapoints within 3 minutes + pp-test-front-end-Service-r5h6 + hMZVbWkz-AlarmHigh-f0f31c7b-74 + 61-415c-9dfd-81b983cbe0df + + TargetTracking-service/my-app- Auto Scaling CPUUtilization < 63.00 for 15 5 minutes ago ALARM + test-Cluster-0jTKWTNBKviF/my-a datapoints within 15 minutes + pp-test-front-end-Service-r5h6 + hMZVbWkz-AlarmLow-698f9f17-6c0 + c-4db1-8f1d-e23de97f5459 +``` + + Так само як і з `copilot svc show`, вивід `copilot svc status` змінюється залежно від типу сервісу. Наприклад, вивід для __Запит-орієнтованого вебсервісу__ включає системні журнали, а вивід для __Статичного сайту__ включає кількість обʼєктів у кошику S3 та їх розмір. + +### Де знаходяться журнали мого сервісу? + +Перевірка журналів вашого сервісу також проста. Виконання `copilot svc logs` покаже вам найновіші журнали вашого сервісу. Ви можете слідкувати за журналами в режимі реального часу за допомогою прапорця `--follow`. + +```console +$ copilot svc logs +37236ed 10.0.0.30 🚑 Health-check ok! +37236ed 10.0.0.30 🚑 Health-check ok! +37236ed 10.0.0.30 🚑 Health-check ok! +37236ed 10.0.0.30 🚑 Health-check ok! +37236ed 10.0.0.30 🚑 Health-check ok! +``` + +!!! info "Інформація" + Журнали недоступні для сервісів Статичного сайту. diff --git a/site/content/docs/credentials.uk.md b/site/content/docs/credentials.uk.md new file mode 100644 index 00000000000..f3146cb8f35 --- /dev/null +++ b/site/content/docs/credentials.uk.md @@ -0,0 +1,69 @@ +--- +title: Облікові дані +--- + +# Облікові дані + +AWS Copilot використовує облікові дані AWS для доступу до AWS API, зберігання та пошуку [метаданих застосунку](../concepts/applications/), розгортання та керування робочими навантаженнями застосунку. + +Ви можете дізнатися більше про налаштування облікових даних AWS у [документації AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html). + +## Облікові дані застосунку + +Copilot використовує облікові дані AWS зі [стандартного ланцюжка постачальника облікових даних](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials) для зберігання та пошуку [метаданих вашого застосунку](../concepts/applications/): які сервіси та середовища до нього належать. + +!!! tip "Рекомендація" + Ми **рекомендуємо використовувати [іменований профіль](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)** для зберігання облікових даних вашого застосунку. + +Найзручніший спосіб — налаштувати профіль `[default]` з обліковими даними вашого застосунку: + +```ini +# ~/.aws/credentials +[default] +aws_access_key_id=AKIAIOSFODNN7EXAMPLE +aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + +# ~/.aws/config +[default] +region=us-west-2 +``` + +Альтернативно, ви можете встановити змінну середовища `AWS_PROFILE`, щоб вказати інший іменований профіль. Наприклад, ми можемо мати профіль `[my-app]`, який можна використовувати для вашого застосунку Copilot замість профілю `[default]`. + +!!! note "Примітка" + Ви **не можете** використовувати облікові дані кореневого користувача AWS для вашого застосунку. Будь ласка, спочатку створіть користувача IAM, як описано [тут](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html). + +```ini +# ~/.aws/config +[profile my-app] +credential_process = /opt/bin/awscreds-custom --username helen +region=us-west-2 + +# Потім ви можете виконувати команди Copilot, використовуючи альтернативний профіль: +$ export AWS_PROFILE=my-app +$ copilot deploy +``` + +!!! caution "Увага" + Ми **не рекомендуємо** використовувати змінні середовища: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN` безпосередньо для пошуку метаданих вашого застосунку, оскільки якщо вони будуть перевизначені або закінчаться, Copilot не зможе знайти ваші сервіси або середовища. + +Щоб дізнатися більше про всі підтримувані налаштування файлу `config`: [Налаштування файлів конфігурації та облікових даних](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-settings). + +## Облікові дані середовища + +[Облікові дані середовища](../concepts/environments/) Copilot можуть бути створені в облікових записах AWS та регіонах, відмінних від вашого застосунку. Під час ініціалізації середовища Copilot запропонує вам ввести тимчасові облікові дані або [іменований профіль](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) для створення вашого середовища: + +```bash +$ copilot env init + +Name: prod-iad + + Which credentials would you like to use to create prod-iad? + > Enter temporary credentials + > [profile default] + > [profile test] + > [profile prod-iad] + > [profile prod-pdx] +``` + +На відміну від [Облікових даних застосунку](#облікові-дані-застосунку), облікові дані AWS для середовища потрібні лише для створення або видалення. Тому безпечно використовувати значення з тимчасових змінних середовища. Copilot запитує або приймає облікові дані як прапорці, оскільки стандартний ланцюжок зарезервований для облікових даних вашого застосунку. diff --git a/site/content/docs/developing/addons/environment.uk.md b/site/content/docs/developing/addons/environment.uk.md new file mode 100644 index 00000000000..4542fbab03b --- /dev/null +++ b/site/content/docs/developing/addons/environment.uk.md @@ -0,0 +1,259 @@ +--- +title: Додаткові ресурси середовища +--- + +# Mоделювання додаткових ресурсів середовища за допомогою AWS CloudFormation + +Додаткові ресурси AWS, які називаються "addons" в CLI, — це будь-які додаткові сервіси AWS, які стандартно не інтегровані в [маніфест сервісу чи середовища](../../../manifest/overview/). +Наприклад, addon може бути таблицею DynamoDB, кошиком S3 або кластером RDS Aurora Serverless, до якого ваш сервіс повинен мати доступ для читання чи запису. + +Ви можете визначити додаткові ресурси для робочого навантаження (такого як [Load Balanced Web Service](../../../manifest/lb-web-service/) або [Scheduled Job](../../../manifest/scheduled-job/)). Життєвим циклом надбудов робочого навантаження буде керувати саме робоче навантаження, і вони будуть видалені після видалення робочого навантаження. + +Крім того, ви можете визначити додаткові спільні ресурси для середовища. Надбудови середовища не будуть видалені, доки не буде видалено саме середовище. + +Ця сторінка описує, як створювати надбудови на рівні середовища. Для надбудов на рівні робочого навантаження відвідайте [Моделювання додаткових ресурсів робочого навантаження з AWS CloudFormation](../workload/). + +## Як додати кошик S3, таблицю DDB або кластер Aurora Serverless? + +Copilot надає наступні команди, щоб допомогти вам створити певні види надбудов: + +* [`storage init`](../../../commands/storage-init/) створить таблицю DynamoDB, кошик S3 або кластер Aurora Serverless. + +Ви можете запустити `copilot storage init` з вашого робочого простору, і вам будуть поставлені питання, які допоможуть налаштувати ці ресурси. + +## Як додати інші ресурси? + +Для інших типів надбудов ви можете додати власні шаблони CloudFormation: + +1. Ви можете зберігати власні шаблони у вашому робочому просторі в теці `copilot/environments/addons`. +2. Під час запуску `copilot env deploy`, власні шаблони addons будуть розгорнуті разом з вашим стеком середовища. + +???- note "Приклад структури робочого простору з надбудовами середовища" + ```term + . + └── copilot + └── environments + ├── addons # Зберігайте надбудови середовища. + │ └── mys3.yaml + ├── dev + └── prod + ``` + +## Як виглядає шаблон надбудови? + +Шаблон надбудови середовища може бути [будь-яким дійсним шаблоном CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html), який задовольняє наступні вимоги: + +* Включає принаймні один [`Resource`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html). +* Розділ `Parameters` включає `App`, `Env`. + +ви можете налаштувати властивості ваших ресурсів за допомогою [Conditions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) або [Mappings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html). + +!!! info "" + Ми рекомендуємо дотримуватися [найкращих практик Amazon IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) під час визначення політик AWS Managed для додаткових ресурсів, включаючи: + + * [Надавайте мінімальні привілеї](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) для політик, визначених у вашій теці `addons/`. + * [Використовуйте умови політики для додаткової безпеки](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-policy-conditions) для обмеження доступу ваших політик лише до ресурсів, визначених у вашій теці `addons/`. + + +### Створення розділу `Parameters` + +Є кілька параметрів, які Copilot вимагає визначити у ваших шаблонах. + +!!! info "" + ```yaml + Parameters: + App: + Type: String + Env: + Type: String + ``` + + +#### Налаштування розділу `Parameters` + +Якщо ви хочете визначити параметри, крім тих, які вимагає Copilot, ви можете зробити це за допомогою файлу +`addons.parameters.yml`. + +```term +. +└── addons/ + ├── template.yml + └── addons.parameters.yml # Додайте цей файл у вашу теку addons/. +``` + +1. У вашому файлі шаблону додайте додаткові параметри в розділ `Parameters`. +2. У вашому `addons.parameters.yml` визначте значення цих додаткових параметрів. Вони можуть посилатися на значення з вашого стеку середовища. + +???- note "Приклади: Налаштування параметрів надбудови" + ```yaml + # У "environments/addons/my-addon.yml" + Parameters: + # Параметри, які вимагає AWS Copilot. + App: + Type: String + Env: + Type: String + # Додаткові параметри, визначені в addons.parameters.yml + ClusterName: + Type: String + ``` + ```yaml + # В "environments/addons/addons.parameters.yml" + Parameters: + ClusterName: !Ref Cluster + ``` + +### Створення розділів `Conditions` та `Mappings` + +Як правило ви захочете налаштувати ресурси вашої надбудови залежно від певних умов. Наприклад, ви можете умовно налаштувати ємність вашого ресурсу DB залежно від того, чи розгортається він в промисловому, чи тестовому середовищі. Для цього ви можете використовувати розділи `Conditions` та `Mappings`. + +???- note "Приклади: Умовне налаштування надбудов" + === "Використання `Mappings`" + ```yaml + Mappings: + MyAuroraServerlessEnvScalingConfigurationMap: + dev: + "DBMinCapacity": 0.5 + "DBMaxCapacity": 8 + test: + "DBMinCapacity": 1 + "DBMaxCapacity": 32 + prod: + "DBMinCapacity": 1 + "DBMaxCapacity": 64 + Resources: + MyCluster: + Type: AWS::RDS::DBCluster + Properties: + ScalingConfiguration: + MinCapacity: !FindInMap + - MyAuroraServerlessEnvScalingConfigurationMap + - !Ref Env + - DBMinCapacity + MaxCapacity: !FindInMap + - MyAuroraServerlessEnvScalingConfigurationMap + - !Ref Env + - DBMaxCapacity + ``` + + === "Використання `Conditions`" + ```yaml + Conditions: + IsProd: !Equals [!Ref Env, "prod"] + + Resources: + MyCluster: + Type: AWS::RDS::DBCluster + Properties: + ScalingConfiguration: + MinCapacity: !If [IsProd, 1, 0.5] + MaxCapacity: !If [IsProd, 8, 64] + ``` + +### Створення розділу [`Outputs`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) + +Ви можете використовувати розділ `Outputs` для визначення будь-яких значень, які можуть бути використані іншими ресурсами; наприклад, сервісом, стеком CloudFormation тощо. + +#### Надбудова середовища: Підключення до ваших робочих навантажень + +Значення з надбудови середовища може бути використане надбудовою робочого навантаження або маніфестом робочого навантаження. +Для цього спочатку потрібно експортувати значення з надбудови середовища за допомогою розділу `Outputs`. + +???+ note "Приклад: Експорт значень з надбудов середовища" + ```yaml + Outputs: + MyTableARN: + Value: !GetAtt ServiceTable.Arn + Export: + Name: !Sub ${App}-${Env}-MyTableARN # Це значення може бути використане маніфестом робочого навантаження або addon-ом робочого навантаження. + MyTableName: + Value: !Ref ServiceTable + Export: + Name: !Sub ${App}-${Env}-MyTableName + ``` + +Важливо додати блок `Export`. Інакше ваш стек робочого навантаження або ваші надбудови робочого навантаження не зможуть отримати доступ до значення. Ви будете використовувати `Export.Name` для посилання на значення з ваших ресурсів на рівні робочого навантаження. + +???- hint "Розгляньте: Просторове іменування вашого `Export.Name`" + Ви можете вказати будь-яке імʼя для `Export.Name`. + Тобто, воно не обовʼязково повинно бути з префіксом `!Sub ${App}-${Env}`; воно може бути просто `MyTableName`. + + Однак, в межах одного регіону AWS, `Export.Name` повинен бути унікальним. Тобто, ви не можете мати два експорти з імʼям `MyTableName` в `us-east-1`. + + Тому ми рекомендуємо вам використовувати просторове іменування ваших експортів з `${App}` та `${Env}`, щоб зменшити ймовірність зіткнення імен. Крім того, це робить зрозумілим, яким застосунком та середовищем керується значення. + + З просторовим іменуванням, наприклад, якщо імʼя вашого застосунку `"my-app"`, і ви розгорнули надбудови в середовищі `test`, то кінцеве імʼя експорту буде `my-app-test-MyTableName`. + + +##### Посилання з надбудови робочого навантаження + +У ваших надбудовах робочого навантаження ви можете посилатися на значення з ваших надбудов середовища, якщо це значення експортоване. Для цього використовуйте функцію [`Fn::ImportValue`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) з імʼям експорту цього значення, щоб імпортувати його з надбудови середовища. + +???- note "Приклад: Політика IAM для доступу до таблиці DynamoDB на рівні середовища" + ```yaml + Parameters: + App: + Type: String + Description: Імʼя вашого застосунку. + Env: + Type: String + Description: Імʼя середовища, до якого розгортається ваш сервіс, завдання або робочий процес. + Name: + Type: String + Description: Імʼя вашого робочого навантаження. + Resources: + MyTableAccessPolicy: + Type: AWS::IAM::ManagedPolicy + Properties: + Description: Надає доступ CRUD до таблиці Dynamo DB + PolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: DDBActions + Effect: Allow + Action: + - dynamodb:* # ПРИМІТКА: Зменшіть дозволи у вашому реальному застосунку. Це зроблено, щоб цей приклад не був занадто довгим! + Resource: + Fn::ImportValue: # <- Ми імпортуємо ARN таблиці з надбудов середовища. + !Sub ${App}-${Env}-MyTableARN # <- Імʼя експорту, яке ми використовували. + ``` + +##### Посилання з маніфесту робочого навантаження + +Ви також можете посилатися на значення з ваших надбудов середовища у маніфесті робочого навантаження для +[`variables`](../../../manifest/lb-web-service/#variables-from-cfn), [`secrets`](../../../manifest/lb-web-service/#secrets-from-cfn) та [`security_groups`](../../../manifest/lb-web-service/#network-vpc-security-groups-from-cfn), якщо це значення експортоване. Для цього використовуйте поля `from_cfn` у маніфестах робочого навантаження з імʼям експорту цього значення. + +???- note "Приклади: використання `from_cfn`" + === "Вставка змінної середовища" + ```yaml + name: db-front + type: Backend Service + variables: + MY_TABLE_NAME: + from_cfn: ${COPILOT_APPLICATION_NAME}-${COPILOT_ENVIRONMENT_NAME}-MyTableName + ``` + + === "Вставка секрету" + ```yaml + name: db-front + type: Backend Service + + secrets: + MY_CLUSTER_CREDS: + from_cfn: ${COPILOT_APPLICATION_NAME}-${COPILOT_ENVIRONMENT_NAME}-MyClusterSecret + ``` + + === "Приєднання групи безпеки" + ```yaml + name: db-front + type: Backend Service + + security_groups: + - from_cfn: ${COPILOT_APPLICATION_NAME}-${COPILOT_ENVIRONMENT_NAME}-MyClusterAllowedSecurityGroup + ``` + +## Приклади + +### Покрокова інструкція з надбудовами середовища + +Дивіться наш [блог пост v1.25.0](../../../../blogs/release-v125/#environment-addons) для детальної покрокової інструкції! diff --git a/site/content/docs/developing/addons/package.uk.md b/site/content/docs/developing/addons/package.uk.md new file mode 100644 index 00000000000..1cc92bfa057 --- /dev/null +++ b/site/content/docs/developing/addons/package.uk.md @@ -0,0 +1,144 @@ +--- +title: Надсилання локальних артефактів +--- + +# Надсилання локальних артефактів додано в [v1.21.0](../../../../blogs/release-v121/) + +Copilot підтримує завантаження локальних файлів, на які посилаються ваші шаблони надбудов, до S3, і заміну відповідних властивостей ресурсів на завантажене розташування S3. +При виконанні [`copilot svc deploy`](../../../commands/svc-deploy/) або [`copilot svc package --upload-assets`](../../../commands/svc-package/), певні поля підтримуваних ресурсів будуть оновлені з розташуванням S3 перед тим, як шаблон надбудов буде надісланий до CloudFormation. Ваші шаблони на диску не будуть змінені. Щоб побачити повний список підтримуваних ресурсів, перегляньте [документацію AWS CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/package.html). + +Ця функція може використовуватися для розгортання локальних функцій Lambda, що зберігаються в тому ж репозиторії, що й інший сервіс Copilot. Наприклад, щоб розгорнути JavaScript функцію Lambda разом із сервісом copilot, ви можете додати цей ресурс до вашого [шаблону надбудови](../workload/): + +???+ note "Приклад функції Lambda" + === "copilot/service-name/addons/lambda.yml" + + ```yaml hl_lines="4" + ExampleFunction: + Type: AWS::Lambda::Function + Properties: + Code: lambdas/example/ + Handler: "index.handler" + Timeout: 900 + MemorySize: 512 + Role: !GetAtt "ExampleFunctionRole.Arn" + Runtime: nodejs20.x + ``` + + === "lambdas/example/index.js" + + ```js + exports.handler = function (event, context) { + console.log('приклад події:', event); + context.succeed('успіх!'); + }; + ``` + +При виконанні `copilot svc deploy`, тека `lambdas/example` буде заархівована та надіслана до S3, а властивість `Code` буде оновлена до: + +```yaml +Code: + S3Bucket: copilotBucket + S3Key: hashOfLambdasExampleZip +``` + +перед тим, як шаблон надбудови буде завантажений та розгорнутий Copilot. Якщо ви вказуєте файл, файл буде безпосередньо завантажений до S3. Якщо ви вказуєте теку, тека буде заархівована перед завантаженням до S3. +Для деяких ресурсів, які вимагають архіву (наприклад, `AWS::Serverless::Function`), файл також буде заархівований перед завантаженням. + +Шляхи до файлів вважаються відносними до батьківської теки `copilot/` у вашому репозиторії. Для наведеного вище прикладу структура тек виглядатиме так: + +```bash +. +├── copilot +│ └── example-service +│ ├── addons +│ │ └── lambda.yml +│ └── manifest.yml +└── lambdas + └── example + └── index.js +``` + +Абсолютні шляхи також підтримуються, хоча вони можуть не працювати так добре на різних машинах. + +## Приклад: Обробка потоків DynamoDB Lambda + +Цей приклад покаже створення таблиці [Amazon Dynamo DB](https://aws.amazon.com/dynamodb/) з підключеною функцією lambda для обробки подій з [потоку таблиці](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html). Ця архітектура може бути корисною, якщо у вас є сервіс, який потребує мінімізації затримки при зберіганні даних, але може запустити окремий процес, який займає більше часу для обробки даних. + +#### Передумови + +- [Розгорнутий сервіс copilot](../../../concepts/services/) + +#### Кроки + +1. Згенеруйте надбудову таблиці DynamoDB для вашого сервісу, виконавши `copilot storage init` (Більше інформації [тут!](../../storage/)) +2. Додайте властивість [`StreamSpecification`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-streamspecification) до згенерованого ресурсу [`AWS::DynamoDB::Table`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html): + ```yaml title="copilot/service-name/addons/ddb.yml" + StreamSpecification: + StreamViewType: NEW_AND_OLD_IMAGES + ``` +3. Додайте функцію Lambda, роль IAM та ресурс для показу потоків подій Lambda, переконавшись, що ви надали доступ до потоку таблиці DynamoDB у ролі IAM: + ```yaml title="copilot/service-name/addons/ddb.yml" hl_lines="4 37 43" + recordProcessor: + Type: AWS::Lambda::Function + Properties: + Code: lambdas/record-processor/ # локальний шлях до lambda для обробки записів + Handler: "index.handler" + Timeout: 60 + MemorySize: 512 + Role: !GetAtt "recordProcessorRole.Arn" + Runtime: nodejs20.x + + recordProcessorRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: 2012-10-17 + Statement: + - Effect: Allow + Principal: + Service: + - lambda.amazonaws.com + Action: + - sts:AssumeRole + Path: / + ManagedPolicyArns: + - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole + Policies: + - PolicyDocument: + Version: 2012-10-17 + Statement: + - Effect: Allow + Action: + - dynamodb:DescribeStream + - dynamodb:GetRecords + - dynamodb:GetShardIterator + - dynamodb:ListStreams + # замініть на імʼя згенерованої таблиці + Resource: !Sub ${
.Arn}/stream/* + + tableStreamMappingToRecordProcessor: + Type: AWS::Lambda::EventSourceMapping + Properties: + FunctionName: !Ref recordProcessor + EventSourceArn: !GetAtt
.StreamArn # замініть
тут також + BatchSize: 1 + StartingPosition: LATEST + ``` +4. Створіть вашу функцію lambda: + ```js title="lambdas/record-processor/index.js" + "use strict"; + const { unmarshall } = require('@aws-sdk/util-dynamodb'); + + exports.handler = async function (event, context) { + for (const record of event?.Records) { + if (record?.eventName != "INSERT") { + continue; + } + + // обробка нових записів + const item = unmarshall(record?.dynamodb?.NewImage); + console.log("обробка елемента", item); + } + }; + ``` +5. Виконайте `copilot svc deploy`, щоб розгорнути вашу функцію lambda!🎉 Як тільки ваш сервіс додасть записи до таблиці, функція lambda буде викликана і зможе обробляти нові записи. diff --git a/site/content/docs/developing/addons/workload.uk.md b/site/content/docs/developing/addons/workload.uk.md new file mode 100644 index 00000000000..0812c0be637 --- /dev/null +++ b/site/content/docs/developing/addons/workload.uk.md @@ -0,0 +1,230 @@ +--- +title: Додаткові ресурси робочого навантаження +--- + +# Моделювання додаткових ресурсів робочого навантаження за допомогою AWS CloudFormation + +Додаткові ресурси AWS, які називаються "addons" в CLI, — це будь-які додаткові сервіси AWS, які [маніфест сервісу або середовища](../../../manifest/overview/) стандартно не інтегрує. Наприклад, надбудовою може бути таблиця DynamoDB, S3 кошик, або кластер RDS Aurora Serverless, до якого ваш сервіс повинен мати доступ для читання або запису. + +Ви можете визначити додаткові ресурси для робочого навантаження (такого як [Load Balanced Web Service](../../../manifest/lb-web-service/) або [Scheduled Job](../../../manifest/scheduled-job/)). Життєвий цикл надбудов робочого навантаження буде керуватися робочим навантаженням і буде видалений після видалення робочого навантаження. + +Альтернативно, ви можете визначити додаткові спільні ресурси для середовища. Надбудови середовища не будуть видалені, доки не буде видалено саме середовище. + +Ця сторінка документує, як створювати надбудови на рівні робочого навантаження. Для надбудов на рівні середовища відвідайте [Моделювання додаткових ресурсів середовища з AWS CloudFormation](../environment/). + +## Як додати S3 кошик, таблицю DDB або кластер Aurora Serverless? + +Copilot надає наступні команди для допомоги у створенні певних типів надбудов: + +* [`storage init`](../../../commands/storage-init/) створить таблицю DynamoDB, S3 кошик або кластер Aurora Serverless. + +Ви можете запустити `copilot storage init` з вашого робочого простору, і вам будуть поставлені питання, які допоможуть налаштувати ці ресурси. + +## Як додати інші ресурси? + +Для інших типів надбудов ви можете додати власні шаблони CloudFormation: + +1. Ви можете зберігати власні шаблони у вашому робочому просторі в теці `copilot//addons`. +2. При запуску `copilot [svc/job] deploy`, власний шаблон надбудов буде розгорнуто разом зі стеком вашого робочого навантаження. + +???- note "Приклад структури робочого простору з надбудовами робочого навантаження" + ```term + . + └── copilot + └── webhook + ├── addons # Зберігає надбудови, повʼязані з сервісом "webhook". + │ └── mytable-ddb.yaml + └── manifest.yaml + ``` + +## Як виглядає шаблон надбудови? + +Шаблон надбудови робочого навантаження може бути [будь-яким вірним шаблоном CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html), який відповідає наступним вимогам: + +* Включає принаймні один [`Resource`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html). +* Секція [`Parameters`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) повинна включати `App`, `Env`, `Name`. + +Ви можете налаштувати властивості ваших ресурсів за допомогою [Conditions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) або [Mappings](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html). + +!!! info "" + Ми рекомендуємо дотримуватись [найкращих практик Amazon IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) при визначенні AWS Managed Policies для додаткових ресурсів, включаючи: + + * [Надавання мінімальних привілеїв](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) для політик, визначених у вашій теці `addons/`. + * [Використання умов політик для додаткової безпеки](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-policy-conditions) щоб обмежити ваші політики доступом тільки до ресурсів, визначених у вашій теці `addons/`. + +### Створення секції `Parameters` + +Є кілька параметрів, які Copilot вимагає визначити у ваших шаблонах. + +!!! info "" + ```yaml + Parameters: + App: + Type: String + Env: + Type: String + Name: + Type: String + ``` + +#### Налаштування секції `Parameters` + +Якщо ви хочете визначити параметри, додаткові до тих, які вимагає Copilot, ви можете зробити це за допомогою файлу `addons.parameters.yml`. + +```term +. +└── addons/ + ├── template.yml + └── addons.parameters.yml # Додайте цей файл у вашу теку addons/. +``` + +1. У вашому файлі шаблону додайте додаткові параметри у секцію `Parameters`. +2. У вашому `addons.parameters.yml` визначте значення цих додаткових параметрів. Вони можуть посилатися на значення з вашого стека робочого навантаження. + +???- note "Приклади: Налаштування параметрів надбудови" + ```yaml + # У "webhook/addons/my-addon.yml" + Parameters: + # Параметри, які вимагає AWS Copilot. + App: + Type: String + Env: + Type: String + Name: + Type: String + # Додаткові параметри, визначені у addons.parameters.yml + ServiceName: + Type: String + ``` + ```yaml + # У "webhook/addons/addons.parameters.yml" + Parameters: + ServiceName: !GetAtt Service.Name + ``` + +### Створення секцій `Conditions` та `Mappings` + +Зазвичай, ви захочете налаштувати ресурси вашої надбудови по-різному залежно від певних умов. Наприклад, ви можете умовно налаштувати ємність вашого ресурсу БД залежно від того, чи розгортається він у промисловому або тестовому середовищі. Для цього ви можете використовувати секції `Conditions` та `Mappings`. + +???- note "Приклади: Умовне налаштування надбудов" + === "Використання `Mappings`" + ```yaml + Mappings: + MyAuroraServerlessEnvScalingConfigurationMap: + dev: + "DBMinCapacity": 0.5 + "DBMaxCapacity": 8 + test: + "DBMinCapacity": 1 + "DBMaxCapacity": 32 + prod: + "DBMinCapacity": 1 + "DBMaxCapacity": 64 + Resources: + MyCluster: + Type: AWS::RDS::DBCluster + Properties: + ScalingConfiguration: + MinCapacity: !FindInMap + - MyAuroraServerlessEnvScalingConfigurationMap + - !Ref Env + - DBMinCapacity + MaxCapacity: !FindInMap + - MyAuroraServerlessEnvScalingConfigurationMap + - !Ref Env + - DBMaxCapacity + ``` + + === "Використання `Conditions`" + ```yaml + Conditions: + IsProd: !Equals [!Ref Env, "prod"] + + Resources: + MyCluster: + Type: AWS::RDS::DBCluster + Properties: + ScalingConfiguration: + MinCapacity: !If [IsProd, 1, 0.5] + MaxCapacity: !If [IsProd, 8, 64] + ``` + +### Створення секції [`Outputs`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) + +Ви можете використовувати секцію `Outputs` для визначення будь-яких значень, які можуть бути використані іншими ресурсами; наприклад, сервісом, стеком CloudFormation тощо. + +#### Додатки робочого навантаження: Підключення до ваших робочих навантажень + +Ось кілька можливих способів доступу до [`Resources`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html) надбудов з вашого завдання ECS або екземпляра App Runner: + +* Якщо вам потрібно додати додаткові політики до ролі завдання ECS або ролі екземпляра App Runner, ви можете визначити ресурс [IAM ManagedPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html) надбудови у вашому шаблоні, який містить додаткові дозволи, а потім [вивести](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) його. Дозвіл буде додано до вашої ролі завдання або екземпляра. +* Якщо вам потрібно додати групу безпеки до вашого сервісу ECS, ви можете визначити [Групу Безпеки](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html) у вашому шаблоні, а потім додати її як [Output](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html). Група безпеки буде автоматично приєднана до вашого сервісу ECS. +* Якщо ви хочете додати секрет до вашого завдання ECS, ви можете визначити [Секрет](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-secretsmanager-secret.html) у вашому шаблоні, а потім додати його як [Output](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html). Секрет буде додано до вашого контейнера і може бути доступний як змінна середовища у верхньому регістрі SNAKE_CASE. +* Якщо ви хочете додати будь-яке значення ресурсу як змінну середовища, ви можете створити [Output](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) для ваших завдань ECS. Воно буде додано до вашого контейнера і може бути доступне як змінна середовища у верхньому регістрі SNAKE_CASE. + +## Приклади + +### Шаблон надбудови робочого навантаження для таблиці DynamoDB + +Ось приклад шаблону для надбудови таблиці DynamoDB на рівні робочого навантаження: + +```yaml +# Ви можете використовувати будь-який з цих параметрів для створення умов або map у вашому шаблоні. +Parameters: + App: + Type: String + Description: Тут назва вашої надбудови. + Env: + Type: String + Description: Назва середовища, до якого розгортається ваш сервіс, завдання або робочий процес. + Name: + Type: String + Description: Назва вашого робочого навантаження. + +Resources: + # Створіть ваш ресурс тут, наприклад, AWS::DynamoDB::Table: + # MyTable: + # Type: AWS::DynamoDB::Table + # Properties: + # ... + + # 1. На додаток до вашого ресурсу, якщо вам потрібно отримати доступ до ресурсу з вашого завдання ECS + # тоді вам потрібно створити AWS::IAM::ManagedPolicy, який містить дозволи для вашого ресурсу. + # + # Наприклад, нижче наведено приклад політики для MyTable: + MyTableAccessPolicy: + Type: AWS::IAM::ManagedPolicy + Properties: + PolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: DDBActions + Effect: Allow + Action: + - dynamodb:BatchGet* + - dynamodb:DescribeStream + - dynamodb:DescribeTable + - dynamodb:Get* + - dynamodb:Query + - dynamodb:Scan + - dynamodb:BatchWrite* + - dynamodb:Create* + - dynamodb:Delete* + - dynamodb:Update* + - dynamodb:PutItem + Resource: !Sub ${ MyTable.Arn} + +Outputs: + # 1. Вам потрібно вивести IAM ManagedPolicy, щоб Copilot міг додати його як керовану політику до вашої ролі завдання ECS. + MyTableAccessPolicyArn: + Description: "ARN ManagedPolicy для приєднання до ролі завдання." + Value: !Ref MyTableAccessPolicy + + # 2. Якщо ви хочете додати властивість вашого ресурсу як змінну середовища до вашого завдання ECS, + # тоді вам потрібно визначити вивід для цього. + # + # Наприклад, вивід MyTableName буде додано у верхньому регістрі зміїного регістру, MY_TABLE_NAME, до вашого завдання. + MyTableName: + Description: "Назва цієї таблиці DynamoDB." + Value: !Ref MyTable +``` diff --git a/site/content/docs/developing/content-delivery.uk.md b/site/content/docs/developing/content-delivery.uk.md new file mode 100644 index 00000000000..c3062fb0350 --- /dev/null +++ b/site/content/docs/developing/content-delivery.uk.md @@ -0,0 +1,125 @@ +--- +title: Доставка контенту +--- + +# Глобальна доставка контенту + +Copilot підтримує Мережу доставки контенту через Amazon CloudFront. Цей ресурс керується Copilot на рівні середовища, дозволяючи користувачам використовувати CloudFront через [маніфест середовища](../../manifest/environment/). + +## Інфраструктура CloudFront з Copilot + +Коли Copilot створює [дистрибутив CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-overview.html), він створює дистрибутив як нову точку входу до застосунку замість Application Load Balancer. Це дозволяє CloudFront швидше направляти ваш трафік до балансувальника навантаження через граничні локації, розгорнуті по всьому світу. + +## Як використовувати CloudFront з наявним застосунком? + +Починаючи з версії Copilot v1.20, `copilot env init` створює файл маніфесту середовища. У цьому маніфесті ви можете вказати значення `cdn: true` і потім виконати `copilot env deploy` для активації базового дистрибутиву CloudFront. + +???+ note "Приклади налаштування дистрибутиву CloudFront в маніфесті" + + === "Базовий" + + ```yaml + cdn: true + + http: + public: + security_groups: + ingress: + restrict_to: + cdn: true + ``` + + === "Імпортовані сертифікати" + + ```yaml + cdn: + certificate: arn:aws:acm:us-east-1:${AWS_ACCOUNT_ID}:certificate/13245665-h74x-4ore-jdnz-avs87dl11jd + + http: + certificates: + - arn:aws:acm:${AWS_REGION}:${AWS_ACCOUNT_ID}:certificate/13245665-bldz-0an1-afki-p7ll1myafd + - arn:aws:acm:${AWS_REGION}:${AWS_ACCOUNT_ID}:certificate/56654321-cv8f-adf3-j7gd-adf876af95 + ``` + +## Як увімкнути HTTPS трафік з CloudFront? + +При використанні HTTPS з CloudFront, вкажіть ваші сертифікати в полі `cdn.certificate` маніфесту середовища, так само як ви б це зробили в полі `http.certificates` для Load Balancer. На відміну від Load Balancer, ви можете імпортувати лише один сертифікат. Через це ми рекомендуємо створити новий сертифікат (в регіоні `us-east-1`) з CNAME записами для валідації кожного псевдоніму, який використовують ваші сервіси в цьому середовищі. + +!!! info "Інформація" + CloudFront підтримує лише сертифікати, імпортовані в регіоні `us-east-1`. + +!!! info "Інформація" + Імпорт сертифіката для CloudFront додає додатковий дозвіл до вашої ролі Environment Manager, дозволяючи Copilot використовувати [API-виклик](https://docs.aws.amazon.com/acm/latest/APIReference/API_DescribeCertificate.html) `DescribeCertificate`. + +Ви також можете дозволити Copilot керувати сертифікатами, вказавши `--domain` при створенні застосунку. При цьому ви повинні вказати `http.alias` для всіх ваших сервісів, розгорнутих у середовищі з увімкненим CloudFront. + +З обома налаштуваннями Copilot налаштує CloudFront для використання [SSL/TLS сертифіката](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-alternate-domain-names.html), що дозволяє перевіряти сертифікат переглядача та вмикати HTTPS зʼєднання. + +## Що таке обмеження вхідного трафіку? + +Ви можете обмежити вхідний трафік, щоб він надходив лише з певного джерела. Для CloudFront Copilot використовує [керований AWS список префіксів](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html) для обмеження дозволеного трафіку набором IP-адрес CIDR, повʼязаних з граничними локаціями CloudFront. Коли ви вказуєте `restrict_to.cdn: true`, ваш публічний Load Balancer більше не буде загальнодоступним і доступ до нього можливий лише через дистрибутив CloudFront, захищаючи від загроз безпеці ваших сервісів. + +## Як використовувати CloudFront для термінації TLS? + +!!! attention "Увага" + 1. Вимкніть [перенаправлення HTTP на HTTPS](../../manifest/lb-web-service/#http-redirect-to-https) для ваших вебсервісів з балансуванням навантаження. + 2. Запустіть `svc deploy` окремо для повторного розгортання всіх вебсервісів з балансуванням навантаження перед увімкненням завершення TLS CloudFront. + 3. Після того, як усі ваші вебсервіси з балансуванням навантаження більше не перенаправляють HTTP на HTTPS, ви можете безпечно увімкнути завершення TLS CloudFront у маніфесті середовища та запустити `env deploy`. + +Ви можете опціонально використовувати CloudFront для термінації TLS, налаштувавши маніфест середовища як + +```yaml +cdn: + terminate_tls: true +``` + +І трафік від `CloudFront → Application Load Balancer (ALB) → ECS` буде лише HTTP. Це приносить користь термінації TLS на географічно ближчій кінцевій точці до кінцевого користувача для швидших рукостискань TLS. + +## Як використовувати CloudFront з S3 кошиком? + +Ви можете опціонально використовувати CloudFront з кошиком Amazon S3 для швидшої доставки статичного контенту, налаштувавши `cdn.static_assets` у маніфесті середовища. + +### Використання наявного кошику S3 + +!!! attention "Увага" + З міркувань безпеки ми рекомендуємо використовувати **приватний** S3 кошик, щоб весь публічний доступ був стандартно заблокований. + +Приклад маніфесту середовища нижче ілюструє, як використовувати наявний кошик S3 для CloudFront: + +???+ note "Приклад налаштування маніфесту середовища для використання наявного кошика S3 з CloudFront" + ```yaml + cdn: + static_assets: + location: cf-s3-ecs-demo-bucket.s3.us-west-2.amazonaws.com + alias: example.com + path: static/* + ``` + +Зверніть увагу, що `static_assets.location` є DNS-доменним іменем S3 кошика (наприклад, `EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com`). Якщо ви не використовуєте псевдонім [кореневого домену, повʼязаного з застосунком](../domain/#use-app-associated-root-domain), не забудьте створити A-запис для вашого псевдоніма, що вказує на доменне імʼя CloudFront. + +Після розгортання середовища за допомогою маніфесту середовища, вам потрібно оновити політику вашого S3 кошика (якщо він приватний), щоб CloudFront міг отримати до нього доступ. + +???+ note "Приклад політики S3 кошика, яка надає доступ лише для читання до CloudFront" + ```json + { + "Version": "2012-10-17", + "Statement": { + "Sid": "AllowCloudFrontServicePrincipalReadOnly", + "Effect": "Allow", + "Principal": { + "Service": "cloudfront.amazonaws.com" + }, + "Action": "s3:GetObject", + "Resource": "arn:aws:s3:::EXAMPLE-BUCKET/*", + "Condition": { + "StringEquals": { + "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" + } + } + } + } + ``` + +## Як використовувати CloudFront для обслуговування статичного вебсайту? + +Використовуйте команду [copilot init](../../commands/init/) або [copilot svc init](../../commands/svc-init/) для створення робочого навантаження статичного сайту. Після вибору файлів для завантаження Copilot створить окремий, спеціальний дистрибутив CloudFront, а також S3 кошик з вашими активами. З кожним повторним розгортанням Copilot буде анулювати наявний кеш для більш динамічної розробки. diff --git a/site/content/docs/developing/custom-environment-resources.uk.md b/site/content/docs/developing/custom-environment-resources.uk.md new file mode 100644 index 00000000000..fab0d75af7a --- /dev/null +++ b/site/content/docs/developing/custom-environment-resources.uk.md @@ -0,0 +1,61 @@ +--- +title: Власні ресурси середовища +--- + +# Власні ресурси середовища + +## Імпорт наявних ресурсів + +При створенні нового [середовища](../../concepts/environments/) з Copilot, вам надається можливість імпортувати наявні ресурси VPC. (Використовуйте [прапорці з командою `env init`](../../commands/env-init/#what-are-the-flags) або інтерактивний режим, показаний нижче.) + +```bash +$ copilot env init +What is your environment's name? env-name +Which credentials would you like to use to create name? [profile default] + + Would you like to use the default configuration for a new environment? + - A new VPC with 2 AZs, 2 public subnets and 2 private subnets + - A new ECS Cluster + - New IAM Roles to manage services and jobs in your environment + [Use arrows to move, type to filter] + Yes, use default. + Yes, but I'd like configure the default resources (CIDR ranges). + > No, I'd like to import existing resources (VPC, subnets). +``` + +Ви можете використовувати функцію імпорту для додавання VPC з двома публічними та двома приватними підмережами, лише двома публічними підмережами та без приватних підмереж (наприклад, default VPC), або лише двома приватними підмережами та без публічних підмереж для ваших робочих навантажень, які не мають доступу до Інтернету. (Для отримання додаткової інформації про ресурси, які вам знадобляться для ізольованих мереж, перейдіть [сюди](https://github.com/aws/copilot-cli/discussions/2378).) + +## Зміна стандартних ресурсів Copilot + +Коли ви вибираєте стандартну конфігурацію, Copilot дотримується [найкращих практик AWS](https://aws.amazon.com/blogs/containers/amazon-ecs-availability-best-practices/) і створює VPC з двома публічними та двома приватними підмережами, з однією з кожного типу в одній з двох зон доступності. Якщо вам потрібні додаткові зони доступності або потрібно змінити діапазони CIDR, ви можете вибрати змінити ці налаштування: +```bash +$ copilot env init --container-insights +What is your environment's name? env-name +Which credentials would you like to use to create name? [profile default] + + Would you like to use the default configuration for a new environment? + - A new VPC with 2 AZs, 2 public subnets and 2 private subnets + - A new ECS Cluster + - New IAM Roles to manage services and jobs in your environment + [Use arrows to move, type to filter] + Yes, use default. + > Yes, but I'd like configure the default resources (CIDR ranges). + No, I'd like to import existing resources (VPC, subnets). + + What VPC CIDR would you like to use? [? for help] (10.0.0.0/16) + + Which availability zones would you like to use? [Use arrows to move, space to select, type to filter, ? for more help] + [x] us-west-2a + [x] us-west-2b + > [x] us-west-2c + [ ] us-west-2d + + What CIDR would you like to use for your public subnets? [? for help] (10.0.0.0/24,10.0.1.0/24) 10.0.0.0/24,10.0.1.0/24,10.0.2.0/24 + What CIDR would you like to use for your private subnets? [? for help] (10.0.2.0/24,10.0.3.0/24) 10.0.3.0/24,10.0.4.0/24,10.0.5.0/24 +``` + +## Міркування + +* Якщо ви імпортуєте наявний VPC, ми рекомендуємо дотримуватися [найкращих практик безпеки для вашого VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-best-practices.html) та [розділу Безпека та Фільтрація з FAQ Amazon VPC](https://aws.amazon.com/vpc/faqs/#Security_and_Filtering). +* Якщо ви використовуєте приватну зону хостингу, [ви повинні](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-considerations.html#hosted-zone-private-considerations-vpc-settings) встановити `enableDnsHostname` та `enableDnsSupport` на true. +* Для розгортання робочих навантажень, що мають доступ до Інтернету, у [приватних підмережах](../../manifest/lb-web-service/#network-vpc-placement), ваш VPC потребуватиме [NAT шлюз](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html). diff --git a/site/content/docs/developing/domain.uk.md b/site/content/docs/developing/domain.uk.md new file mode 100644 index 00000000000..a57d6e48371 --- /dev/null +++ b/site/content/docs/developing/domain.uk.md @@ -0,0 +1,133 @@ +--- +title: Домен +--- + +# Домен + +## Вебсервіс з балансуванням навантаження + +У Copilot є два способи використання користувацьких доменів для вашого вебсервісу з балансуванням навантаження: + +1. Використовуйте `--domain` при створенні застосунку для асоціації домену Route 53 в тому ж обліковому записі. +2. Використовуйте поле [`http.[public/private].certificates`](../../manifest/environment/#http-public-certificates) у маніфесті середовища для імпорту ваших перевірених сертифікатів ACM у середовище. + +!!!attention "Увага" + На сьогодні доменне імʼя Route 53 можна асоціювати лише при запуску `copilot app init`. + Якщо ви хочете оновити свій застосунок з новим доменом ([#3045](https://github.com/aws/copilot-cli/issues/3045)), вам потрібно буде запустити `copilot app delete`, щоб видалити старий, перед створенням нового з `--domain` для асоціації нового домену. + +### Використання кореневого домену, асоційованого з застосунком + +Як зазначено в [посібнику Застосунки](../../concepts/applications/#additional-app-configurations), ви можете налаштувати доменне імʼя вашого застосунку при запуску `copilot app init --domain`. + +**Типове доменне імʼя для вашого сервісу** + +Після розгортання ваших [Вебсервісів з балансуванням навантаження](../../concepts/services/#load-balanced-web-service), стандартно ви можете отримати до них публічний доступ через + +``` +${SvcName}.${EnvName}.${AppName}.${DomainName} +``` + +якщо ви використовуєте Application Load Balancer, або + +``` +${SvcName}-nlb.${EnvName}.${AppName}.${DomainName} +``` + +якщо ви використовуєте Network Load Balancer. + +Наприклад, `https://kudo.test.coolapp.example.aws` або `kudo-nlb.test.coolapp.example.aws:443`. + +#### Налаштований доменний псевдонім + +Якщо вам не подобається типове доменне імʼя, яке Copilot призначає вашому сервісу, ви можете встановити власний [псевдонім](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html) для вашого сервісу, відредагувавши розділ `alias` у вашому [маніфесті](../../manifest/lb-web-service/#http-alias). Наступний фрагмент коду встановлює псевдонім для вашого сервісу. + +``` yaml +# у copilot/{service name}/manifest.yml +http: + path: '/' + alias: example.aws +``` + +Аналогічно, якщо ваш сервіс використовує Network Load Balancer, ви можете вказати: + +```yaml +nlb: + port: 443/tls + alias: example-v1.aws +``` + +Однак, оскільки ми [делегуємо відповідальність за субдомен Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingNewSubdomain.html#UpdateDNSParentDomain), псевдонім, який ви вказуєте, повинен відповідати одному з наступних шаблонів, підтримуваних Copilot: + +- `{domain}`, наприклад `example.aws` +- `{subdomain}.{domain}`, наприклад `v1.example.aws` +- `{appName}.{domain}`, наприклад `coolapp.example.aws` +- `{subdomain}.{appName}.{domain}`, наприклад `v1.coolapp.example.aws` +- `{envName}.{appName}.{domain}`, наприклад `test.coolapp.example.aws` +- `{subdomain}.{envName}.{appName}.{domain}`, наприклад `v1.test.coolapp.example.aws` + +#### Що відбувається під капотом? + +Під капотом, Copilot + +* створює хост-зону у вашому обліковому записі застосунку для нового субдомену застосунку `${AppName}.${DomainName}` +* створює ще одну хост-зону у вашому обліковому записі середовища для нового субдомену середовища `${EnvName}.${AppName}.${DomainName}` +* створює та перевіряє сертифікат ACM для субдомену середовища +* асоціює сертифікат з: + - Вашим HTTPS слухачем та перенаправляє HTTP трафік на HTTPS, якщо псевдонім використовується для Application Load Balancer (`http.alias`) + - Вашим TLS слухачем Network Load Balancer, якщо псевдонім використовується для `nlb.alias` і увімкнено термінацію TLS. +* створює необовʼязковий A запис для вашого псевдоніму + +#### Як це виглядає? + + + +### Використання домену у ваших поточних перевірених сертифікатах + +Якщо ви хочете мати більш детальний контроль над створеним сертифікатом ACM, або якщо [типові опції `alias`](#customized-domain-alias) не є достатньо гнучкими, ви можете імпортувати перевірені сертифікати ACM, які включають псевдонім, у ваше середовище. У [маніфесті середовища](../../manifest/environment/) вкажіть `http.[public/private].certificates`: + +```yaml +type: Environment +http: + public: + certificates: + - arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012 +``` + +Потім, у маніфесті вашого сервісу, ви можете: + +- Вказати ID [`hosted_zone`](../../manifest/lb-web-service/#http-hosted-zone), у яку Copilot повинен вставити A запис: + + ``` yaml + # у copilot/{service name}/manifest.yml + http: + path: '/' + alias: example.aws + hosted_zone: Z0873220N255IR3MTNR4 + ``` + +- Або, розгорнути сервіс без поля `hosted_zone`, а потім вручну додати DNS імʼя Application Load Balancer (ALB), створеного у цьому середовищі, як A запис там, де розміщений ваш псевдонім домену. + +У нас є [приклад](../../../blogs/release-v118/#certificate-import) Опції 2 у наших блогах. + +## Вебсервіс на запит + +Ви також можете додати [користувацький домен](https://docs.aws.amazon.com/apprunner/latest/dg/manage-custom-domains.html) для вашого вебсервісу на запит. Подібно до Вебсервісу з балансуванням навантаження, ви можете зробити це, змінивши поле [`alias`](../../manifest/rd-web-service/#http-alias) у вашому маніфесті: + +```yaml +# у copilot/{service name}/manifest.yml +http: + path: '/' + alias: web.example.aws +``` + +Так само, ваш застосунок повинен бути асоційований з доменом (наприклад, `example.aws`), щоб ваш Вебсервіс на запит міг його використовувати. + +!!!info "Інформація" + Зараз ми підтримуємо лише субдомени першого рівня, такі як `web.example.aws`. + + Доменів рівня середовища (наприклад, `web.${envName}.${appName}.example.aws`), доменів рівня застосунку (наприклад, `web.${appName}.example.aws`), або кореневих доменів (тобто `example.aws`) поки що не підтримується. Це також означає, що ваш субдомен не повинен збігатися з імʼям вашого застосунку. + +Під капотом, Copilot: + +* асоціює домен з вашим сервісом app runner +* створює запис домену, а також записи перевірки у хост-зоні вашого кореневого домену diff --git a/site/content/docs/developing/environment-variables.uk.md b/site/content/docs/developing/environment-variables.uk.md new file mode 100644 index 00000000000..9a3251f566f --- /dev/null +++ b/site/content/docs/developing/environment-variables.uk.md @@ -0,0 +1,105 @@ +--- +title: Власні ресурси середовища +--- + +# Змінні середовища + +Змінні середовища — це змінні, які доступні вашому сервісу залежно від середовища, в якому він працює. Ваш сервіс може посилатися на них без необхідності їх визначення. Змінні середовища корисні, коли ви хочете передати дані вашому сервісу, які специфічні для конкретного середовища. Наприклад, назва тестової бази даних на відміну від назви промислової бази даних. + +Доступ до змінних середовища зазвичай залежить від мови, яку ви використовуєте. Ось кілька прикладів отримання змінної середовища з назвою `DATABASE_NAME` різними мовами програмування. + +__Go__ +```go +dbName := os.Getenv("DATABASE_NAME") +``` + +__Javascript__ +```javascript +var dbName = process.env.DATABASE_NAME; +``` + +__Python__ +```python +database_name = os.getenv('DATABASE_NAME') +``` + +## Які стандартні змінні середовища? + +Типово, AWS Copilot CLI передає деякі стандартні змінні середовища для вашого сервісу. + +* `COPILOT_APPLICATION_NAME` — це назва застосунку, в якому працює цей сервіс. +* `COPILOT_ENVIRONMENT_NAME` — це назва середовища, в якому працює сервіс (наприклад, тестове або промислове) +* `COPILOT_SERVICE_NAME` — це назва поточного сервісу. +* `COPILOT_LB_DNS` — це DNS-імʼя Балансувальника Навантаження (якщо він існує), наприклад, _kudos-Publi-MC2WNHAIOAVS-588300247.us-west-2.elb.amazonaws.com_. Примітка: якщо ви використовуєте власне доменне імʼя, це значення все одно буде DNS-імʼям Балансувальника Навантаження. +* `COPILOT_SERVICE_DISCOVERY_ENDPOINT` — це кінцева точка, яку потрібно додати після назви сервісу, щоб звʼязатися з іншим сервісом у вашому середовищі через виявлення сервісів. Значення - `{env name}.{app name}.local`. Для отримання додаткової інформації про виявлення сервісів, перегляньте наш [Посібник з виявлення сервісів](../../developing/svc-to-svc-communication/#service-discovery). + +## Як додати власні змінні середовища? + +Додавання власної змінної середовища є простим. Ви можете додати їх безпосередньо до вашого [маніфесту](../../manifest/overview/) у розділі `variables`. Наступний фрагмент коду передасть змінну середовища з назвою `LOG_LEVEL` вашому сервісу, зі значенням, встановленим на `debug`. + +```yaml +# у copilot/{service name}/manifest.yml +variables: + LOG_LEVEL: debug +``` + +Ви також можете передати конкретне значення для змінної середовища залежно від середовища. Ми будемо використовувати той самий приклад, що й вище, встановлюючи рівень журналювання, але перевизначаючи значення на `info` у нашому промисловому середовищі. Зміни до вашого маніфесту набувають чинності, коли ви їх розгортаєте, тому змінювати їх локально безпечно. + +```yaml +# у copilot/{service name}/manifest.yml +variables: + LOG_LEVEL: debug + +environments: + production: + variables: + LOG_LEVEL: info +``` + +Ось короткий посібник, який показує, як додати змінні середовища до вашого застосунку, редагуючи маніфест 👇 + +![Редагування маніфесту для додавання змінних середовища](https://raw.githubusercontent.com/kohidave/ecs-cliv2-demos/master/env-vars-edit.svg?sanitize=true) + +Крім того, якщо ви хочете додати змінні середовища гуртом, ви можете перерахувати їх в [env файлі](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html#taskdef-envfiles-considerations). А потім вкажіть його шлях (від кореня робочого простору) у полі `env_file` вашого [маніфесту](../../manifest/overview/). + +Ви можете вказати env файл у корені вашого робочого простору для основного контейнера, у будь-якому визначенні sidecar контейнера або в полі `logging`, щоб передати файл середовища до sidecar контейнера Firelens. + +```yaml +# у copilot/{service name}/manifest.yml +env_file: log.env +``` + +А у `log.env` ми могли б мати + +``` +#Це коментар і буде проігноровано +LOG_LEVEL=debug +LOG_INFO=all +``` + +У визначенні побічного контейнера: + +```yaml +sidecars: + nginx: + image: nginx:latest + env_file: ./nginx.env + port: 8080 +``` + +У контейнері журналювання: + +```yaml +logging: + retention: 1 + destination: + Name: cloudwatch + region: us-west-2 + log_group_name: /copilot/logs/ + log_stream_prefix: copilot/ + env_file: ./logging.env +``` + +## Як дізнатися назву моєї таблиці DynamoDB, кошика S3, бази даних RDS тощо? + +При використанні Copilot CLI для надання додаткових ресурсів AWS, таких як таблиці DynamoDB, кошик S3, бази даних тощо, будь-які вихідні значення будуть передані як змінні середовища до вашого застосунку. Для отримання додаткової інформації перегляньте [посібник з додаткових ресурсів](../addons/workload/). diff --git a/site/content/docs/developing/internal-albs.uk.md b/site/content/docs/developing/internal-albs.uk.md new file mode 100644 index 00000000000..c24155a59bc --- /dev/null +++ b/site/content/docs/developing/internal-albs.uk.md @@ -0,0 +1,99 @@ +--- +title: Внутрішні балансувальники навантаження застосунків +--- + +# Внутрішні балансувальники навантаження застосунків + +Стандартно, ALB, створені для середовищ із вебсервісами з балансуванням навантаження, є [загальнодоступними](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-internet-facing-load-balancers.html). Щоб створити [внутрішній балансувальник навантаження](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-internal-load-balancers.html), вузли якого мають лише приватні IP-адреси, вам потрібно налаштувати кілька параметрів у вашому середовищі та робочому навантаженні. + +## Середовище + +Внутрішній балансувальник навантаження є ресурсом на рівні середовища, яким можуть користуватися інші дозволені сервіси. +Щоб увімкнути HTTPS для вашого балансувальника навантаження, змініть [маніфест середовища](../../manifest/environment/#http-private), щоб +імпортувати ARN ваших наявних сертифікатів. + +Якщо до балансувальника навантаження не застосовано жодних сертифікатів, Copilot повʼяже балансувальник з кінцевою точкою `http://{env name}.{app name}.internal`, а окремі сервіси будуть доступні за адресою `http://{service name}.{env name}.{app name}.internal`. +```go +// Щоб отримати доступ до сервісу "api" за внутрішнім балансувальником навантаження +endpoint := fmt.Sprintf("http://api.%s.%s.internal", os.Getenv("COPILOT_ENVIRONMENT_NAME"), os.Getenv("COPILOT_APPLICATION_NAME")) +resp, err := http.Get(endpoint) +``` + +## Сервіс + +Єдиним типом сервісу, який можна розмістити за внутрішнім балансувальником навантаження, є [Backend Service](../../concepts/services/#backend-service). Щоб вказати Copilot створити внутрішній ALB у середовищі, де ви розгортаєте цей сервіс, додайте поле `http` до маніфесту робочого навантаження вашого Backend Service: + +```yaml +# in copilot/{service name}/manifest.yml +http: + path: '/' +network: + vpc: + placement: private +``` + +Якщо у вас є наявний внутрішній ALB у VPC, до якого буде розгорнуто ваш сервіс, ви можете імпортувати його для кожного Backend Service, вказавши його у вашому маніфесті перед розгортанням: + +```yaml +http: + path: '/' + alb: [name or ARN] +``` + +## Розширена конфігурація + +### Розміщення підмереж + +Ви можете точно вказати, у яких приватних підмережах буде розміщено ваш внутрішній ALB. + +Коли ви запускаєте `copilot env init`, використовуйте прапорець [`--internal-alb-subnets`](../../commands/env-init/#what-are-the-flags), щоб передати ідентифікатори підмереж, у яких ви хочете розмістити ALB. + +### Псевдоніми, перевірки стану та інше + +Поле `http` для Backend Services має всі підполя та можливості, які має поле `http` для Load Balanced Web Services. + +``` yaml +http: + path: '/' + healthcheck: + path: '/_healthcheck' + port: 8080 + success_codes: '200,301' + healthy_threshold: 3 + unhealthy_threshold: 2 + interval: 15s + timeout: 10s + grace_period: 45s + deregistration_delay: 5s + stickiness: false + allowed_source_ips: ["10.24.34.0/23"] + alias: example.com +``` + +Для `alias` ви можете 1. використовувати наявні приватні зони хостингу, або 2. додати власні записи псевдонімів після розгортання, незалежно від Copilot. Ви можете додати один псевдонім: + +```yaml +http: + alias: example.com + hosted_zone: HostedZoneID1 +``` + +або кілька псевдонімів, які використовують одну зону хостингу: + +```yaml +http: + alias: ["example.com", "www.example.com"] + hosted_zone: HostedZoneID1 +``` + +або кілька псевдонімів, деякі з яких використовують верхньорівневу зону хостингу: + +```yaml +http: + hosted_zone: HostedZoneID1 + alias: + - name: example.com + - name: www.example.com + - name: something-different.com + hosted_zone: HostedZoneID2 +``` diff --git a/site/content/docs/developing/manifest-env-var.uk.md b/site/content/docs/developing/manifest-env-var.uk.md new file mode 100644 index 00000000000..5d741a63b0b --- /dev/null +++ b/site/content/docs/developing/manifest-env-var.uk.md @@ -0,0 +1,78 @@ +--- +title: Змінні середовища в маніфесті +--- + +# Змінні середовища в маніфесті + +## Змінні середовища оболонки + +У файлах маніфесту можна використовувати змінні середовища вашої оболонки для заповнення значень: + +``` yaml +image: + location: id.dkr.ecr.zone.amazonaws.com/project-name:${TAG} +``` + +Припустимо, що в оболонці встановлено `TAG=version01`, приклад маніфесту буде створено як + +```yaml +image: + location: id.dkr.ecr.zone.amazonaws.com/project-name:version01 +``` + +Коли Copilot визначає контейнер, він використовуватиме образ, розташований за адресою `id.dkr.ecr.zone.amazonaws.com/project-name` з теґом `version01`. + +Також можна інтерполювати `Array of Strings` зі змінних середовища у ваших файлах маніфесту: + +```yaml +network: + vpc: + security_groups: ${SECURITY_GROUPS} +``` + +Припустимо, що в оболонці встановлено `SECURITY_GROUPS=["sg-06b511534b8fa8bbb","sg-06b511534b8fa8bbb","sg-0e921ad50faae7777"]`, приклад маніфесту буде створено як + +```yaml +network: + vpc: + security_groups: + - sg-06b511534b8fa8bbb + - sg-06b511534b8fa8bbb + - sg-0e921ad50faae7777 +``` + +!!! Info "Інформація" + Зараз ви можете замінювати змінні середовища оболонки лише для полів, які приймають рядки, включаючи `String` (наприклад, `image.location`), `Масив рядків` (наприклад, `entrypoint`) або `Map`, де тип значення — `String` або `Масив рядків` (наприклад, `secrets`). + +## Попередньо визначені змінні + +Попередньо визначені змінні — це зарезервовані змінні, які будуть використані Copilot при інтерпретації маніфесту. Наразі доступні попередньо визначені змінні середовища включають: + +- COPILOT_APPLICATION_NAME +- COPILOT_ENVIRONMENT_NAME + +```yaml +secrets: + DB_PASSWORD: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/db_password +``` + +Copilot замінить `${COPILOT_APPLICATION_NAME}` та `${COPILOT_ENVIRONMENT_NAME}` на імена застосунку та середовища, де розгорнуто робоче навантаження. Наприклад, коли ви запускаєте + +``` +copilot svc deploy --app my-app --env test +``` + +для розгортання служби в середовищі `test` у вашому застосунку `my-app`, Copilot перетворить `/copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/db_password` як `/copilot/my-app/test/secrets/db_password`. (Для отримання додаткової інформації про інʼєкцію секретів дивіться [тут](../../developing/secrets/)). + +## Екранування + +Якщо підстановка змінних небажана, додайте слеш: + +```yaml +command: echo hello \${name} +# або command: "echo \\${name}" +variable: + name: world +``` + +У цьому випадку Copilot не намагатиметься замінити `${name}` на значення змінної середовища `name`. diff --git a/site/content/docs/developing/observability.uk.md b/site/content/docs/developing/observability.uk.md new file mode 100644 index 00000000000..3f3bf3510d7 --- /dev/null +++ b/site/content/docs/developing/observability.uk.md @@ -0,0 +1,129 @@ +--- +title: Спостережуваність +--- + +# Спостережуваність + +## Початок роботи + +Copilot може налаштувати збір трасування для сервісів, встановивши наступне в маніфесті: + +```yaml +observability: + tracing: awsxray +``` + +Для [сервісів з керуванням запитами](../../concepts/services/#request-driven-web-service), Copilot увімкне вбудовану конфігурацію трасування App Runner [tracing configuration](https://docs.aws.amazon.com/apprunner/latest/dg/monitor-xray.html). + +Для [сервісів з балансуванням навантаження](../../concepts/services/#load-balanced-web-service), [бекенд-сервісів](../../concepts/services/#backend-service) та [сервісів робочих навантажень](../../concepts/services/#worker-service), Copilot розгорне [AWS OpenTelemetry Collector](https://github.com/aws-observability/aws-otel-collector) як [sidecar](../sidecars/). + +## Інструментування вашого сервісу + +Інструментування вашого сервісу для надсилання телеметричних даних здійснюється за допомогою [SDK для відповідних мов](https://opentelemetry.io/docs/instrumentation/). Приклади надаються в документації OpenTelemetry для кожної підтримуваної мови. Ви також можете переглянути документацію та приклади, надані [AWS Distro for OpenTelemetry](https://aws-otel.github.io/docs/introduction). + +### Приклад застосунку + +Це невеликий [Express.js](https://expressjs.com/) сервіс з налаштованим інструментуванням для всіх його кінцевих точок. Щоб почати, встановіть необхідні залежності: + +```sh +npm install express \ + @opentelemetry/api \ + @opentelemetry/sdk-trace-node \ + @opentelemetry/auto-instrumentations-node \ + @opentelemetry/exporter-trace-otlp-grpc \ + @opentelemetry/id-generator-aws-xray \ + @opentelemetry/propagator-aws-xray +``` + +Потім збережіть наступне у `tracer.js`: + +```js title="tracer.js" linenums="1" +const { BatchSpanProcessor } = require("@opentelemetry/sdk-trace-base"); +const { Resource } = require("@opentelemetry/resources"); +const { trace } = require("@opentelemetry/api"); +const { AWSXRayIdGenerator } = require("@opentelemetry/id-generator-aws-xray"); +const { SemanticResourceAttributes } = require("@opentelemetry/semantic-conventions"); +const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node"); +const { AWSXRayPropagator } = require("@opentelemetry/propagator-aws-xray"); +const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-grpc"); +const { getNodeAutoInstrumentations } = require("@opentelemetry/auto-instrumentations-node"); + +module.exports = (serviceName) => { + const tracerConfig = { + idGenerator: new AWSXRayIdGenerator(), + instrumentations: [getNodeAutoInstrumentations()], + resource: Resource.default().merge( + new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: serviceName, + }) + ), + }; + + const tracerProvider = new NodeTracerProvider(tracerConfig); + const otlpExporter = new OTLPTraceExporter(); + + tracerProvider.addSpanProcessor(new BatchSpanProcessor(otlpExporter)); + tracerProvider.register({ + propagator: new AWSXRayPropagator(), + }); + + return trace.getTracer("example-instrumentation"); +}; +``` + +`tracer.js` експортує функцію, яка повертає трасувальник, налаштований на [автоматичне](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node#user-content-supported-instrumentations) експортування трейсів з сервера Express.js за допомогою [OpenTelemetry Protocol](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md). Ми будемо використовувати цю функцію в `app.js`, передаючи імʼя сервісу, `copilot-observability`. + +```js title="app.js" linenums="1" +'use strict'; +const tracer = require('./tracer')('copilot-observability'); +const app = require("express")(); +const port = 8080; + +app.get("/", (req, res) => { + res.send("Hello World"); +}); + +app.listen(port, () => { + console.log(`Listening for requests on http://localhost:${port}`); +}); +``` + +Тепер, якщо ви розгорнете цей сервіс за допомогою Copilot і увімкнете спостережуваність у маніфесті, ви зможете [побачити трасування, створені цим сервісом!](../observability/#viewing-traces-in-cloudwatch) + +### Включення журналів трасування + +!!! attention "Увага" + Цей розділ не застосовується до сервісів з керуванням запитами + +Оскільки Copilot налаштовує [детектор ресурсів ECS](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/resourcedetectionprocessor#amazon-ecs) на колекторі, трасування, створені вашим сервісом, будуть включати групу журналів, до якої ваш сервіс записує. Якщо ви включите ідентифікатор трасування у ваші журнали, журнали, повʼязані з трасуванням, зʼявляться разом з трасуванням у X-Ray. Це може бути корисним для розуміння та налагодження трасування. + +X-Ray [форматує свої ідентифікатори трасування](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-sendingdata.html#xray-api-traceids) трохи [інакше, ніж OpenTelemetry](https://opentelemetry.io/docs/reference/specification/trace/api/#spancontext), тому вам знадобиться функція, як ця, щоб взяти ідентифікатор трасування OpenTelemetry і відформатувати його для X-Ray: + +```js +function getXRayTraceId(span) { + const id = span.spanContext().traceId; + if (id.length < 9) { + return id; + } + + return "1-" + id.substring(0, 8) + "-" + id.substring(8); +} +``` + +Потім ви можете включити ідентифікатор трасування X-Ray у ваші журнали таким чином: + +```js +console.log("[%s] Корисне повідомлення журналу", getXRayTraceId(span)); +``` + +## Перегляд трасувань у CloudWatch + +Після того, як ви інструментували свій сервіс і розгорнули його за допомогою Copilot, ви готові переглядати трасування з вашого сервісу! Залежно від того, як ви інструментували свій сервіс, вам, ймовірно, потрібно буде надіслати кілька запитів до нього, перш ніж трасування зʼявляться в консолі AWS. + +Спочатку відкрийте консоль CloudWatch і натисніть на `X-Ray traces/Service map` у меню. Тут ви можете побачити візуальну мапу взаємодії сервісів: +![X-Ray Service Map](https://user-images.githubusercontent.com/10566468/166842664-da44756f-7a4b-4e5d-9981-42927b0deb65.png) + +Далі ви можете переглянути деталі конкретного трасування, натиснувши на `X-Ray traces/Traces` у меню та вибравши трасування зі списку. + +У цьому прикладі ви можете побачити сервіс, `js-copilot-observability`, який виконує деякі внутрішні проміжні програмні засоби Express.js, а потім використовує [AWS SDK для Javascript](https://aws.amazon.com/sdk-for-javascript/) для виклику `s3:listBuckets`: +![X-Ray Trace Details](https://user-images.githubusercontent.com/10566468/166842693-65558de5-5a6b-4777-b687-812406580fb6.png) diff --git a/site/content/docs/developing/overrides/cdk.uk.md b/site/content/docs/developing/overrides/cdk.uk.md new file mode 100644 index 00000000000..14f92a35afe --- /dev/null +++ b/site/content/docs/developing/overrides/cdk.uk.md @@ -0,0 +1,201 @@ +--- +title: CDK Перевизначення +--- + +# CDK Перевизначення + +{% include 'overrides-intro.uk.md' %} + +## Коли слід використовувати CDK перевизначення замість YAML патчів? + +Обидва варіанти є механізмом "розбиття скла" для доступу та налаштування функціональності, яка не представлена в Copilot [маніфестах](../../../manifest/overview/). + +Ми рекомендуємо використовувати AWS Cloud Development Kit (CDK) перевизначення замість [YAML патчів](../yamlpatch/), якщо ви хочете використати виразну потужність мови програмування. CDK дозволяє вам робити безпечні та потужні модифікації вашого шаблону CloudFormation. + +## Як почати + +Ви можете розширити ваш шаблон CloudFormation за допомогою CDK, запустивши команду `copilot [noun] override`. Наприклад, ви можете запустити `copilot svc override` для оновлення шаблону Load Balanced Web Service. + +Команда згенерує новий CDK застосунок у теці `copilot/[name]/override` з наступною структурою: + +```console +. +├── bin/ +│ └── override.ts +├── .gitignore +├── cdk.json +├── package.json +├── README.md +├── stack.ts +└── tsconfig.json +``` + +Ви можете почати, відредагувавши файл `stack.ts`. Наприклад, якщо ви вирішили перевизначити властивості ECS сервісу за допомогою `copilot svc override`, наступний файл `stack.ts` буде згенеровано для вас для модифікації: + +```typescript +import * as cdk from 'aws-cdk-lib'; +import { aws_ecs as ecs } from 'aws-cdk-lib'; + +export class TransformedStack extends cdk.Stack { + constructor (scope: cdk.App, id: string, props?: cdk.StackProps) { + super(scope, id, props); + this.template = new cdk.cloudformation_include.CfnInclude(this, 'Template', { + templateFile: path.join('.build', 'in.yaml'), + }); + this.appName = template.getParameter('AppName').valueAsString; + this.envName = template.getParameter('EnvName').valueAsString; + + this.transformService(); + } + + // TODO: implement me. + transformService() { + const service = this.template.getResource("Service") as ecs.CfnService; + throw new error("not implemented"); + } +} +``` + +## Як це працює? + +Як видно з наведеного вище файлу `stack.ts`, Copilot використовуватиме [модуль cloudformation_include](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.cloudformation_include-readme.html) наданий CDK для допомоги в здійсненні трансформацій. Ця бібліотека є рекомендацією CDK з їхнього керівництва ["Імпорт або міграція наявного шаблону AWS CloudFormation"](https://docs.aws.amazon.com/cdk/v2/guide/use_cfn_template.html). Вона дозволяє доступ до ресурсів, які не представлені в маніфесті Copilot як [L1 конструкції](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html). +Обʼєкт `CfnInclude` ініціалізується з прихованого шаблону CloudFormation `.build/in.yaml`. Це спосіб комунікації між Copilot та CDK. Copilot записує шаблон CloudFormation, згенерований маніфестом, у теку `.build/`, який потім розбирається бібліотекою `cloudformation_include` у конструкцію CDK. + +Кожного разу, коли ви запускаєте `copilot [noun] package` або `copilot [noun] deploy`, Copilot спочатку згенерує шаблон CloudFormation з файлу маніфесту, а потім передасть його вашому CDK застосунку для перевизначення властивостей. + +Ми наполегливо рекомендуємо використовувати прапорець `--diff` з командою `package` або `deploy`, щоб спочатку візуалізувати ваші зміни CDK перед розгортанням. + +## Приклади + +Наступний приклад модифікує ресурс [`nlb`](../../../manifest/lb-web-service/#nlb) Load Balanced Web Service для призначення Elastic IP адрес Network Load Balancer. + +У цьому прикладі ви можете побачити, як: + +- Видалити властивість ресурсу. +- Створити нові ресурси. +- Модифікувати властивість наявного ресурсу. + +??? note "Переглянути приклад `stack.ts`" + + ```typescript + import * as cdk from 'aws-cdk-lib'; + import * as path from 'path'; + import { aws_elasticloadbalancingv2 as elbv2 } from 'aws-cdk-lib'; + import { aws_ec2 as ec2 } from 'aws-cdk-lib'; + + interface TransformedStackProps extends cdk.StackProps { + readonly appName: string; + readonly envName: string; + } + + export class TransformedStack extends cdk.Stack { + public readonly template: cdk.cloudformation_include.CfnInclude; + public readonly appName: string; + public readonly envName: string; + + constructor (scope: cdk.App, id: string, props: TransformedStackProps) { + super(scope, id, props); + this.template = new cdk.cloudformation_include.CfnInclude(this, 'Template', { + templateFile: path.join('.build', 'in.yml'), + }); + this.appName = props.appName; + this.envName = props.envName; + this.transformPublicNetworkLoadBalancer(); + } + + /** + * transformPublicNetworkLoadBalancer видаляє властивості "Subnets" з NLB, + * і додає SubnetMappings з попередньо визначеними Elastic IP адресами. + */ + transformPublicNetworkLoadBalancer() { + const elasticIPs = [new ec2.CfnEIP(this, 'ElasticIP1'), new ec2.CfnEIP(this, 'ElasticIP2')]; + const publicSubnets = cdk.Fn.importValue(`${this.appName}-${this.envName}-PublicSubnets`); + + // Застосувати перевизначення. + const nlb = this.template.getResource("PublicNetworkLoadBalancer") as elbv2.CfnLoadBalancer; + nlb.addDeletionOverride('Properties.Subnets'); + nlb.subnetMappings = [{ + allocationId: elasticIPs[0].attrAllocationId, + subnetId: cdk.Fn.select(0, cdk.Fn.split(",", publicSubnets)), + }, { + allocationId: elasticIPs[1].attrAllocationId, + subnetId: cdk.Fn.select(1, cdk.Fn.split(",", publicSubnets)), + }] + } + } + ``` + +Наступний приклад демонструє, як можна додати властивість лише для певного середовища, наприклад, для промислового середовища: + +??? note "Переглянути приклад `stack.ts`" + + ```typescript + import * as cdk from 'aws-cdk-lib'; + import * as path from 'path'; + import { aws_iam as iam } from 'aws-cdk-lib'; + + interface TransformedStackProps extends cdk.StackProps { + readonly appName: string; + readonly envName: string; + } + + export class TransformedStack extends cdk.Stack { + public readonly template: cdk.cloudformation_include.CfnInclude; + public readonly appName: string; + public readonly envName: string; + + constructor (scope: cdk.App, id: string, props: TransformedStackProps) { + super(scope, id, props); + this.template = new cdk.cloudformation_include.CfnInclude(this, 'Template', { + templateFile: path.join('.build', 'in.yml'), + }); + this.appName = props.appName; + this.envName = props.envName; + this.transformEnvironmentManagerRole(); + } + + transformEnvironmentManagerRole() { + const environmentManagerRole = this.template.getResource("EnvironmentManagerRole") as iam.CfnRole; + if (this.envName === "prod") { + let assumeRolePolicy = environmentManagerRole.assumeRolePolicyDocument + let statements = assumeRolePolicy.Statement + statements.push({ + "Effect": "Allow", + "Principal": { "Service": "ec2.amazonaws.com" }, + "Action": "sts:AssumeRole" + }) + } + } + } + ``` + +Наступний приклад демонструє, як можна видалити ресурс, створену Copilot стандартну групу логів, яка містить журнали сервісу. + +??? note "Переглянути приклад `stack.ts`" + + ```typescript + import * as cdk from 'aws-cdk-lib'; + import * as path from 'path'; + + interface TransformedStackProps extends cdk.StackProps { + readonly appName: string; + readonly envName: string; + } + + export class TransformedStack extends cdk.Stack { + public readonly template: cdk.cloudformation_include.CfnInclude; + public readonly appName: string; + public readonly envName: string; + + constructor(scope: cdk.App, id: string, props: TransformedStackProps) { + super(scope, id, props); + this.template = new cdk.cloudformation_include.CfnInclude(this, 'Template', { + templateFile: path.join('.build', 'in.yml'), + }); + this.appName = props.appName; + this.envName = props.envName; + // Видаляє ресурс стандартну групу логів. + this.template.node.tryRemoveChild("LogGroup") + } + } + ``` diff --git a/site/content/docs/developing/overrides/taskdef-overrides.uk.md b/site/content/docs/developing/overrides/taskdef-overrides.uk.md new file mode 100644 index 00000000000..3b3050c90e6 --- /dev/null +++ b/site/content/docs/developing/overrides/taskdef-overrides.uk.md @@ -0,0 +1,85 @@ +--- +title: Перевизначення завдання +--- + +# Перевизначення завдання + +!!! Attention "Увага" + + :warning: Перевизначення завдання (Task definition overrides) застаріло. + + Ми рекомендуємо використовувати перевизначення [YAML patch](../yamlpatch/), оскільки це дозволяє редагувати весь шаблон CloudFormation і + підтримує операцію `remove`. + +Copilot генерує шаблони CloudFormation використовуючи конфігурацію, вказану в [маніфесті](../../../manifest/overview/). Однак, існують поля, які неможливо налаштувати в маніфесті. Наприклад, ви можете захотіти налаштувати [`Ulimits`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-ulimits) для вашого робочого контейнера, але це не доступно в нашому маніфесті. + +Ви можете налаштувати додаткові [налаштування визначення завдання ECS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html) вказавши правила `taskdef_overrides`, які будуть застосовані до шаблону CloudFormation, що Copilot генерує з маніфесту. + +## Як вказати правила перевизначення? + +Для кожного правила перевизначення потрібно вказати **шлях** до поля ресурсу CloudFormation, яке ви хочете перевизначити, та **значення** цього поля. + +Нижче наведено приклад правильного поля `taskdef_overrides`, яке можна застосувати до файлу маніфесту: + +``` yaml +taskdef_overrides: +- path: ContainerDefinitions[0].Cpu + value: 512 +- path: ContainerDefinitions[0].Memory + value: 1024 +``` + +Кожне правило застосовується послідовно до шаблону CloudFormation. Отриманий шаблон CloudFormation стає ціллю для наступного правила. Оцінка продовжується, доки всі правила не будуть успішно застосовані або не виникне помилка. + +## Оцінка шляху + +- Поле `path` є шляхом, розділеним символом `'.'`, до цільового [поля визначення завдання у властивостях CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html). + +- Copilot рекурсивно вставляє поля, якщо вони не існують у шаблоні CloudFormation. Наприклад: якщо правило має шлях `A.B[-].C` (`B` і `C` не існують), Copilot вставить поле `B` і `C`. Конкретний приклад можна знайти [нижче](#add-ulimits-to-the-main-container). + +- Якщо цільовий шлях вказує на члена, який вже існує, значення цього члена замінюється. + +- Щоб додати нового члена до поля `list`, такого як `Ulimits`, ви можете використовувати спеціальний символ `-`: `Ulimits[-]`. + +!!! Attention "Увага" + + Наступні поля у визначенні завдання не дозволено змінювати. + + * [Family](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-family) + * [ContainerDefinitions[].Name](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-name) + +## Тестування + +Щоб переконатися, що ваші правила перевизначення працюють як очікується, ми рекомендуємо запустити `copilot svc package` або `copilot job package`, щоб переглянути згенерований шаблон CloudFormation. + +## Приклади + +### Додати `Ulimits` до головного контейнера + +``` yaml +taskdef_overrides: + - path: ContainerDefinitions[0].Ulimits[-] + value: + Name: "cpu" + SoftLimit: 1024 + HardLimit: 2048 +``` + +### Відкрити додатковий UDP порт + +``` yaml +taskdef_overrides: + - path: "ContainerDefinitions[0].PortMappings[-].ContainerPort" + value: 2056 + # PortMappings[1] отримує привʼязку порту, додану попереднім правилом, оскільки за замовчуванням Copilot створює прив'язку порту. + - path: "ContainerDefinitions[0].PortMappings[1].Protocol" + value: "udp" +``` + +### Надати доступ лише для читання до кореневої файлової системи + +``` yaml +taskdef_overrides: + - path: "ContainerDefinitions[0].ReadonlyRootFilesystem" + value: true +``` diff --git a/site/content/docs/developing/overrides/yamlpatch.uk.md b/site/content/docs/developing/overrides/yamlpatch.uk.md new file mode 100644 index 00000000000..3202b12c183 --- /dev/null +++ b/site/content/docs/developing/overrides/yamlpatch.uk.md @@ -0,0 +1,109 @@ +--- +title: Перевизначення YAML Patch +--- + +# Перевизначення YAML Patch + +{% include 'overrides-intro.uk.md' %} + +## Коли слід використовувати YAML Patch замість перевизначення CDK? + +Обидва варіанти є механізмом "break the glass" для доступу та налаштування функціональності, яка не відображається в Copilot [маніфестах](../../../manifest/overview/). + +Ми рекомендуємо використовувати YAML patch замість [AWS Cloud Development Kit (CDK) overrides](../cdk/), якщо 1) ви не хочете мати залежність від інших інструментів та фреймворків (таких як [Node.js](https://nodejs.org) та [CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)), або 2) вам потрібно написати лише кілька модифікацій. + +## Як почати + +Ви можете розширити ваш шаблон CloudFormation за допомогою YAML patches, виконавши команду `copilot [noun] override`. Наприклад, ви можете виконати `copilot svc override` для оновлення шаблону Load Balanced Web Service. Команда згенерує приклад файлу `cfn.patches.yml` у теці `copilot/[name]/overrides`. + +## Як це працює? + +Синтаксис `cfn.patches.yml` відповідає [RFC6902: JSON Patch](https://www.rfc-editor.org/rfc/rfc6902). Зараз, CLI підтримує три операції: `add`, `remove` та `replace`. Ось приклад файлу `cfn.patches.yml`: + +```yaml +- op: add + path: /Mappings + value: + ContainerSettings: + test: { Cpu: 256, Mem: 512 } + prod: { Cpu: 1024, Mem: 1024} +- op: remove + path: /Resources/TaskRole +- op: replace + path: /Resources/TaskDefinition/Properties/ContainerDefinitions/1/Essential + value: false +- op: add + path: /Resources/Service/Properties/ServiceConnectConfiguration/Services/0/ClientAliases/- + value: + Port: !Ref TargetPort + DnsName: yamlpatchiscool +``` + +Кожен патч застосовується послідовно до шаблону CloudFormation. Отриманий шаблон стає ціллю наступного патча. Оцінка продовжується, доки всі патчі не будуть успішно застосовані або не буде виявлено помилку. + +### Оцінка шляху + +Поле `path` патчу відповідає синтаксису [RFC6901: JSON Pointer](https://www.rfc-editor.org/rfc/rfc6901). + +- Кожне значення `path` розділяється символом `/`, і оцінка зупиняється, коли досягається цільова властивість CloudFormation. +- Якщо цільовий шлях є масивом, токен посилання повинен бути або: + - символами, що складаються з цифр, починаючи з 0. + - точно один символ `-`, коли операція є `add`, для додавання до масиву. + +## Додаткові приклади + +Щоб додати нову властивість до наявного ресурсу: + +```yaml +- op: add + path: /Resources/LogGroup/Properties/Tags + value: + - Key: keyname + Value: value1 +``` + +Щоб додати нову властивість у певний індекс масиву: + +```yaml +- op: add + path: /Resources/TaskDefinition/Properties/ContainerDefinitions/0/EnvironmentFiles/0 + value: arn:aws:s3:::bucket_name/key_name +``` + +Щоб додати новий елемент в кінець масиву: + +```yaml +- op: add + path: /Resources/TaskRole/Properties/Policies/- + value: + PolicyName: DynamoDBReader + PolicyDocument: + Version: "2012-10-17" + Statement: + - Effect: Allow + Action: + - dynamodb:Get* + Resource: '*' +``` + +Щоб замінити значення наявної властивості: + +```yaml +- op: replace + path: /Resources/LogGroup/Properties/RetentionInDays + value: 60 +``` + +Щоб видалити елемент з масиву, потрібно вказати точний індекс: + +```yaml +- op: remove + path: /Resources/ExecutionRole/Properties/Policies/0/PolicyDocument/Statement/1/Action/0 +``` + +Щоб видалити весь ресурс: + +```yaml +- op: remove + path: /Resources/ExecutionRole +``` diff --git a/site/content/docs/developing/publish-subscribe.uk.md b/site/content/docs/developing/publish-subscribe.uk.md new file mode 100644 index 00000000000..427c53aeda6 --- /dev/null +++ b/site/content/docs/developing/publish-subscribe.uk.md @@ -0,0 +1,109 @@ +--- +title: Публікація/Підписка +--- + +# Архітектура Публікації/Підписки + +[Worker Services](../../manifest/worker-service/) в Copilot використовують поле `publish`, спільне для всіх типів сервісів та завдань, щоб дозволити користувачам легко створювати логіку публікації/підписки (publish/subscribe) для передачі повідомлень між сервісами. + +Поширеним шаблоном в AWS є комбінація SNS та SQS для доставки та обробки повідомлень. [SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) — це надійна система доставки повідомлень, яка може надсилати повідомлення до різних підписаних кінцевих точок з гарантіями доставки повідомлень. + +[SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) — це черга повідомлень, яка дозволяє асинхронну обробку повідомлень. Черги можуть наповнюватися одним або кількома темами SNS або фільтрами подій AWS EventBridge. + +Поєднання цих двох сервісів ефективно розділяє відправку та отримання повідомлень, що означає, що видавці не повинні турбуватися про те, які черги фактично підписані на їхні теми, а код сервісу-обробника не повинен турбуватися про те, звідки надходять повідомлення. + +## Надсилання повідомлень від видавця + +Щоб дозволити наявному сервісу публікувати повідомлення в SNS, просто встановіть поле `publish` в його маніфесті. Ми рекомендуємо використовувати назву для теми, яка описує її функцію. + +```yaml +# manifest.yml for api service +name: api +type: Backend Service + +publish: + topics: + - name: ordersTopic +``` + +Це створить [тему SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) та встановить політику ресурсів на тему, щоб дозволити чергам SQS у вашому обліковому записі AWS створювати підписки. + +Copilot також вставляє ARNs будь-якої теми SNS у ваш контейнер під змінною середовища `COPILOT_SNS_TOPIC_ARNS`. JSON-рядок має формат: + +```json +{ + "firstTopicName": "arn:aws:sns:us-east-1:123456789012:firstTopic", + "secondTopicName": "arn:aws:sns:us-east-1:123456789012:secondTopic", +} +``` + +### Приклад на Javascript + +Після розгортання сервісу публікації ви можете надсилати повідомлення до SNS через AWS SDK для SNS. + +```javascript +const { SNSClient, PublishCommand } = require("@aws-sdk/client-sns"); +const client = new SNSClient({ region: "us-west-2" }); +const {ordersTopic} = JSON.parse(process.env.COPILOT_SNS_TOPIC_ARNS); +const out = await client.send(new PublishCommand({ + Message: "hello", + TopicArn: ordersTopic, + })); +``` + +## Підписка на тему з Worker Service + +Щоб підписатися на наявну тему SNS за допомогою сервісу-обробника, вам потрібно відредагувати маніфест сервісу-обробника. Використовуючи поле [`subscribe`](../../manifest/worker-service/#subscribe) у маніфесті, ви можете визначити підписки на наявні теми SNS, які надаються іншими сервісами у вашому середовищі. У цьому прикладі ми використаємо тему `ordersTopic`, яку надав сервіс `api` з попереднього розділу. Ми також налаштуємо чергу сервісу-обробника, щоб увімкнути чергу для невдалих повідомлень. Поле `tries` вказує SQS, скільки разів спробувати повторно доставити невдале повідомлення перед відправкою його до черги для подальшого аналізу. + +```yaml +name: orders-worker +type: Worker Service + +subscribe: + topics: + - name: ordersTopic + service: api + queue: + dead_letter: + tries: 5 +``` + +Copilot створить підписку між чергою цього сервісу-обробника та темою `ordersTopic` з сервісу `api`. Він також вставить URI черги у контейнер сервісу під змінною середовища `COPILOT_QUEUE_URI`. + +Якщо ви вказуєте одну або кілька черг, специфічних для теми, ви можете отримати доступ до цих URI черг через змінну `COPILOT_TOPIC_QUEUE_URIS`. Ця змінна є JSON map від унікального ідентифікатора черги, специфічної для теми, до її URI. + +Наприклад, сервіс-обробник з чергою, специфічною для теми `orders` з сервісу `merchant`, та FIFO тема `transactions` з сервісу `merchant` матиме наступну структуру JSON. + +```json +// COPILOT_TOPIC_QUEUE_URIS +{ + "merchantOrdersEventsQueue": "https://sqs.eu-central-1.amazonaws.com/...", + "merchantTransactionsfifoEventsQueue": "https://sqs.eu-central-1.amazonaws.com/..." +} +``` + +### Приклад на Javascript + +Центральна бізнес-логіка контейнера сервісу-обробника полягає у витягуванні повідомлень з черги. Щоб зробити це за допомогою AWS SDK, ви можете використовувати клієнти SQS для вашої мови програмування. У Javascript логіка витягування, обробки та видалення повідомлень з черги виглядатиме наступним чином. + +```javascript +const { SQSClient, ReceiveMessageCommand, DeleteMessageCommand } = require("@aws-sdk/client-sqs"); +const client = new SQSClient({ region: "us-west-2" }); +const out = await client.send(new ReceiveMessageCommand({ + QueueUrl: process.env.COPILOT_QUEUE_URI, + WaitTimeSeconds: 10, +})); + +console.log(`results: ${JSON.stringify(out)}`); + +if (out.Messages === undefined || out.Messages.length === 0) { + return; +} + +// Process the message here. + +await client.send( new DeleteMessageCommand({ + QueueUrl: process.env.COPILOT_QUEUE_URI, + ReceiptHandle: out.Messages[0].ReceiptHandle, +})); +``` diff --git a/site/content/docs/developing/secrets.uk.md b/site/content/docs/developing/secrets.uk.md new file mode 100644 index 00000000000..6237e6da918 --- /dev/null +++ b/site/content/docs/developing/secrets.uk.md @@ -0,0 +1,70 @@ +--- +title: Секрети +--- + +# Секрети + +Секрети — це конфіденційні дані, такі як токени OAuth, секретні ключі або ключі API — інформація, яка потрібна у вашому коді, але яку не слід зберігати у вихідному коді. У AWS Copilot CLI секрети передаються як змінні середовища (детальніше про [розробку зі змінними середовища](../../developing/environment-variables/)), але через їх конфіденційний характер з ними поводяться інакше. + +## Як додати Секрети? + +Додавання секретів вимагає зберігання їх в [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) (SSM) +або в [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html), а потім додавання посилання на секрет у вашому [маніфесті](../../manifest/overview/). + +Ви можете легко створити секрет в SSM як `SecureString` за допомогою [`copilot secret init`](../../commands/secret-init/)! + +## Використання власних Секретів + +### В SSM + +Якщо ви хочете використовувати власні секрети, обовʼязково додайте два теґи до ваших секретів: + +| Ключ | Значення | +| ----------------------- | ----------------------------------------------------------- | +| `copilot-application` | Назва програми, з якої ви хочете отримати доступ до секрету| +| `copilot-environment` | Назва середовища, з якого ви хочете отримати доступ до секрету| + +Copilot вимагає теґи `copilot-application` та `copilot-environment` для обмеження доступу до цього секрету. + +Припустимо, у вас є (правильно позначений теґами!) параметр SSM з назвою `GH_WEBHOOK_SECRET` зі значенням `secretvalue1234`. Ви можете змінити ваш файл маніфесту, щоб передати це значення: + +```yaml +secrets: + GITHUB_WEBHOOK_SECRET: GH_WEBHOOK_SECRET +``` + +Після розгортання цього оновленого маніфесту, ваш сервіс або завдання зможуть отримати доступ до змінної середовища `GITHUB_WEBHOOK_SECRET`, яка матиме значення параметра SSM `GH_WEBHOOK_SECRET`, `secretvalue1234`. Це працює тому, що агент ECS вирішить параметр SSM при запуску вашого завдання і встановить змінну середовища для вас. + +### В Secrets Manager + +Подібно до SSM, спочатку переконайтеся, що ваш секрет у Secrets Manager має теґи `copilot-application` та `copilot-environment`. + +Припустимо, у вас є секрет у Secrets Manager з наступною конфігурацією: + +| Поле | Значення | +| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Name | `mysql` | +| ARN | `arn:aws:secretsmanager:us-west-2:111122223333:secret:demo/test/mysql-Yi6mvL` | +| Value | `{"engine": "mysql","username": "user1","password": "i29wwX!%9wFV","host": "my-database-endpoint.us-east-1.rds.amazonaws.com","dbname": "myDatabase","port": "3306"`} | +| Tags | `copilot-application=demo`, `copilot-environment=test` | + + +Ви можете змінити ваш файл маніфесту наступним чином: + +```yaml +secrets: + # Варіант 1. Звернення до секрету за назвою, якщо назва вашого секрету не закінчується дефісом, за яким слідують 6 символів (наприклад, mysql). Якщо закінчується (наприклад, mysql-dbconf), див. Варіант 2. + DB: + secretsmanager: 'mysql' + # Ви можете посилатися на конкретний ключ у блобі JSON. + DB_PASSWORD: + secretsmanager: 'mysql:password::' + + # Варіант 2. Звернення до секрету за назвою, з випадковим 6-символьним суфіксом. + # Якщо назва секрету містить дефіс і 6 літер (наприклад, mysql-dbconf замість mysql), то ви повинні додати 6-символьний суфікс. Інакше secretsmanager не зможе знайти ваш секрет. + MYSQL_DB: + secretsmanager: 'demo/test/mysql-dbconf-Vi3nwL' + + # Варіант 3. Як варіант, ви можете посилатися на секрет за ARN. + DB: "'arn:aws:secretsmanager:us-west-2:111122223333:secret:demo/test/mysql-Yi6mvL'" +``` diff --git a/site/content/docs/developing/sidecars.uk.md b/site/content/docs/developing/sidecars.uk.md new file mode 100644 index 00000000000..37b63882be1 --- /dev/null +++ b/site/content/docs/developing/sidecars.uk.md @@ -0,0 +1,247 @@ +--- +title: Sidecars +--- + +# Sidecars + +Sidecar — це додаткові контейнери, які працюють поруч з основним контейнером. Зазвичай вони використовуються для виконання периферійних завдань, таких як логування, конфігурація або проксі-запити. + +!!! Attention Увага + Sidecar не підтримуються для вебсервісів, керованих запитами. + +!!! Attention Увага + Якщо ваш основний контейнер використовує Windows-образ, [FireLens](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html), [AWS X-Ray](https://aws.amazon.com/xray/) та [AWS App Mesh](https://aws.amazon.com/app-mesh/) не підтримуються. Будь ласка, перевірте, чи ваш sidecar-контейнер підтримує Windows. + +AWS також надає деякі опції втулків, які можна легко інтегрувати з вашим ECS сервісом, включаючи, але не обмежуючись [FireLens](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html), [AWS X-Ray](https://aws.amazon.com/xray/) та [AWS App Mesh](https://aws.amazon.com/app-mesh/). + +Якщо ви визначили том EFS для вашого основного контейнера через [поле `storage`](../../developing/storage/) в маніфесті, ви також можете монтувати цей том у будь-яких визначених вами sidecar-контейнерах. + +## Як додати sidecar з Copilot? + +Існує два способи додавання sidecar за допомогою маніфесту Copilot: шляхом визначення [загальних sidecar](#general-sidecars) або використання [шаблонів sidecar](#sidecar-patterns). + +### Загальні sidecar + +Вам потрібно буде надати URL-адресу для образу sidecar. За бажанням, ви можете вказати порт, який хочете експонувати, та параметр облікових даних для [приватного реєстру](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html). + +{% include 'sidecar-config.uk.md' %} + +
+ +#### Приклад + +##### sidecar з перевизначенням середовища + +Подібно до інших полів маніфесту сервісу/завдання, конфігурації sidecar можуть бути перевизначені для кожного середовища через поле [`environments`](../../manifest/lb-web-service/#environments). Нижче наведено приклад, який налаштовує значення для змінної середовища `DD_APM_ENABLED` sidecar `datadog`, залежно від того, чи це середовище `dev`: + +```yaml +name: api +type: Load Balanced Web Service + +sidecars: + datadog: + port: 80 + image: + build: src/reverseproxy/Dockerfile + variables: + DD_APM_ENABLED: true + +environments: + dev: + sidecars: + datadog: + variables: + DD_APM_ENABLED: false +``` + +##### Sidecar контейнер [nginx](https://www.nginx.com/) + +Нижче наведено приклад визначення sidecar-контейнера [nginx](https://www.nginx.com/) у маніфесті вебсервісу з балансуванням навантаження. + +``` yaml +name: api +type: Load Balanced Web Service + +image: + build: api/Dockerfile + port: 3000 + +http: + path: 'api' + healthcheck: '/api/health-check' + # Цільовий контейнер для балансувальника навантаження - наш sidecar 'nginx', а не контейнер сервісу. + target_container: 'nginx' + +cpu: 256 +memory: 512 +count: 1 + +sidecars: + nginx: + port: 80 + image: + build: src/reverseproxy/Dockerfile + variables: + NGINX_PORT: 80 +``` + +##### Том EFS у контейнері сервісу так і в sidecar контейнері + +```yaml +storage: + volumes: + myEFSVolume: + path: '/etc/mount1' + read_only: false + efs: + id: fs-1234567 + +sidecars: + nginx: + port: 80 + image: 1234567890.dkr.ecr.us-west-2.amazonaws.com/reverse-proxy:revision_1 + variables: + NGINX_PORT: 80 + mount_points: + - source_volume: myEFSVolume + path: '/etc/mount1' +``` + +##### Sidecar [AWS Distro for OpenTelemetry](https://aws-otel.github.io/) + +Нижче наведено приклад запуску sidecar [AWS Distro for OpenTelemetry](https://aws-otel.github.io/) з власною конфігурацією. Приклад власної конфігурації не тільки збирає дані трасування X-Ray, але й відправляє метрики ECS до третьої сторони. Приклад вимагатиме секрету SSM та додаткових IAM дозволів. + +Щоб використовувати sidecar OpenTelemetry, спочатку створіть дійсний [файл конфігурації](https://opentelemetry.io/docs/collector/configuration/). Далі перевірте розмір файлу конфігурації. Стандартний параметр [обмежений до 4KB](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html#systemsmanager-PutParameter-request-Value). +Якщо файл конфігурації перевищує 4K, необхідно використовувати розширений параметр SSM. + +Якщо потрібен розширений параметр, його потрібно створити та позначити вручну. Якщо конфігурація вміщується в стандартний параметр, створіть секрет SSM за допомогою [`secret init`](../../commands/secret-init/). Нижче наведений документ YAML можна використовувати як є з New Relic після оновлення ключа API "YOUR-API-KEY-HERE". + +У прикладі YAML включення порожніх ключів є навмисним. Sidecar використовуватиме стандартні значення для цих ключів. + +```yaml +receivers: + awsxray: + transport: udp + awsecscontainermetrics: + +processors: + batch: + +exporters: + awsxray: + region: us-west-2 + otlp: + endpoint: otlp.nr-data.net:4317 + headers: + api-key: YOUR-API-KEY-HERE + +service: + pipelines: + traces: + receivers: [awsxray] + processors: [batch] + exporters: [awsxray] + metrics: + receivers: [awsecscontainermetrics] + exporters: [otlp] +``` + +Запис трейсів X-Ray потребує додаткових IAM дозволів, як показано нижче. Включіть це в застосунки відповідно до [опублікованої документації](../addons/workload/) + +``` yaml +Resources: + XrayWritePolicy: + Type: AWS::IAM::ManagedPolicy + Properties: + PolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: CopyOfAWSXRayDaemonWriteAccess + Effect: Allow + Action: + - xray:PutTraceSegments + - xray:PutTelemetryRecords + - xray:GetSamplingRules + - xray:GetSamplingTargets + - xray:GetSamplingStatisticSummaries + Resource: "*" + +Outputs: + XrayAccessPolicyArn: + Description: "ARN ManagedPolicy для приєднання до ролі завдання." + Value: !Ref XrayWritePolicy +``` + +Конфігурація для колектора OpenTelemetry буде передана в sidecar як змінна середовища. + +```yaml +sidecars: + otel_sidecar: + image: 'public.ecr.aws/aws-observability/aws-otel-collector:latest' + secrets: + AOT_CONFIG_CONTENT: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/otel_config +``` + +### Шаблони sidecar + +Шаблони sidecar — це попередньо визначені конфігурації sidecar Copilot. Наразі підтримується лише шаблон FireLens, але в майбутньому ми додамо більше! + +``` yaml +# У маніфесті. +logging: + # Образ Fluent Bit. (Необовʼязково, стандартно ми використовуємо "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable") + image: + # Параметри конфігурації для надсилання до драйвера логування FireLens. (Необовʼязково) + destination: + : + # Чи включати метадані ECS у логи. (Необовʼязково, стандартно true) + enableMetadata: + # Секрет для передачі до конфігурації логування. (Необовʼязково) + secretOptions: + : + # Повний шлях до файлу конфігурації у вашому користувацькому образі Fluent Bit. (Необовʼязково) + configFilePath: + # Змінні середовища для sidecar контейнера. (Необовʼязково) + variables: + : + # Секрети для доступу до sidecar контейнера. (Необовʼязково) + secrets: + : +``` + +Наприклад: + +``` yaml +logging: + destination: + Name: cloudwatch + region: us-west-2 + log_group_name: /copilot/sidecar-test-hello + log_stream_prefix: copilot/ +``` + +Можливо, вам потрібно буде додати необхідні дозволи до ролі завдання, щоб FireLens міг пересилати ваші дані. Ви можете додати дозволи, вказавши їх у своїх [надбудовах](../addons/workload/). Наприклад: + +``` yaml +Resources: + FireLensPolicy: + Type: AWS::IAM::ManagedPolicy + Properties: + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - logs:CreateLogStream + - logs:CreateLogGroup + - logs:DescribeLogStreams + - logs:PutLogEvents + Resource: "" +Outputs: + FireLensPolicyArn: + Description: ManagedPolicy застосунка використовується роллю завдання ECS + Value: !Ref FireLensPolicy +``` + +!!!info "Інформація" + Оскільки драйвер логування FireLens може направляти логи вашого основного контейнера до різних пунктів призначення, команда [`svc logs`](../../commands/svc-logs/) може відстежувати їх лише тоді, коли вони надсилаються до групи логів, яку ми створюємо для вашого сервісу Copilot у CloudWatch. diff --git a/site/content/docs/developing/storage.uk.md b/site/content/docs/developing/storage.uk.md new file mode 100644 index 00000000000..c80d1f5a33e --- /dev/null +++ b/site/content/docs/developing/storage.uk.md @@ -0,0 +1,387 @@ +--- +title: Зберігання +--- + +# Зберігання + +Є два способи додати зберігання до робочих навантажень Copilot: використовуючи [`copilot storage init`](#database-and-artifacts) для створення баз даних та S3 кошиків; та підключаючи наявну файлову систему EFS за допомоги поля [`storage`](#file-systems) у маніфесті. + +## База даних та артефакти + +Щоб додати базу даних або S3 кошик до вашого сервісу, завдання або середовища, просто виконайте команду [`copilot storage init`](../../commands/storage-init/). + +```console +# Для покрокових інструкцій. +$ copilot storage init -t S3 + +# Щоб створити кошик з назвою "my-bucket", який доступний для сервісу "api" і розгортається та видаляється разом з "api". +$ copilot storage init -n my-bucket -t S3 -w api -l workload +``` + +Вищенаведена команда створить шаблон Cloudformation для S3 кошика в теці [addons](../addons/workload/) для сервісу "api". +Наступного разу, коли ви запустите `copilot deploy -n api`, кошик буде створено, дозвіл на доступ до нього буде додано до ролі завдання `api`, а назва кошика буде вставлена в контейнер `api` в змінну середовища `MY_BUCKET_NAME`. + +!!!info "Іфнормація" + Усі назви перетворюються на SCREAMING_SNAKE_CASE на основі використання дефісів або підкреслень. Ви можете переглянути змінні середовища для даного сервісу, запустивши `copilot svc show`. + +Ви також можете створити [таблицю DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) за допомогою `copilot storage init`. Наприклад, щоб створити шаблон Cloudformation для таблиці з ключем сортування та локальним вторинним індексом, ви можете виконати наступну команду: + +```console +# Для покрокових інструкцій. +$ copilot storage init -t DynamoDB + +# Або пропустіть підказки, надавши прапорці. +$ copilot storage init -n users -t DynamoDB -w api -l workload --partition-key id:N --sort-key email:S --lsi post-count:N +``` + +Це створить таблицю DynamoDB з назвою `${app}-${env}-${svc}-users`. Її ключем розділу буде `id`, атрибут `Number`; її ключем сортування буде `email`, атрибут `String`; і вона матиме [локальний вторинний індекс](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html) (по суті, альтернативний ключ сортування) на атрибуті `Number` `post-count`. + +Також можна створити кластер [RDS Aurora Serverless v2](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html) за допомогою `copilot storage init`. +```console +# Для покрокових інструкцій. +$ copilot storage init -t Aurora + +# Або пропустіть підказки, надавши прапорці. +$ copilot storage init -n my-cluster -t Aurora -w api -l workload --engine PostgreSQL --initial-db my_db +``` + +Це створить кластер RDS Aurora Serverless v2, який використовує PostgreSQL з базою даних з назвою `my_db`. Змінна середовища з назвою `MYCLUSTER_SECRET` буде вставлена у ваш робочий процес як JSON-рядок. Поля включають `'host'`, `'port'`, `'dbname'`, `'username'`, `'password'`, `'dbClusterIdentifier'` та `'engine'`. + +### Зберігання середовища + +Прапорець `-l` є скороченням для `--lifecycle`. У наведених вище прикладах значення прапорця `-l` - `workload`. Це означає, що ресурси зберігання будуть створені як додаток до сервісу або завдання. Зберігання буде розгорнуто коли ви запустите `copilot [svc/job] deploy`, і буде видалено, коли ви запустите `copilot [svc/job] delete`. + +Альтернативно, якщо ви хочете, щоб ваше зберігання зберігалося навіть після видалення сервісу або завдання, ви можете створити ресурс зберігання середовища. Ресурс зберігання середовища створюється як надбудова середовища: він розгортається, коли ви запускаєте `copilot env deploy`, і не видаляється, поки ви не запустите `copilot env delete`. + +## Файлові системи + +Є два способи використання файлової системи EFS з Copilot: використання керованого EFS та імпорт власної файлової системи. + +!!! Attention "Увага" + EFS не підтримується для сервісів на базі Windows. + +### Керований EFS + +Найпростіший спосіб почати використовувати EFS для зберігання на рівні сервісу або завдання — це вбудована можливість керованого EFS від Copilot. Щоб почати, просто увімкніть ключ `efs` у маніфесті під назвою вашого тому. + +```yaml +name: frontend + +storage: + volumes: + myManagedEFSVolume: + efs: true + path: /var/efs + read_only: false +``` + +Цей маніфест призведе до створення тому EFS на рівні середовища з точкою доступу та виділеною текою за шляхом `/frontend` у файловій системі EFS, створеній спеціально для вашого сервісу. Ваш контейнер зможе отримати доступ до цієї теки та всіх її вкладених теках за шляхом `/var/efs` у власній файловій системі. Тека `/frontend` та файлова система EFS будуть зберігатися до тих пір, поки ви не видалите своє середовище. Використання точки доступу для кожного сервісу гарантує, що жоден з сервісів не зможе отримати доступ до даних іншого. + +Ви також можете налаштувати UID та GID, які використовуються для точки доступу, вказавши поля `uid` та `gid` у розширеній конфігурації EFS. Якщо ви не вкажете UID або GID, Copilot вибере псевдовипадковий UID та GID для точки доступу на основі [контрольної суми CRC32](https://stackoverflow.com/a/14210379/5890422) імені сервісу. + +```yaml +storage: + volumes: + myManagedEFSVolume: + efs: + uid: 1000 + gid: 10000 + path: /var/efs + read_only: false +``` + +`uid` та `gid` не можуть бути вказані з будь-якою іншою розширеною конфігурацією EFS. + +#### Під капотом + +Коли ви увімкнете керований EFS, Copilot створює наступні ресурси на рівні середовища: + +* [Файлова система EFS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-filesystem.html). +* [Точки монтування](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-mounttarget.html) у кожній з приватних підмереж вашого середовища +* Правила групи безпеки, що дозволяють групі безпеки середовища отримати доступ до точок монтування. + +На рівні сервісу Copilot створює: + +* [Точку доступу EFS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-efs-accesspoint.html). Точка доступу посилається на теку, створену CFN, названий на честь сервісу або завдання, з яким ви хочете використовувати EFS. + +Ви можете побачити ресурси на рівні середовища, створені за допомогою виклику `copilot env show --json --resources` та аналізу вихідних даних за допомогою вашого улюбленого процесора JSON. Наприклад: + +```console +> copilot env show -n test --json --resources | jq '.resources[] | select( .type | contains("EFS") )' +``` + +#### Розширені випадки використання + +##### Наповнення керованого тому EFS + +Іноді ви можете захотіти заповнити створений том EFS даними перед тим, як ваш сервіс почне приймати трафік. Існує кілька способів зробити це, залежно від вимог вашого основного контейнера та того, чи потребує він цих даних для запуску. + +###### Використання sidecar контейнера + +Ви можете змонтувати створений том EFS у sidecar контейнері, використовуючи поле [`mount_points`](../../developing/sidecars/), та використовувати директиви `COMMAND` або `ENTRYPOINT` вашого sidecar контейнера для копіювання даних з файлової системи sidecar контейнера або завантаження даних з S3 або іншого хмарного сервісу. + +Якщо ви позначите sidecar контейнер як неважливий за допомогою `essential:false`, він запуститься, виконає свою роботу та завершить роботу, коли контейнери сервісу піднімуться та стабілізуються. + +Це може не підходити для робочих навантажень, які залежать від наявності правильних даних у томі EFS. + +###### Використання `copilot svc exec` + +Для робочих навантажень, де дані повинні бути присутніми до підняття контейнерів завдань, ми рекомендуємо спочатку використовувати контейнер-заповнювач. + +Наприклад, розгорніть свій сервіс `frontend` з наступними значеннями у маніфесті: + +```yaml +name: frontend +type: Load Balanced Web Service + +image: + location: amazon/amazon-ecs-sample +exec: true + +storage: + volumes: + myVolume: + efs: true + path: /var/efs + read_only: false +``` + +Потім, коли ваш сервіс стабільний, запустіть: + +```console +copilot svc exec +``` + +Це відкриє інтерактивну оболонку, з якої ви зможете додавати пакети, такі як `curl` або `wget`, завантажувати дані з інтернету, створювати структуру каталогів тощо. + +!!!info "Інформація" + Цей метод налаштування контейнерів не рекомендується для виробничих середовищ; контейнери є ефемерними, і якщо ви хочете, щоб певне програмне забезпечення було присутнє у контейнерах вашого сервісу, обовʼязково додайте його за допомогою директиви `RUN` у Dockerfile. + +Коли ви заповните теку, змініть свій маніфест, щоб видалити директиву `exec` та оновити поле `build` до бажаної конфігурації збірки Docker або розташування образу. + +```yaml +name: frontend +type: Load Balanced Web Service + +image: + build: ./Dockerfile +storage: + volumes: + myVolume: + efs: true + path: /var/efs + read_only: false +``` + +### Зовнішній EFS + +Монтування зовнішнього тому EFS у завданнях Copilot вимагає двох речей: + +1. Щоб ви створили [файлову систему EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) у регіоні бажаного середовища. +2. Щоб ви створили [точку монтування EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html) за допомогою групи безпеки середовища Copilot у кожній підмережі вашого середовища. + +Коли ці передумови виконані, ви можете увімкнути зберігання EFS, використовуючи простий синтаксис у вашому маніфесті. Вам знадобиться ідентифікатор файлової системи та, якщо використовується, конфігурація точки доступу для файлової системи. + +!!!info "Інформація" + Ви можете використовувати дану файлову систему EFS лише в одному середовищі одночасно. Точки монтування обмежені однією на зону доступності; тому ви повинні видалити будь-які наявні точки монтування перед тим, як перенести файлову систему до Copilot, якщо ви використовували її в іншій VPC. + +### Синтаксис маніфесту + +Найпростіший можливий том EFS можна вказати за допомогою наступного синтаксису: + +```yaml +storage: + volumes: + myEFSVolume: # Це змінний ключ і може бути встановлений на довільний рядок. + path: '/etc/mount1' + efs: + id: fs-1234567 +``` + +Це створить том, змонтований лише для читання, у контейнері вашого сервісу або завдання, використовуючи файлову систему `fs-1234567`. Якщо точки монтування не створені у підмережах середовища, завдання не зможе запуститися. + +Повний синтаксис для зовнішніх томів EFS наведено нижче. + +```yaml +storage: + volumes: + : + path: # Обовʼязково. Шлях всередині контейнера. + read_only: # Стандартно: true + efs: + id: # Обовʼязково. + root_dir: # Необовʼязково. Стандартно "/". Не можна вказувати + # якщо використовується точка доступу. + auth: + iam: # Необовʼязково. Чи використовувати авторизацію IAM при + # монтуванні цієї файлової системи. + access_point_id: # Необовʼязково. Ідентифікатор точки доступу EFS + # для використання при монтуванні цієї файлової системи. + uid: # Необовʼязково. UID для керованої точки доступу EFS. + gid: # Необовʼязково. GID для керованої точки доступу EFS. Не можна вказувати + # з `id`, `root_dir` або `auth`. +``` + +### Створення точок монтування + +Існує кілька способів створення точок монтування для наявної файлової системи EFS: [використовуючи AWS CLI](#with-the-aws-cli) та [використовуючи CloudFormation](#cloudformation). + +#### За допомогою AWS CLI + +Щоб створити точки монтування для наявної файлової системи, вам знадобляться + +1. ідентифікатор цієї файлової системи. +2. середовище Copilot, розгорнуте в тому ж обліковому записі та регіоні. + +Щоб отримати ідентифікатор файлової системи, ви можете використовувати AWS CLI: + +```console +$ EFS_FILESYSTEMS=$(aws efs describe-file-systems | \ + jq '.FileSystems[] | {ID: .FileSystemId, CreationTime: .CreationTime, Size: .SizeInBytes.Value}') +``` + +Якщо ви виведете (`echo`) цю змінну, ви повинні побачити, яку файлову систему вам потрібно. Призначте її змінній `$EFS_ID` та продовжуйте. + +Вам також знадобляться публічні підмережі середовища Copilot та група безпеки середовища. Ця команда jq відфільтрує вихідні дані виклику describe-stacks до просто бажаного значення вихідних даних. + +!!!info "Інформація" + Файлова система, яку ви використовуєте, МАЄ бути в тому ж регіоні, що й ваше середовище Copilot! + +```console +$ SUBNETS=$(aws cloudformation describe-stacks --stack-name ${YOUR_APP}-${YOUR_ENV} \ + | jq '.Stacks[] | .Outputs[] | select(.OutputKey == "PublicSubnets") | .OutputValue') +$ SUBNET1=$(echo $SUBNETS | jq -r 'split(",") | .[0]') +$ SUBNET2=$(echo $SUBNETS | jq -r 'split(",") | .[1]') +$ ENV_SG=$(aws cloudformation describe-stacks --stack-name ${YOUR_APP}-${YOUR_ENV} \ + | jq -r '.Stacks[] | .Outputs[] | select(.OutputKey == "EnvironmentSecurityGroup") | .OutputValue') +``` + +Коли у вас є ці дані, створіть точки монтування. + +```console +$ MOUNT_TARGET_1_ID=$(aws efs create-mount-target \ + --subnet-id $SUBNET_1 \ + --security-groups $ENV_SG \ + --file-system-id $EFS_ID | jq -r .MountTargetID) +$ MOUNT_TARGET_2_ID=$(aws efs create-mount-target \ + --subnet-id $SUBNET_2 \ + --security-groups $ENV_SG \ + --file-system-id $EFS_ID | jq -r .MountTargetID) +``` + +Після цього ви можете вказати конфігурацію `storage` у маніфесті, як зазначено вище. + +##### Очищення + +Видаліть точки монтування за допомогою AWS CLI. + +```console +$ aws efs delete-mount-target --mount-target-id $MOUNT_TARGET_1 +$ aws efs delete-mount-target --mount-target-id $MOUNT_TARGET_2 +``` + +#### CloudFormation + +Ось приклад того, як ви можете створити відповідну інфраструктуру EFS для зовнішньої файлової системи, використовуючи стек CloudFormation. + +Після створення середовища розгорніть наступний шаблон CloudFormation у тому ж обліковому записі та регіоні, що й середовище. + +Розмістіть наступний шаблон CloudFormation у файлі з назвою `efs.yml`. + +```yaml +Parameters: + App: + Type: String + Description: Назва вашого засьосунку. + Env: + Type: String + Description: Назва середовища, до якого розгортається ваш сервіс, завдання або робочий процес. + +Resources: + EFSFileSystem: + Metadata: + 'aws:copilot:description': 'Файлова система EFS для постійного зберігання завдань та сервісів' + Type: AWS::EFS::FileSystem + Properties: + PerformanceMode: generalPurpose + ThroughputMode: bursting + Encrypted: true + + MountTargetPublicSubnet1: + Type: AWS::EFS::MountTarget + Properties: + FileSystemId: !Ref EFSFileSystem + SecurityGroups: + - Fn::ImportValue: + !Sub "${App}-${Env}-EnvironmentSecurityGroup" + SubnetId: !Select + - 0 + - !Split + - "," + - Fn::ImportValue: + !Sub "${App}-${Env}-PublicSubnets" + + MountTargetPublicSubnet2: + Type: AWS::EFS::MountTarget + Properties: + FileSystemId: !Ref EFSFileSystem + SecurityGroups: + - Fn::ImportValue: + !Sub "${App}-${Env}-EnvironmentSecurityGroup" + SubnetId: !Select + - 1 + - !Split + - "," + - Fn::ImportValue: + !Sub "${App}-${Env}-PublicSubnets" +Outputs: + EFSVolumeID: + Value: !Ref EFSFileSystem + Export: + Name: !Sub ${App}-${Env}-FilesystemID +``` + +Потім запустіть: + +```console +$ aws cloudformation deploy + --stack-name efs-cfn \ + --template-file ecs.yml + --parameter-overrides App=${YOUR_APP} Env=${YOUR_ENV} +``` + +Це створить файлову систему EFS та точки монтування, необхідні вашим завданням, використовуючи вихідні дані зі стека середовища Copilot. + +Щоб отримати ідентифікатор файлової системи EFS, ви можете виконати виклик `describe-stacks`: + +```console +$ aws cloudformation describe-stacks --stack-name efs-cfn | \ + jq -r '.Stacks[] | .Outputs[] | .OutputValue' +``` + +Потім у маніфесті сервісу, який ви хочете мати доступ до файлової системи EFS, додайте наступну конфігурацію. + +```yaml +storage: + volumes: + copilotVolume: # Це змінний ключ і може бути встановлений на довільний рядок. + path: '/etc/mount1' + read_only: true # Встановіть на false, якщо ваш сервіс потребує доступу для запису. + efs: + id: +``` + +Нарешті, запустіть `copilot svc deploy`, щоб переналаштувати свій сервіс для монтування файлової системи за адресою `/etc/mount1`. + +##### Очищення + +Щоб очистити це, видаліть конфігурацію `storage` з маніфесту та повторно розгорніть сервіс: +```console +copilot svc deploy +``` + +Потім видаліть стек. + +```console +aws cloudformation delete-stack --stack-name efs-cfn +``` diff --git a/site/content/docs/developing/svc-to-svc-communication.uk.md b/site/content/docs/developing/svc-to-svc-communication.uk.md new file mode 100644 index 00000000000..9d02a16cc74 --- /dev/null +++ b/site/content/docs/developing/svc-to-svc-communication.uk.md @@ -0,0 +1,92 @@ +--- +title: "Комунікація між сервісами" +--- + +# Комунікація між сервісами + +## Service Connect додано у v1.24.0 + +[ECS Service Connect](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html) дозволяє клієнтському сервісу підключатися до його залежних сервісів із балансуванням навантаження та стійкістю. Крім того, він спрощує спосіб надання доступу до сервісу для його клієнтів шляхом визначення дружніх псевдонімів. За допомогою Service Connect у Copilot кожному створеному сервісу стандартно надається наступний приватний псевдонім: `http://<назва вашого сервісу>`. + +!!! attention "Увага" + Service Connect ще не підтримується для [Request-Driven Web Services](../../concepts/services/#request-driven-web-service). + +### Як використовувати Service Connect? + +Уявімо, що у нас є застосунок з назвою `kudos` і два сервіси: `api` та `front-end`, розгорнуті в одному середовищі. Щоб використовувати Service Connect, маніфести обох сервісів повинні мати: + +???+ note "Приклади налаштування маніфесту Service Connect" + + === "Базовий" + ```yaml + network: + connect: true # Стандартно "false" + ``` + + === "Власний аліас" + ```yaml + network: + connect: + alias: frontend.local + ``` + +Після розгортання обох сервісів вони повинні мати змогу спілкуватися один з одним, використовуючи стандартну кінцеву точку Service Connect, яка збігаєтся з назвою сервісу. Наприклад, сервіс `front-end` може просто викликати `http://api`. + +```go +// Виклик сервісу "api" з сервісу "front-end". +resp, err := http.Get("http://api/") +``` + +### Оновлення з Service Discovery + +До v1.24, Copilot дозволяв приватну комунікацію між сервісами за допомогою [Service Discovery](#service-discovery). Якщо ви вже використовуєте Service Discovery і хочете уникнути будь-яких змін у коді, ви можете налаштувати поле [`network.connect.alias`](../../manifest/lb-web-service/#network-connect-alias), щоб Service Connect використовував той самий псевдонім, що й Service Discovery. І якщо **обидва**, сервіс і його клієнт, мають увімкнений Service Connect, вони будуть підключатися через Service Connect замість Service Discovery. Наприклад, у маніфесті сервісу `api` ми маємо + +```yaml +network: + connect: + alias: ${COPILOT_SERVICE_NAME}.${COPILOT_ENVIRONMENT_NAME}.${COPILOT_APPLICATION_NAME}.local +``` + +і `front-end` також має те саме налаштування. Тоді вони можуть продовжувати використовувати ту саму кінцеву точку для здійснення API викликів через Service Connect замість Service Discovery, щоб скористатися перевагами балансування навантаження та додаткової стійкості. + +## Service Discovery + +Service Discovery — це спосіб дозволити сервісам знаходити та підключатися один до одного. Зазвичай сервіси можуть спілкуватися один з одним, лише якщо вони надають публічну кінцеву точку, і навіть тоді запити повинні проходити через інтернет. За допомогою [ECS Service Discovery](https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/service-discovery.html) кожному створеному сервісу надається приватна адреса та DNS-імʼя — це означає, що кожен сервіс може спілкуватися з іншим, не виходячи за межі локальної мережі (VPC) і не надаючи публічну кінцеву точку. + +### Як використовувати Service Discovery? + +Service Discovery увімкнено для всіх сервісів, налаштованих за допомогою Copilot CLI. Ми покажемо вам, як його використовувати, на прикладі. Уявімо, що у нас є той самий застосунок `kudos` з двома сервісами: `api` та `front-end`. + +У цьому прикладі уявімо, що наш сервіс `front-end` розгорнуто в середовищі `test`, має публічну кінцеву точку і хоче викликати наш сервіс `api`, використовуючи його кінцеву точку service discovery. + +```go +// Виклик нашого api сервісу з frontend сервісу за допомогою Service Discovery +func ServiceDiscoveryGet(w http.ResponseWriter, req *http.Request, ps httprouter.Params) { + endpoint := fmt.Sprintf("http://api.%s/some-request", os.Getenv("COPILOT_SERVICE_DISCOVERY_ENDPOINT")) + resp, err := http.Get(endpoint /* http://api.test.kudos.local/some-request */) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer resp.Body.Close() + body, _ := ioutil.ReadAll(resp.Body) + w.WriteHeader(http.StatusOK) + w.Write(body) +} +``` + +Важливо, що наш сервіс `front-end` робить запит до нашого сервісу `api` через спеціальну кінцеву точку: + +```go +endpoint := fmt.Sprintf("http://api.%s/some-request", os.Getenv("COPILOT_SERVICE_DISCOVERY_ENDPOINT")) +``` + +`COPILOT_SERVICE_DISCOVERY_ENDPOINT` — це спеціальна змінна середовища, яку Copilot CLI встановлює для вас під час створення сервісу. Вона має формат _{env name}.{app name}.local_, тому в цьому випадку в нашому застосунку _kudos_, коли він розгорнутий у середовищі _test_, запит буде до `http://api.test.kudos.local/some-request`. Оскільки наш сервіс _api_ працює на порту 80, ми не вказуємо порт в URL. Однак, якщо він працював би на іншому порту, наприклад 8080, нам потрібно було б включити порт у запит, а також `http://api.test.kudos.local:8080/some-request`. + +Коли наш front-end робить цей запит, кінцева точка `api.test.kudos.local` перетворюється в приватну IP-адресу і маршрутизується приватно в межах вашого VPC. + +### Старі середовища та Service Discovery + +До Copilot v1.9.0, простір імен service discovery використовував формат _{app name}.local_, без включення середовища. Це обмеження унеможливлювало розгортання кількох середовищ в одному VPC. Будь-які середовища, створені за допомогою Copilot v1.9.0 і новіших версій, можуть спільно використовувати VPC з будь-яким іншим середовищем. + +Коли ваші середовища оновлюються, Copilot буде враховувати простір імен service discovery, з яким було створено середовище. Це означає, що кінцеві точки для ваших сервісів не зміняться. Будь-які нові середовища, створені за допомогою Copilot v1.9.0 і вище, будуть використовувати формат _{env name}.{app name}.local_ для service discovery і можуть спільно використовувати VPC зі старими середовищами. diff --git a/site/content/docs/getting-started/first-app-tutorial.uk.md b/site/content/docs/getting-started/first-app-tutorial.uk.md new file mode 100644 index 00000000000..eeb3cb7a959 --- /dev/null +++ b/site/content/docs/getting-started/first-app-tutorial.uk.md @@ -0,0 +1,82 @@ +--- +title: "Розгортання вашого першого застосунку з AWS Copilot" +--- + +# Розгортання вашого першого застосунку з AWS Copilot + +AWS Copilot дозволяє легко розгортати ваші контейнери на AWS всього за кілька кроків. У цьому підручнику ми зробимо саме це — розгорнемо демонстраційний фронтенд-сервіс, який ви зможете переглянути у своєму оглядачі. Хоча в цьому прикладі ми будемо використовувати демонстраційний статичний вебсайт, ви можете використовувати AWS Copilot для створення та розгортання будь-якого контейнерного застосунку з Dockerfile. Після того, як ми налаштуємо ваш сервіс, ми покажемо вам, як видалити ресурси, створені Copilot, щоб уникнути зайвих витрат. + +Звучить цікаво? Почнемо! + +## Крок 1: Завантажте та налаштуйте AWS Copilot + +Вам знадобиться кілька речей для використання AWS Copilot — бінарний файл AWS Copilot, AWS CLI, Docker Desktop (повинен бути запущений) та облікові дані AWS. + +Дотримуйтесь наших інструкцій тут, щоб налаштувати та сконфігурувати всі ці інструменти. + +Переконайтеся, що у вас є профіль `default`! Запустіть `aws configure`, щоб налаштувати його! + +## Крок 2: Завантажте код для розгортання + +У цьому прикладі ми будемо використовувати демонстраційний застосунок, який є простим статичним вебсайтом, але якщо у вас вже є щось, що ви хочете розгорнути, просто відкрийте термінал і перейдіть до теки з вашим Dockerfile. + +В іншому випадку ви можете просто клонувати наш демонстраційний репозиторій. У вашому терміналі скопіюйте та вставте цей код. Він клонує наш демонстраційний застосунок та переходить в його теку. + +```bash +git clone https://github.com/aws-samples/aws-copilot-sample-service example +cd example +``` + +## Крок 3: Налаштуйте наш застосунок + +Тепер починається найцікавіше! У нас є код сервісу та Dockerfile, і ми хочемо розгорнути його в AWS. Скористаємося AWS Copilot, щоб зробити це! + +!!! Attention "Увага" + Якщо у вас вже є тека `copilot/`, створена для інших цілей, ви можете виявити, що Copilot створює файли в цій теці. Якщо це станеться, ви можете створити порожню теку з назвою `copilot/` поруч з вашою робочою текою. Copilot використовуватиме цю порожню теку. + +У вашій теці з кодом запустіть: + +```bash +copilot init +``` + +gettingstarted + +## Крок 4: Відповідайте на кілька запитань + +Наступне, що ми зробимо, це відповімо на кілька запитань від Copilot. Copilot використовуватиме ці запитання, щоб допомогти нам вибрати найкращу інфраструктуру AWS для вашого сервісу. Їх всього кілька, тож пройдемо їх: + +1. _“What would you like to name your application (Як ви хочете назвати свій застосунок)”_ — застосунок є колекцію сервісів. У цьому прикладі в нашому застосунку у нас буде лише один сервіс, але якщо ви хочете мати багатосервісний застосунок, Copilot полегшить його створення. Назвемо цей застосунок **example-app**. +2. _“Which service type best represents your service's architecture? (Який тип сервісу найкраще представляє архітектуру вашого сервісу?)”_ — Copilot запитує нас, що ми хочемо, щоб наш сервіс робив, чи хочемо ми, щоб він обслуговував трафік? Чи хочемо ми, щоб це був приватний бекенд-сервіс? Тут ми хочемо, щоб наш застосунок був доступний з вебу, тому натисніть 'Enter', щоб вибрати **Load Balanced Web Service**. +3. _“What do you want to name this Load Balanced Web Service? (Як ви хочете назвати цей Load Balanced Web Service?)”_ — тепер як ми повинні назвати наш сервіс у нашому застосунку? Будьте настільки креативними, наскільки хочете, але ми рекомендуємо назвати цей сервіс **front-end**. +4. _“Which Dockerfile would you like to use for front-end? (Який Dockerfile ви хочете використовувати для front-end?)”_ — виберіть тут стандартний Dockerfile. Це сервіс, який Copilot буде будувати та розгортати для вас. + +Після вибору Dockerfile, Copilot почне налаштовувати інфраструктуру AWS для управління вашим сервісом. + +init + +## Крок 5: Розгорніть свій сервіс + +Після того, як Copilot завершить налаштування інфраструктури для управління вашим застосунком, вас запитають, чи хочете ви розгорнути свій сервіс у тестовому середовищі, введіть **yes.** + +Тепер ми можемо почекати кілька хвилин ⏳, поки Copilot налаштовує всі ресурси, необхідні для запуску вашого сервісу. Після того, як вся інфраструктура для вашого сервісу буде налаштована, Copilot побудує ваш образ і завантажить його в Amazon ECR, а потім почне розгортання в Amazon ECS на AWS Fargate. + +Після завершення розгортання ваш сервіс буде запущений, і Copilot виведе посилання з URL 🎉! + +deploy + +## Крок 6: Очищення + +Тепер, коли ви розгорнули свій сервіс, запустимо `copilot app delete` — це видалить всі ресурси, налаштовані Copilot для вашого застосунку, включаючи ваш сервіс ECS та репозиторій ECR. Щоб видалити все, запустіть: + +```bash +copilot app delete +``` + +delete + +## Вітаємо! + +Вітаємо! Ви навчилися використовувати AWS Copilot для налаштування вашого контейнерного застосунку, розгортання його в Amazon ECS на AWS Fargate та видалення його. AWS Copilot — це інструмент командного рядка, який допомагає вам розробляти, випускати та керувати вашими контейнерними застосунками на AWS. + +Ми сподіваємося, що вам сподобалося розгортати ваш застосунок. Готові зануритися глибше в AWS Copilot і дізнатися, як створювати та керувати готовими до виробництва контейнерними застосунками на AWS? Перейдіть в розділ _Розробка_ у бічній панелі. diff --git a/site/content/docs/getting-started/install.uk.md b/site/content/docs/getting-started/install.uk.md new file mode 100644 index 00000000000..28a5fa6d200 --- /dev/null +++ b/site/content/docs/getting-started/install.uk.md @@ -0,0 +1,54 @@ +--- +title: Встановлення Copilot +--- + +# Встановлення Copilot + +Ви можете встановити AWS Copilot за допомогою [Homebrew](https://brew.sh/) або завантаживши бінарні файли напряму. + +## Homebrew 🍻 + +```sh +brew install aws/tap/copilot-cli +``` + +??? info "Ви використовуєте Rosetta на Mac з Apple silicon?" + Якщо ваш Homebrew був встановлений з [Rosetta](https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment), то `brew install` встановить збірку amd64. + Якщо це не те, що вам потрібно, будь ласка, перевстановіть Homebrew без Rosetta або скористайтеся варіантом ручної установки нижче. + +## Вручну + +Скопіюйте та вставте команду у ваш термінал. + +=== "macOS" + + | Команда для встановлення | + | :---------- | + | `curl -Lo copilot https://github.com/aws/copilot-cli/releases/latest/download/copilot-darwin && chmod +x copilot && sudo mv copilot /usr/local/bin/copilot && copilot --help` | + +=== "Linux x86 (64-bit)" + + | Команда для встановлення | + | :---------- | + | `curl -Lo copilot https://github.com/aws/copilot-cli/releases/latest/download/copilot-linux && chmod +x copilot && sudo mv copilot /usr/local/bin/copilot && copilot --help` | + +=== "Linux (ARM)" + + | Команда для встановлення | + | :---------- | + | `curl -Lo copilot https://github.com/aws/copilot-cli/releases/latest/download/copilot-linux-arm64 && chmod +x copilot && sudo mv copilot /usr/local/bin/copilot && copilot --help` | + +=== "Windows" + + | Команда для встановлення | + | :---------- | + | `Invoke-WebRequest -OutFile 'C:\Program Files\copilot.exe' https://github.com/aws/copilot-cli/releases/latest/download/copilot-windows.exe` | + + !!! tip "Порада" + Будь ласка, використовуйте [Windows Terminal](https://github.com/microsoft/terminal) отримати очікуваний результат. Якщо ви зіткнулися з проблемами з дозволами, переконайтеся, що ви запускаєте термінал від імені адміністратора. + +!!! info "Відомості" + Щоб завантажити конкретну версію, замініть "latest" на конкретну версію. Наприклад, щоб завантажити v0.6.0 на macOS, введіть: + ``` + curl -Lo copilot https://github.com/aws/copilot-cli/releases/download/v0.6.0/copilot-darwin && chmod +x copilot && sudo mv copilot /usr/local/bin/copilot && copilot --help + ``` diff --git a/site/content/docs/getting-started/verify.uk.md b/site/content/docs/getting-started/verify.uk.md new file mode 100644 index 00000000000..76550f53d2e --- /dev/null +++ b/site/content/docs/getting-started/verify.uk.md @@ -0,0 +1,236 @@ +--- +title: Перевірка встановлення (опціонально) +--- + +# Перевірка встановлення (опціонально) + +Виконавчі файли AWS Copilot CLI криптографічно підписані за допомогою підписів PGP. Підписи PGP можуть використовуватися для перевірки дійсності виконавчого файлу AWS Copilot CLI. Виконайте наступні кроки для перевірки підписів за допомогою інструменту GnuPG. + +1. Завантажте та встановіть GnuPG. Для отримання додаткової інформації відвідайте [вебсайт GnuPG](https://www.gnupg.org/). + + * Для macOS рекомендуємо використовувати Homebrew. Встановіть Homebrew, використовуючи інструкції з їхнього вебсайту. Для отримання додаткової інформації див. [Homebrew](https://brew.sh/). Після встановлення Homebrew використовуйте наступну команду в терміналі macOS. + + ```sh + brew install gnupg + ``` + + * Для систем Linux встановіть gpg, використовуючи менеджер пакетів вашого дистрибутиву Linux. + * Для систем Windows завантажте та використовуйте простий інсталятор Windows з вебсайту GnuPG. Для отримання додаткової інформації див. [GnuPG Download](https://www.gnupg.org/download/index.html). + +2. Отримайте відкритий ключ PGP Amazon ECS. Ви можете використати команду для цього або створити ключ вручну, а потім імпортувати його. + + * Варіант 1: Отримайте ключ за допомогою наступної команди. + + ```sh + gpg --keyserver hkps://keyserver.ubuntu.com --recv BCE9D9A42D51784F + ``` + + ???- note "Примітки щодо серверів ключів (необовʼязково)" + + * Деякі альтернативні сервери ключів: + * `hkps://keys.openpgp.org` + * `hkps://pgp.mit.edu` + * Щоб перейти на інший сервер ключів, спочатку перевірте збережений ключ за допомогою цієї команди: `gpg --keyserver ${KEYSERVER} --verbose --import-options show-only --recv BCE9D9A42D51784F`. + + * Варіант 2: Створіть файл з наступним вмістом відкритого ключа PGP Amazon ECS і потім імпортуйте його. + + ```gpg + -----BEGIN PGP PUBLIC KEY BLOCK----- + Version: GnuPG v2 + + mQINBFq1SasBEADliGcT1NVJ1ydfN8DqebYYe9ne3dt6jqKFmKowLmm6LLGJe7HU + jGtqhCWRDkN+qPpHqdArRgDZAtn2pXY5fEipHgar4CP8QgRnRMO2fl74lmavr4Vg + 7K/KH8VHlq2uRw32/B94XLEgRbGTMdWFdKuxoPCttBQaMj3LGn6Pe+6xVWRkChQu + BoQAhjBQ+bEm0kNy0LjNgjNlnL3UMAG56t8E3LANIgGgEnpNsB1UwfWluPoGZoTx + N+6pHBJrKIL/1v/ETU4FXpYw2zvhWNahxeNRnoYj3uycHkeliCrw4kj0+skizBgO + 2K7oVX8Oc3j5+ZilhL/qDLXmUCb2az5cMM1mOoF8EKX5HaNuq1KfwJxqXE6NNIcO + lFTrT7QwD5fMNld3FanLgv/ZnIrsSaqJOL6zRSq8O4LN1OWBVbndExk2Kr+5kFxn + 5lBPgfPgRj5hQ+KTHMa9Y8Z7yUc64BJiN6F9Nl7FJuSsfqbdkvRLsQRbcBG9qxX3 + rJAEhieJzVMEUNl+EgeCkxj5xuSkNU7zw2c3hQZqEcrADLV+hvFJktOz9Gm6xzbq + lTnWWCz4xrIWtuEBA2qE+MlDheVd78a3gIsEaSTfQq0osYXaQbvlnSWOoc1y/5Zb + zizHTJIhLtUyls9WisP2s0emeHZicVMfW61EgPrJAiupgc7kyZvFt4YwfwARAQAB + tCRBbWF6b24gRUNTIDxlY3Mtc2VjdXJpdHlAYW1hem9uLmNvbT6JAhwEEAECAAYF + AlrjL0YACgkQHivRXs0TaQrg1g/+JppwPqHnlVPmv7lessB8I5UqZeD6p6uVpHd7 + Bs3pcPp8BV7BdRbs3sPLt5bV1+rkqOlw+0gZ4Q/ue/YbWtOAt4qY0OcEo0HgcnaX + lsB827QIfZIVtGWMhuh94xzm/SJkvngml6KB3YJNnWP61A9qJ37/VbVVLzvcmazA + McWB4HUMNrhd0JgBCo0gIpqCbpJEvUc02Bjn23eEJsS9kC7OUAHyQkVnx4d9UzXF + 4OoISF6hmQKIBoLnRrAlj5Qvs3GhvHQ0ThYq0Grk/KMJJX2CSqt7tWJ8gk1n3H3Y + SReRXJRnv7DsDDBwFgT6r5Q2HW1TBUvaoZy5hF6maD09nHcNnvBjqADzeT8Tr/Qu + bBCLzkNSYqqkpgtwv7seoD2P4n1giRvDAOEfMZpVkUr+C252IaH1HZFEz+TvBVQM + Y8OWWxmIJW+J6evjo3N1eO19UHv71jvoF8zljbI4bsL2c+QTJmOv7nRqzDQgCWyp + Id/v2dUVVTk1j9omuLBBwNJzQCB+72LcIzJhYmaP1HC4LcKQG+/f41exuItenatK + lEJQhYtyVXcBlh6Yn/wzNg2NWOwb3vqY/F7m6u9ixAwgtIMgPCDE4aJ86zrrXYFz + N2HqkTSQh77Z8KPKmyGopsmN/reMuilPdINb249nA0dzoN+nj+tTFOYCIaLaFyjs + Z0r1QAOJAjkEEwECACMFAlq1SasCGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIX + gAAKCRC86dmkLVF4T9iFEACEnkm1dNXsWUx34R3c0vamHrPxvfkyI1FlEUen8D1h + uX9xy6jCEROHWEp0rjGK4QDPgM93sWJ+s1UAKg214QRVzft0y9/DdR+twApA0fzy + uavIthGd6+03jAAo6udYDE+cZC3P7XBbDiYEWk4XAF9I1JjB8hTZUgvXBL046JhG + eM17+crgUyQeetkiOQemLbsbXQ40Bd9V7zf7XJraFd8VrwNUwNb+9KFtgAsc9rk+ + YIT/PEf+YOPysgcxI4sTWghtyCulVnuGoskgDv4v73PALU0ieUrvvQVqWMRvhVx1 + 0X90J7cC1KOyhlEQQ1aFTgmQjmXexVTwIBm8LvysFK6YXM41KjOrlz3+6xBIm/qe + bFyLUnf4WoiuOplAaJhK9pRY+XEnGNxdtN4D26Kd0F+PLkm3Tr3Hy3b1Ok34FlGr + KVHUq1TZD7cvMnnNKEELTUcKX+1mV3an16nmAg/my1JSUt6BNK2rJpY1s/kkSGSE + XQ4zuF2IGCpvBFhYAlt5Un5zwqkwwQR3/n2kwAoDzonJcehDw/C/cGos5D0aIU7I + K2X2aTD3+pA7Mx3IMe2hqmYqRt9X42yF1PIEVRneBRJ3HDezAgJrNh0GQWRQkhIx + gz6/cTR+ekr5TptVszS9few2GpI5bCgBKBisZIssT89aw7mAKWut0Gcm4qM9/yK6 + 1bkCDQRatUmrARAAxNPvVwreJ2yAiFcUpdRlVhsuOgnxvs1QgsIw3H7+Pacr9Hpe + 8uftYZqdC82KeSKhpHq7c8gMTMucIINtH25x9BCc73E33EjCL9Lqov1TL7+QkgHe + T+JIhZwdD8Mx2K+LVVVu/aWkNrfMuNwyDUciSI4D5QHa8T+F8fgN4OTpwYjirzel + 5yoICMr9hVcbzDNv/ozKCxjx+XKgnFc3wrnDfJfntfDAT7ecwbUTL+viQKJ646s+ + psiqXRYtVvYInEhLVrJ0aV6zHFoigE/Bils6/g7ru1Q6CEHqEw++APs5CcE8VzJu + WAGSVHZgun5Y9N4quR/M9Vm+IPMhTxrAg7rOvyRN9cAXfeSMf77I+XTifigNna8x + t/MOdjXr1fjF4pThEi5u6WsuRdFwjY2azEv3vevodTi4HoJReH6dFRa6y8c+UDgl + 2iHiOKIpQqLbHEfQmHcDd2fix+AaJKMnPGNku9qCFEMbgSRJpXz6BfwnY1QuKE+I + R6jA0frUNt2jhiGG/F8RceXzohaaC/Cx7LUCUFWc0n7z32C9/Dtj7I1PMOacdZzz + bjJzRKO/ZDv+UN/c9dwAkllzAyPMwGBkUaY68EBstnIliW34aWm6IiHhxioVPKSp + VJfyiXPO0EXqujtHLAeChfjcns3I12YshT1dv2PafG53fp33ZdzeUgsBo+EAEQEA + AYkCHwQYAQIACQUCWrVJqwIbDAAKCRC86dmkLVF4T+ZdD/9x/8APzgNJF3o3STrF + jvnV1ycyhWYGAeBJiu7wjsNWwzMFOv15tLjB7AqeVxZn+WKDD/mIOQ45OZvnYZuy + X7DR0JszaH9wrYTxZLVruAu+t6UL0y/XQ4L1GZ9QR6+r+7t1Mvbfy7BlHbvX/gYt + Rwe/uwdibI0CagEzyX+2D3kTOlHO5XThbXaNf8AN8zha91Jt2Q2UR2X5T6JcwtMz + FBvZnl3LSmZyE0EQehS2iUurU4uWOpGppuqVnbi0jbCvCHKgDGrqZ0smKNAQng54 + F365W3g8AfY48s8XQwzmcliowYX9bT8PZiEi0J4QmQh0aXkpqZyFefuWeOL2R94S + XKzr+gRh3BAULoqF+qK+IUMxTip9KTPNvYDpiC66yBiT6gFDji5Ca9pGpJXrC3xe + TXiKQ8DBWDhBPVPrruLIaenTtZEOsPc4I85yt5U9RoPTStcOr34s3w5yEaJagt6S + Gc5r9ysjkfH6+6rbi1ujxMgROSqtqr+RyB+V9A5/OgtNZc8llK6u4UoOCde8jUUW + vqWKvjJB/Kz3u4zaeNu2ZyyHaOqOuH+TETcW+jsY9IhbEzqN5yQYGi4pVmDkY5vu + lXbJnbqPKpRXgM9BecV9AMbPgbDq/5LnHJJXg+G8YQOgp4lR/hC1TEFdIp5wM8AK + CWsENyt2o1rjgMXiZOMF8A5oBLkCDQRatUuSARAAr77kj7j2QR2SZeOSlFBvV7oS + mFeSNnz9xZssqrsm6bTwSHM6YLDwc7Sdf2esDdyzONETwqrVCg+FxgL8hmo9hS4c + rR6tmrP0mOmptr+xLLsKcaP7ogIXsyZnrEAEsvW8PnfayoiPCdc3cMCR/lTnHFGA + 7EuR/XLBmi7Qg9tByVYQ5Yj5wB9V4B2yeCt3XtzPqeLKvaxl7PNelaHGJQY/xo+m + V0bndxf9IY+4oFJ4blD32WqvyxESo7vW6WBh7oqv3Zbm0yQrr8a6mDBpqLkvWwNI + 3kpJR974tg5o5LfDu1BeeyHWPSGm4U/G4JB+JIG1ADy+RmoWEt4BqTCZ/knnoGvw + D5sTCxbKdmuOmhGyTssoG+3OOcGYHV7pWYPhazKHMPm201xKCjH1RfzRULzGKjD+ + yMLT1I3AXFmLmZJXikAOlvE3/wgMqCXscbycbLjLD/bXIuFWo3rzoezeXjgi/DJx + jKBAyBTYO5nMcth1O9oaFd9d0HbsOUDkIMnsgGBE766Piro6MHo0T0rXl07Tp4pI + rwuSOsc6XzCzdImj0Wc6axS/HeUKRXWdXJwno5awTwXKRJMXGfhCvSvbcbc2Wx+L + IKvmB7EB4K3fmjFFE67yolmiw2qRcUBfygtH3eL5XZU28MiCpue8Y8GKJoBAUyvf + KeM1rO8Jm3iRAc5a/D0AEQEAAYkEPgQYAQIACQUCWrVLkgIbAgIpCRC86dmkLVF4 + T8FdIAQZAQIABgUCWrVLkgAKCRDePL1hra+LjtHYD/9MucxdFe6bXO1dQR4tKhhQ + P0LRqy6zlBY9ILCLowNdGZdqorogUiUymgn3VhEhVtxTOoHcN7qOuM01PNsRnOeS + EYjf8Xrb1clzkD6xULwmOclTb9bBxnBc/4PFvHAbZW3QzusaZniNgkuxt6BTfloS + Of4inq71kjmGK+TlzQ6mUMQUg228NUQC+a84EPqYyAeY1sgvgB7hJBhYL0QAxhcW + 6m20Rd8iEc6HyzJ3yCOCsKip/nRWAbf0OvfHfRBp0+m0ZwnJM8cPRFjOqqzFpKH9 + HpDmTrC4wKP1+TL52LyEqNh4yZitXmZNV7giSRIkk0eDSko+bFy6VbMzKUMkUJK3 + D3eHFAMkujmbfJmSMTJOPGn5SB1HyjCZNx6bhIIbQyEUB9gKCmUFaqXKwKpF6rj0 + iQXAJxLR/shZ5Rk96VxzOphUl7T90m/PnUEEPwq8KsBhnMRgxa0RFidDP+n9fgtv + HLmrOqX9zBCVXh0mdWYLrWvmzQFWzG7AoE55fkf8nAEPsalrCdtaNUBHRXA0OQxG + AHMOdJQQvBsmqMvuAdjkDWpFu5y0My5ddU+hiUzUyQLjL5Hhd5LOUDdewlZgIw1j + xrEAUzDKetnemM8GkHxDgg8koev5frmShJuce7vSjKpCNg3EIJSgqMOPFjJuLWtZ + vjHeDNbJy6uNL65ckJy6WhGjEADS2WAW1D6Tfekkc21SsIXk/LqEpLMR/0g5OUif + wcEN1rS9IJXBwIy8MelN9qr5KcKQLmfdfBNEyyceBhyVl0MDyHOKC+7PofMtkGBq + 13QieRHv5GJ8LB3fclqHV8pwTTo3Bc8z2g0TjmUYAN/ixETdReDoKavWJYSE9yoM + aaJu279ioVTrwpECse0XkiRyKToTjwOb73CGkBZZpJyqux/rmCV/fp4ALdSW8zbz + FJVORaivhoWwzjpfQKhwcU9lABXi2UvVm14v0AfeI7oiJPSU1zM4fEny4oiIBXlR + zhFNih1UjIu82X16mTm3BwbIga/s1fnQRGzyhqUIMii+mWra23EwjChaxpvjjcUH + 5ilLc5Zq781aCYRygYQw+hu5nFkOH1R+Z50Ubxjd/aqUfnGIAX7kPMD3Lof4KldD + Q8ppQriUvxVo+4nPV6rpTy/PyqCLWDjkguHpJsEFsMkwajrAz0QNSAU5CJ0G2Zu4 + yxvYlumHCEl7nbFrm0vIiA75Sa8KnywTDsyZsu3XcOcf3g+g1xWTpjJqy2bYXlqz + 9uDOWtArWHOis6bq8l9RE6xr1RBVXS6uqgQIZFBGyq66b0dIq4D2JdsUvgEMaHbc + e7tBfeB1CMBdA64e9Rq7bFR7Tvt8gasCZYlNr3lydh+dFHIEkH53HzQe6l88HEic + +0jVnLkCDQRa55wJARAAyLya2Lx6gyoWoJN1a6740q3o8e9d4KggQOfGMTCflmeq + ivuzgN+3DZHN+9ty2KxXMtn0mhHBerZdbNJyjMNT1gAgrhPNB4HtXBXum2wS57WK + DNmade914L7FWTPAWBG2Wn448OEHTqsClICXXWy9IICgclAEyIq0Yq5mAdTEgRJS + Z8t4GpwtDL9gNQyFXaWQmDmkAsCygQMvhAlmu9xOIzQG5CxSnZFk7zcuL60k14Z3 + Cmt49k4T/7ZU8goWi8tt+rU78/IL3J/fF9+1civ1OwuUidgfPCSvOUW1JojsdCQA + L+RZJcoXq7lfOFj/eNjeOSstCTDPfTCL+kThE6E5neDtbQHBYkEX1BRiTedsV4+M + ucgiTrdQFWKf89G72xdv8ut9AYYQ2BbEYU+JAYhUH8rYYui2dHKJIgjNvJscuUWb + +QEqJIRleJRhrO+/CHgMs4fZAkWF1VFhKBkcKmEjLn1f7EJJUUW84ZhKXjO/AUPX + 1CHsNjziRceuJCJYox1cwsoq6jTE50GiNzcIxTn9xUc0UMKFeggNAFys1K+TDTm3 + Bzo8H5ucjCUEmUm9lhkGwqTZgOlRX5eqPX+JBoSaObqhgqCa5IPinKRa6MgoFPHK + 6sYKqroYwBGgZm6Js5chpNchvJMs/3WXNOEVg0J3z3vP0DMhxqWm+r+n9zlW8qsA + EQEAAYkEPgQYAQgACQUCWuecCQIbAgIpCRC86dmkLVF4T8FdIAQZAQgABgUCWuec + CQAKCRBQ3szEcQ5hr+ykD/4tOLRHFHXuKUcxgGaubUcVtsFrwBKma1cYjqaPms8u + 6Sk0wfGRI32G/GhOrp0Ts/MOkbObq6VLTh8N5Yc/53MEl8zQFw9Y5AmRoW4PZXER + ujs5s7p4oR7xHMihMjCCBn1bvrR+34YPfgzTcgLiOEFHYT8UTxwnGmXOvNkMM7md + xD3CV5q6VAte8WKBo/220II3fcQlc9r/oWX4kXXkb0v9hoGwKbDJ1tzqTPrp/xFt + yohqnvImpnlz+Q9zXmbrWYL9/g8VCmW/NN2gju2G3Lu/TlFUWIT4v/5OPK6TdeNb + VKJO4+S8bTayqSG9CML1S57KSgCo5HUhQWeSNHI+fpe5oX6FALPT9JLDce8OZz1i + cZZ0MELP37mOOQun0AlmHm/hVzf0f311PtbzcqWaE51tJvgUR/nZFo6Ta3O5Ezhs + 3VlEJNQ1Ijf/6DH87SxvAoRIARCuZd0qxBcDK0avpFzUtbJd24lRA3WJpkEiMqKv + RDVZkE4b6TW61f0o+LaVfK6E8oLpixegS4fiqC16mFrOdyRk+RJJfIUyz0WTDVmt + g0U1CO1ezokMSqkJ7724pyjr2xf/r9/sC6aOJwB/lKgZkJfC6NqL7TlxVA31dUga + LEOvEJTTE4gl+tYtfsCDvALCtqL0jduSkUo+RXcBItmXhA+tShW0pbS2Rtx/ixua + KohVD/0R4QxiSwQmICNtm9mw9ydIl1yjYXX5a9x4wMJracNY/LBybJPFnZnT4dYR + z4XjqysDwvvYZByaWoIe3QxjX84V6MlI2IdAT/xImu8gbaCI8tmyfpIrLnPKiR9D + VFYfGBXuAX7+HgPPSFtrHQONCALxxzlbNpS+zxt9r0MiLgcLyspWxSdmoYGZ6nQP + RO5Nm/ZVS+u2imPCRzNUZEMa+dlE6kHx0rS0dPiuJ4O7NtPeYDKkoQtNagspsDvh + cK7CSqAiKMq06UBTxqlTSRkm62eOCtcs3p3OeHu5GRZF1uzTET0ZxYkaPgdrQknx + ozjP5mC7X+45lcCfmcVt94TFNL5HwEUVJpmOgmzILCI8yoDTWzloo+i+fPFsXX4f + kynhE83mSEcr5VHFYrTY3mQXGmNJ3bCLuc/jq7ysGq69xiKmTlUeXFm+aojcRO5i + zyShIRJZ0GZfuzDYFDbMV9amA/YQGygLw//zP5ju5SW26dNxlf3MdFQE5JJ86rn9 + MgZ4gcpazHEVUsbZsgkLizRp9imUiH8ymLqAXnfRGlU/LpNSefnvDFTtEIRcpOHc + bhayG0bk51Bd4mioOXnIsKy4j63nJXA27x5EVVHQ1sYRN8Ny4Fdr2tMAmj2O+X+J + qX2yy/UX5nSPU492e2CdZ1UhoU0SRFY3bxKHKB7SDbVeav+K5g== + =Gi5D + -----END PGP PUBLIC KEY BLOCK----- + ``` + + Деталі відкритого ключа PGP Amazon ECS для довідки: + + ```rsa + Key ID: BCE9D9A42D51784F + Type: RSA + Size: 4096/4096 + Expires: Never + User ID: Amazon ECS + Key fingerprint: F34C 3DDA E729 26B0 79BE AEC6 BCE9 D9A4 2D51 784F + ``` + + Імпортуйте відкритий ключ PGP Amazon ECS за допомогою наступної команди. + + ```sh + gpg --import + ``` + +3. Завантажте підписи AWS Copilot CLI. Підписи є відокремленими підписами PGP ASCII, що зберігаються у файлах з розширенням `.asc`. Файл підпису має те саме імʼя, що й відповідний виконавчий файл, з доданим `.asc`. + + === "macOS" + Для систем macOS виконайте наступну команду. + + ```sh + sudo curl -Lo copilot.asc https://github.com/aws/copilot-cli/releases/latest/download/copilot-darwin.asc + ``` + + === "Linux" + Для систем Linux виконайте наступну команду. + + ```sh + sudo curl -Lo copilot.asc https://github.com/aws/copilot-cli/releases/latest/download/copilot-linux.asc + ``` + + === "Windows" + Для систем Windows виконайте наступну команду. + + ```cmd + Invoke-WebRequest -OutFile ecs-cli.asc https://github.com/aws/copilot-cli/releases/latest/download/copilot-windows.exe + ``` + +4. Перевірте підпис за допомогою наступної команди. + * Для систем macOS та Linux: + + ```sh + gpg --verify copilot.asc /usr/local/bin/copilot + ``` + + * Для систем Windows: + + ```sh + gpg --verify ecs-cli.asc 'C:\Program Files\copilot.exe' + ``` + + Очікуваний результат: + + ```gpg + gpg: Signature made Tue Apr 3 13:29:30 2018 PDT + gpg: using RSA key DE3CBD61ADAF8B8E + gpg: Good signature from "Amazon ECS " [unknown] + gpg: WARNING: This key is not certified with a trusted signature! + gpg: There is no indication that the signature belongs to the owner. + Primary key fingerprint: F34C 3DDA E729 26B0 79BE AEC6 BCE9 D9A4 2D51 784F + Subkey fingerprint: EB3D F841 E2C9 212A 2BD4 2232 DE3C BD61 ADAF 8B8E + ``` + + !!! warning "Попередження" + Попередження у виводі очікуване і не є проблематичним. Воно виникає через відсутність ланцюга довіри між вашим особистим ключем PGP (якщо він у вас є) та ключем PGP Amazon ECS. Для отримання додаткової інформації див. [Мережа довіри](https://en.wikipedia.org/wiki/Web_of_trust). diff --git a/site/content/docs/include/command.uk.md b/site/content/docs/include/command.uk.md new file mode 100644 index 00000000000..5f2048f0b41 --- /dev/null +++ b/site/content/docs/include/command.uk.md @@ -0,0 +1,11 @@ +
+ +`command` Рядок або Масив Рядків +Перевизначає стандартну команду в образі. + +```yaml +# Як рядок. +command: ps au +# Або, масив рядкових значень. +command: ["ps", "au"] +``` diff --git a/site/content/docs/include/deployment.uk.md b/site/content/docs/include/deployment.uk.md new file mode 100644 index 00000000000..a59a1eb543e --- /dev/null +++ b/site/content/docs/include/deployment.uk.md @@ -0,0 +1,23 @@ +
+ +`deployment` Map +Розділ deployment містить параметри для контролю кількості завдань, що виконуються під час розгортання, та порядку зупинки та запуску завдань. + +deployment.`rolling` String +Стратегія розгортання є rolling. Дійсні значення: + +- `"default"`: Створює нові завдання в кількості, що відповідає бажаній кількості, з оновленим визначенням завдання, перед зупинкою старих завдань. Під капотом це означає встановлення [`minimumHealthyPercent`](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#minimumHealthyPercent) на 100 і [`maximumPercent`](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#maximumPercent) на 200. +- `"recreate"`: Зупиняє всі запущені завдання, а потім запускає нові завдання. Під капотом це означає встановлення [`minimumHealthyPercent`](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#minimumHealthyPercent) на 0 і [`maximumPercent`](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#maximumPercent) на 100. + +deployment.`rollback_alarms` Array of Strings або Map +!!! info "Інформація" + Якщо на початку розгортання сигнал тривоги знаходиться в стані "In alarm", Amazon ECS НЕ буде відстежувати сигнали тривоги протягом усього розгортання. Для отримання додаткової інформації читайте документацію [тут](https://docs.aws.amazon.com/AmazonECS/latest/userguide/deployment-alarm-failure.html). + +Як список рядків, імена наявних сигналів тривоги CloudWatch, які потрібно повʼязати з вашим сервісом, що можуть викликати [відкат розгортання](https://docs.aws.amazon.com/AmazonECS/latest/userguide/deployment-alarm-failure.html). + +```yaml +deployment: + rollback_alarms: ["MyAlarm-ELB-4xx", "MyAlarm-ELB-5xx"] +``` + +У вигляді map — метрика тривоги та поріг для тривог, створених Copilot. Доступні метрики: diff --git a/site/content/docs/include/entrypoint.uk.md b/site/content/docs/include/entrypoint.uk.md new file mode 100644 index 00000000000..5fc938caa71 --- /dev/null +++ b/site/content/docs/include/entrypoint.uk.md @@ -0,0 +1,11 @@ +
+ +`entrypoint` String or Array of Strings +Перевизначає стандартний entrypoint образу. + +```yaml +# У вигляді рядка. +entrypoint: "/bin/entrypoint --p1 --p2" +# Або, як масив рядкових значень. +entrypoint: ["/bin/entrypoint", "--p1", "--p2"] +``` diff --git a/site/content/docs/include/environments.uk.md b/site/content/docs/include/environments.uk.md new file mode 100644 index 00000000000..0852407224d --- /dev/null +++ b/site/content/docs/include/environments.uk.md @@ -0,0 +1,4 @@ +
+ +`environments` Map +Розділ середовищ дозволяє перевизначити будь-яке значення у вашому маніфесті залежно від середовища, в якому ви знаходитеся. У наведеному вище прикладі маніфесту ми перевизначаємо параметр count, щоб запускати 2 копії нашого сервісу в нашому середовищі 'prod' і 2 копії з використанням потужностей Fargate Spot у нашому середовищі 'staging'. diff --git a/site/content/docs/include/envvars.uk.md b/site/content/docs/include/envvars.uk.md new file mode 100644 index 00000000000..56be45b5c5b --- /dev/null +++ b/site/content/docs/include/envvars.uk.md @@ -0,0 +1,12 @@ +
+ +`variables` Map +Пари ключ-значення, які представляють змінні середовища, що будуть передані вашому сервісу. Copilot стандартно включить для вас ряд змінних середовища. + +variables.`from_cfn` String +Назва [експорту стека CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html). + +
+ +`env_file` String +Шлях до файлу з кореня вашого робочого простору, що містить змінні середовища для передачі основному контейнеру. Для отримання додаткової інформації про файл змінних середовища дивіться [Міркування щодо вказівки файлів змінних оточення.](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html#taskdef-envfiles-considerations). diff --git a/site/content/docs/include/exec.uk.md b/site/content/docs/include/exec.uk.md new file mode 100644 index 00000000000..ecef247f1b5 --- /dev/null +++ b/site/content/docs/include/exec.uk.md @@ -0,0 +1,4 @@ +
+ +`exec` Boolean +Увімкнути запуск команд у вашому контейнері. Стандартне значення `false`. Потрібно для `$ copilot svc exec`. diff --git a/site/content/docs/include/http-additionalrules-healthcheck.uk.md b/site/content/docs/include/http-additionalrules-healthcheck.uk.md new file mode 100644 index 00000000000..319e0de0818 --- /dev/null +++ b/site/content/docs/include/http-additionalrules-healthcheck.uk.md @@ -0,0 +1,45 @@ +http.additional_rules.`healthcheck` String або Map +Якщо ви вказуєте рядок, Copilot інтерпретує його як шлях, відкритий у вашому контейнері для обробки запитів перевірки стану цільової групи. Стандартно "/". + +```yaml +http: + additional_rules: + - healthcheck: '/' +``` + +Ви також можете вказати healthcheck як map: + +```yaml +http: + additional_rules: + - healthcheck: + path: '/' + port: 8080 + success_codes: '200' + healthy_threshold: 3 + unhealthy_threshold: 2 + interval: 15s + timeout: 10s +``` + +http.additional_rules.healthcheck.`path` String + Місце призначення, куди надсилаються запити перевірки стану. + +http.additional_rules.healthcheck.`port` Integer + Порт, на який надсилаються запити перевірки стану. Стандартно [`image.port`](./#image-port), або порт, відкритий [`http.target_container`](./#http-target-container), якщо встановлено. + Якщо відкритий порт `443`, то протокол перевірки стану автоматично встановлюється на HTTPS. + +http.additional_rules.healthcheck.`success_codes` String + HTTP-коди стану, які повинні використовувати справні цілі при відповіді на перевірку стану HTTP. Можна вказати значення від 200 до 499. Можна вказати декілька значень (наприклад, "200,202") або діапазон значень (наприклад, "200-299"). Стандартно 200. + +http.additional_rules.healthcheck.`healthy_threshold` Integer + Кількість послідовних успішних перевірок стану, необхідних перед тим, як вважати несправну ціль справною. Стандартно 5. Діапазон: 2-10. + +http.additional_rules.healthcheck.`unhealthy_threshold` Integer + Кількість послідовних невдалих перевірок стану, необхідних перед тим, як вважати ціль несправною. Стандартно 2. Діапазон: 2-10. + +http.additional_rules.healthcheck.`interval` Duration + Приблизний час у секундах між перевірками стану окремої цілі. Стандартно 30с. Діапазон: 5с–300с. + +http.additional_rules.healthcheck.`timeout` Duration + Час у секундах, протягом якого відсутність відповіді від цілі означає невдалу перевірку стану. Стандартно 5с. Діапазон 5с-300с. diff --git a/site/content/docs/include/http-additionalrules.uk.md b/site/content/docs/include/http-additionalrules.uk.md new file mode 100644 index 00000000000..0cf5576ae03 --- /dev/null +++ b/site/content/docs/include/http-additionalrules.uk.md @@ -0,0 +1,63 @@ +http.additional_rules.`path` String + Запити до цього шляху будуть перенаправлені до вашого сервісу. Кожне правило прослуховування повинно мати унікальний шлях. + +{% include 'http-additionalrules-healthcheck.uk.md' %} + +http.additional_rules.`deregistration_delay` Duration + Час очікування для цільових обʼєктів для завершення зʼєднань під час скасування реєстрації. Стандартно 60 секунд. Встановлення більшого значення дає цільовим обʼєктам більше часу для коректного завершення зʼєднань, але збільшує час, необхідний для нових розгортань. Діапазон 0с-3600с. + +http.additional_rules.`target_container` String + Sidecar-контейнер, до якого направляються запити замість основного контейнера сервісу. + Якщо порт цільового контейнера встановлено на `443`, тоді протокол встановлюється як `HTTPS`, щоб балансувальник навантаження встановлював TLS-зʼєднання з завданнями Fargate, використовуючи сертифікати, які ви встановлюєте на цільовому контейнері. + +http.additional_rules.`target_port` String + Порт контейнера, який приймає трафік. Вкажіть це поле, якщо порт контейнера відрізняється від `image.port` для основного контейнера або `sidecar.port` для sidecar-контейнерів. + +http.additional_rules.`stickiness` Boolean + Вказує, чи увімкнені липкі сеанси. + +http.additional_rules.`allowed_source_ips` Array of Strings + CIDR IP-адреси, яким дозволено доступ до вашого сервісу. + + ```yaml + http: + additional_rules: + - allowed_source_ips: ["192.0.2.0/24", "198.51.100.10/32"] + ``` + +http.additional_rules.`alias` String або Array of Strings або Array of Maps +HTTPS доменний псевдонім вашого сервісу. + +```yaml +# Версія з рядком. +http: + additional_rules: + - alias: example.com +# Або, як масив рядків. +http: + additional_rules: + - alias: ["example.com", "v1.example.com"] +# Або, як масив з map. +http: + additional_rules: + - alias: + - name: example.com + hosted_zone: Z0873220N255IR3MTNR4 + - name: v1.example.com + hosted_zone: AN0THE9H05TED20NEID +``` +http.additional_rules.`hosted_zone` String +ID вашої наявної хостингової зони; може використовуватися лише з `http.alias` та `http.additional_rules.alias`. Якщо у вас є середовище з імпортованими сертифікатами, ви можете вказати хостингову зону, в яку Copilot повинен вставити A-запис після створення балансувальника навантаження. + +```yaml +http: + additional_rules: + - alias: example.com + hosted_zone: Z0873220N255IR3MTNR4 +# Також дивіться приклад масиву з map для http.alias вище. +``` +http.additional_rules.`redirect_to_https` Boolean + Автоматично перенаправляти балансувальник навантаження застосунків з HTTP на HTTPS. Стандартно встановлено `true`. + +http.additional_rules.`version` String + Версія протоколу HTTP(S). Має бути одним зі значень: `'grpc'`, `'http1'` або `'http2'`. Якщо не вказано, Стандартно використовується `'http1'`. Якщо використовується gRPC, зверніть увагу, що з вашим додатком має бути пов'язаний домен. diff --git a/site/content/docs/include/http-healthcheck.uk.md b/site/content/docs/include/http-healthcheck.uk.md new file mode 100644 index 00000000000..a6a32c64c0a --- /dev/null +++ b/site/content/docs/include/http-healthcheck.uk.md @@ -0,0 +1,47 @@ +http.`healthcheck` String або Map +Якщо ви вказуєте рядок, Copilot інтерпретує його як шлях, що відкритий у вашому контейнері для обробки запитів перевірки стану цільової групи. Стандартно "/". + +```yaml +http: + healthcheck: '/' +``` + +Ви також можете вказати healthcheck як map: + +```yaml +http: + healthcheck: + path: '/' + port: 8080 + success_codes: '200' + healthy_threshold: 3 + unhealthy_threshold: 2 + interval: 15s + timeout: 10s + grace_period: 60s +``` + +http.healthcheck.`path` String +Місце призначення, куди надсилаються запити перевірки стану. + +http.healthcheck.`port` Integer +Порт, на який надсилаються запити перевірки стану. Стандартно це [`image.port`](./#image-port), або порт, відкритий [`http.target_container`](./#http-target-container), якщо встановлено. +Якщо відкритий порт `443`, то протокол перевірки стану автоматично встановлюється на HTTPS. + +http.healthcheck.`success_codes` String +Коди стану HTTP, які справні цілі повинні використовувати при відповіді на запит перевірки стану HTTP. Ви можете вказати значення від 200 до 499. Ви можете вказати кілька значень (наприклад, "200,202") або діапазон значень (наприклад, "200-299"). Стандартно це 200. + +http.healthcheck.`healthy_threshold` Integer +Кількість послідовних успішних перевірок стану, необхідних для визнання несправної цілі справною. Стандартно це 5. Діапазон: 2-10. + +http.healthcheck.`unhealthy_threshold` Integer +Кількість послідовних невдалих перевірок стану, необхідних для визнання цілі несправною. Стандартно це 2. Діапазон: 2-10. + +http.healthcheck.`interval` Duration +Приблизний час, у секундах, між перевірками стану окремої цілі. Стандартно це 30с. Діапазон: 5с–300с. + +http.healthcheck.`timeout` Duration +Час, у секундах, протягом якого відсутність відповіді від цілі означає невдалу перевірку стану. Стандартно це 5с. Діапазон 5с-300с. + +http.healthcheck.`grace_period` Duration +Час, протягом якого ігноруються невдалі перевірки стану цільової групи при запуску контейнера. Стандартно це 60с. Це може бути корисно для розвʼязання проблем з розгортанням контейнерів, які потребують часу, щоб стати справними та почати слухати вхідні зʼєднання, або для прискорення розгортання контейнерів, які гарантовано швидко запускаються. diff --git a/site/content/docs/include/image-config-with-port.uk.md b/site/content/docs/include/image-config-with-port.uk.md new file mode 100644 index 00000000000..84ef5cb0f37 --- /dev/null +++ b/site/content/docs/include/image-config-with-port.uk.md @@ -0,0 +1,6 @@ +{% include 'image.uk.md' %} + +{% include 'image-config.uk.md' %} + +image.`port` Integer +Порт, відкритий у вашому Docker-файлі. Copilot має розібрати це значення для вас з вашої інструкції `EXPOSE`. diff --git a/site/content/docs/include/image-config.uk.md b/site/content/docs/include/image-config.uk.md new file mode 100644 index 00000000000..c49f262bda9 --- /dev/null +++ b/site/content/docs/include/image-config.uk.md @@ -0,0 +1,61 @@ +image.`build` String або Map +Створіть контейнер з Dockerfile з додатковими аргументами. Несумісний з [`image.location`](#image-location). + +Якщо ви вказуєте рядок, Copilot інтерпретує його як шлях до вашого Dockerfile. Він припустить, що dirname вказаного вами рядка має бути контекстом збірки. Маніфест: + +```yaml +image: + build: path/to/dockerfile +``` + +призведе до наступного виклику docker build: `$ docker build --file path/to/dockerfile path/to`. + +Ви також можете вказати build у вигляді map: + +```yaml +image: + build: + dockerfile: path/to/dockerfile + context: context/dir + target: build-stage + cache_from: + - image:tag + args: + key: value +``` + +У цьому випадку Copilot використає вказаний вами теку контексту і перетворить пари ключ-значення у args у перевизначення --build-arg. Еквівалентний виклик docker build буде таким: +`$ docker build --file path/to/dockerfile --target build-stage --cache-from image:tag --build-arg key=value context/dir`. + +Ви можете опустити поля, і Copilot зробить все можливе, щоб зрозуміти, що ви маєте на увазі. Наприклад, якщо ви вкажете `context`, але не `dockerfile`, Copilot запустить Docker у теці контексту і вважатиме, що ваш Docker-файл має назву "Dockerfile". Якщо ви вкажете `dockerfile`, але не `context`, Copilot вважатиме, що ви хочете запустити Docker у теці, яка містить `dockerfile`. + +Усі шляхи належать до кореня вашої робочої області. + +image.`location` String +Замість того, щоб збирати контейнер з Dockerfile, ви можете вказати імʼя наявного образу. Взаємовиключно з [`image.build`](#image-build). +Поле `location` має таке саме визначення, як і параметр [`image`](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_image) у визначенні завдання Amazon ECS. + +!!! warning "Попередження" + Якщо ви передаєте образ Windows, ви повинні додати `platform: windows/x86_64` до вашого маніфесту. + Якщо ви передаєте образ на основі архітектури ARM, ви повинні додати `platform: linux/arm64` до вашого маніфесту. + +image.`credentials` String +Необовʼязковий ARN облікових даних для приватного сховища. Поле `credentials` має таке саме визначення, як і поле [`credentialsParameter`](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html) у визначенні завдання Amazon ECS. + +image.`labels` Map +Опціональний map ключ/значення [міток Docker labels](https://docs.docker.com/config/labels-custom-metadata/) для додавання до контейнера. + +image.`depends_on` Map +Опціональний map ключ/значення [Container Dependencies](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDependency.html) для додавання до контейнера. Ключем map є імʼя контейнера, а значенням є умова, від якої залежить залежність. Допустимими умовами є: `start`, `healthy`, `complete` та `success`. Ви не можете вказати залежність `complete` або `success` для основного контейнера. + +Наприклад: + +```yaml +image: + build: ./Dockerfile + depends_on: + nginx: start + startup: success +``` + +У наведеному вище прикладі головний контейнер завдання буде запущено лише після того, як буде запущено контейнер `nginx` і успішно завершиться контейнер `startup`. diff --git a/site/content/docs/include/image-healthcheck.uk.md b/site/content/docs/include/image-healthcheck.uk.md new file mode 100644 index 00000000000..0b63e68fc6e --- /dev/null +++ b/site/content/docs/include/image-healthcheck.uk.md @@ -0,0 +1,17 @@ +image.`healthcheck` Map +Необовʼязкова конфігурація для перевірки стану контейнера. + +image.healthcheck.`command` Array of Strings +Команда для визначення стану контейнера. Масив рядків може починатися з `CMD` для виконання аргументів команди безпосередньо або `CMD-SHELL` для запуску команди з використанням стандартної оболонки контейнера. + +image.healthcheck.`interval` Duration +Період часу між перевірками стану, в секундах. Стандартно 10с. + +image.healthcheck.`retries` Integer +Кількість спроб перед тим, як контейнер буде визнано несправним. Стандартно 2. + +image.healthcheck.`timeout` Duration +Час очікування перед тим, як перевірка стану буде визнана невдалою, в секундах. Стандартно 5с. + +image.healthcheck.`start_period` Duration +Тривалість періоду підготовки контейнера перед тим, як невдалі перевірки стану будуть враховані в максимальну кількість спроб. Стандартно 0с. diff --git a/site/content/docs/include/image.uk.md b/site/content/docs/include/image.uk.md new file mode 100644 index 00000000000..1158949e566 --- /dev/null +++ b/site/content/docs/include/image.uk.md @@ -0,0 +1,4 @@ +
+ +`image` Map +Розділ image містить параметри, що стосуються конфігурації збірки Docker або посилаються на наявний образ контейнера. diff --git a/site/content/docs/include/logging.uk.md b/site/content/docs/include/logging.uk.md new file mode 100644 index 00000000000..6843e940f91 --- /dev/null +++ b/site/content/docs/include/logging.uk.md @@ -0,0 +1,25 @@ +
+ +`logging` Map +Розділ журналювання містить конфігурацію логів. Ви також можете налаштувати параметри для драйвера журналювання [FireLens](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html) вашого контейнера в цьому розділі (дивіться приклади [тут](../../developing/sidecars/#sidecar-patterns)). + +logging.`retention` Integer +Необовʼязково. Кількість днів зберігання подій журналу. Дивіться [цю сторінку](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-logs-loggroup-retentionindays) для всіх прийнятних значень. Якщо не вказано, стандартно встановлено 30. + +logging.`image` Map +Необовʼязково. Образ Fluent Bit для використання. Стандартно `public.ecr.aws/aws-observability/aws-for-fluent-bit:stable`. + +logging.`destination` Map +Необовʼязково. Параметри конфігурації для відправлення драйверу журналювання FireLens. + +logging.`enableMetadata` Map +Необовʼязково. Чи включати метадані ECS у логи. Стандартно `true`. + +logging.`secretOptions` Map +Необовʼязково. Секрети для передачі в конфігурацію журналювання. + +logging.`configFilePath` Map +Необовʼязково. Повний шлях до файлу конфігурації у вашому власному образі Fluent Bit. + +logging.`env_file` String +Шлях до файлу з кореневої теки вашого робочого простору, що містить змінні середовища для передачі в контейнер журналювання sidecar. Для отримання додаткової інформації про файл змінних середовища дивіться [Особливості визначення файлів змінних середовища](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html#taskdef-envfiles-considerations). diff --git a/site/content/docs/include/network-vpc.uk.md b/site/content/docs/include/network-vpc.uk.md new file mode 100644 index 00000000000..743ea5d2ad3 --- /dev/null +++ b/site/content/docs/include/network-vpc.uk.md @@ -0,0 +1,68 @@ +network.`vpc` Map +Підмережі та групи безпеки, прикріплені до ваших завдань. + +network.vpc.`placement` String або Map +Якщо використовується як рядок, значення повинно бути одним із `'public'` або `'private'`. Стандартно завдання запускаються в публічних підмережах. + +!!! info "Інформація" + Якщо ви запускаєте завдання в `'private'` підмережах і використовуєте VPC, створену Copilot, Copilot автоматично додасть NAT шлюзи до вашого середовища для підключення до Інтернету. (Див. [ціни](https://aws.amazon.com/vpc/pricing/).) Крім того, під час запуску `copilot env init` ви можете імпортувати наявний VPC з NAT шлюзами або з кінцевими точками VPC для ізольованих робочих навантажень. Див. нашу сторінку [ресурси користувацького середовища](../../developing/custom-environment-resources/) для отримання додаткової інформації. + +Якщо використовується як map, ви можете вказати, в яких підмережах Copilot повинен запускати завдання ECS. Наприклад: + +```yaml +network: + vpc: + placement: + subnets: ["SubnetID1", "SubnetID2"] +``` + +network.vpc.placement.`subnets` Array of Strings або Map +Як список рядків, ідентифікатори підмереж, де Copilot повинен запускати завдання ECS. + +Як map, пари імʼя-значення, за якими фільтрувати ваші підмережі. Зверніть увагу, що фільтри обʼєднуються за допомогою `AND`, а значення для кожного фільтра обʼєднуються за допомогою `OR`. Наприклад, підмережі з теґами `org: bi` і `type: public`, а також підмережі з теґами `org: bi` і `type: private` будуть відповідати + +```yaml +network: + vpc: + placement: + subnets: + from_tags: + org: bi + type: + - public + - private +``` + +network.vpc.placement.subnets`from_tags` Map of String та String або Array of Strings +Набори теґів, за якими фільтрувати підмережі, де Copilot повинен запускати завдання ECS. + +network.vpc.`security_groups` Array of Strings або Map +Додаткові ідентифікатори груп безпеки, повʼязані з вашими завданнями. + +```yaml +network: + vpc: + security_groups: [sg-0001, sg-0002] +``` + +Copilot включає групу безпеки, щоб контейнери у вашому середовищі могли спілкуватися один з одним. Щоб вимкнути стандартну групу безпеки, ви можете вказати форму `Map`: + +```yaml +network: + vpc: + security_groups: + deny_default: true + groups: [sg-0001, sg-0002] +``` + +network.vpc.security_groups.`from_cfn` String +Назва [експорту стека CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html). + +network.vpc.security_groups.`deny_default` Boolean +Вимкніть стандартну групу безпеки, яка дозволяє вхідний трафік від усіх сервісів у вашому середовищі. + +network.vpc.security_groups.`groups` Array of Strings +Додаткові ідентифікатори груп безпеки, повʼязані з вашими завданнями. + +network.vpc.security_groups.groups`from_cfn` String +Назва [експорту стека CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html). diff --git a/site/content/docs/include/network.uk.md b/site/content/docs/include/network.uk.md new file mode 100644 index 00000000000..78db83690dc --- /dev/null +++ b/site/content/docs/include/network.uk.md @@ -0,0 +1,14 @@ +
+ +`network` Map +Розділ `network` містить параметри для підключення до ресурсів AWS у VPC. + +network.`connect` Bool або Map +Увімкніть [Service Connect](../../developing/svc-to-svc-communication/#service-connect) для вашого сервісу, що робить трафік між сервісами збалансованим і більш стійким. Стандартно `false`. + +При використанні map, ви можете вказати, який псевдонім використовувати для цього сервісу. Зверніть увагу, що псевдонім має бути унікальним у межах середовища. + +network.connect.`alias` String +Користувацьке DNS-імʼя для цього сервісу, що експонується через Service Connect. Стандартно використовується імʼя сервісу. + +{% include 'network-vpc.uk.md' %} diff --git a/site/content/docs/include/nlb-additionallisteners.uk.md b/site/content/docs/include/nlb-additionallisteners.uk.md new file mode 100644 index 00000000000..c8f2a10d91c --- /dev/null +++ b/site/content/docs/include/nlb-additionallisteners.uk.md @@ -0,0 +1,46 @@ +??? note "nlb.additional_listeners Map" + nlb.additional_listeners.`port` String + Обовʼязковий. Додатковий порт та протокол, на якому буде прослуховувати Network Load Balancer. + + Підтримувані протоколи включають `tcp`, `udp` та `tls`. Якщо протокол не вказано, стандартно використовується `tcp`. + + nlb.additional_listeners.`healthcheck` Map + Вкажіть конфігурацію перевірки справності для вашого додаткового слухача на Network Load Balancer. + + ```yaml + nlb: + additional_listeners: + - healthcheck: + port: 80 + healthy_threshold: 3 + unhealthy_threshold: 2 + interval: 15s + timeout: 10s + ``` + + nlb.additional_listeners.healthcheck.`port` String + Порт, на який надсилаються запити перевірки справності. Вкажіть це, якщо перевірка справності повинна виконуватися на іншому порту, ніж цільовий порт контейнера. + + nlb.additional_listeners.healthcheck.`healthy_threshold` Integer + Кількість послідовних успішних перевірок справності, необхідних перед тим, як вважати несправну ціль справною. Стандартно - 3. Діапазон: 2-10. + + nlb.additional_listeners.healthcheck.`unhealthy_threshold` Integer + Кількість послідовних невдалих перевірок справності, необхідних перед тим, як вважати ціль несправною. Стандартно - 3. Діапазон: 2-10. + + nlb.additional_listeners.healthcheck.`interval` Duration + Приблизний час у секундах між перевірками справності окремої цілі. Значення може бути 10s або 30s. Стандартно - 30s. + + nlb.additional_listeners.healthcheck.`timeout` Duration + Час у секундах, протягом якого відсутність відповіді від цілі означає невдалу перевірку справності. Стандартно - 10s. + + nlb.additional_listeners.`target_container` String + Sidecar-контейнер, який заміняє контейнер сервісу. + + nlb.additional_listeners.`target_port` Integer + Порт контейнера, який приймає трафік. Вкажіть це поле, якщо порт контейнера відрізняється від `nlb.port`, порту слухача. + + nlb.additional_listeners.`ssl_policy` String + Політика безпеки, яка визначає, які протоколи та шифри підтримуються. Щоб дізнатися більше, перегляньте [цю документацію](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#describe-ssl-policies). + + nlb.additional_listeners.`stickiness` Boolean + Вказує, чи увімкнені липкі сесії. diff --git a/site/content/docs/include/nlb.uk.md b/site/content/docs/include/nlb.uk.md new file mode 100644 index 00000000000..31823bd91b3 --- /dev/null +++ b/site/content/docs/include/nlb.uk.md @@ -0,0 +1,92 @@ +
+ +`nlb` Map +Розділ nlb містить параметри, повʼязані з інтеграцією вашого сервісу з Network Load Balancer. + +Network Load Balancer активується лише якщо ви вказали поле `nlb`. Зауважте, що для Load-Balanced Web Service має бути увімкнений принаймні один із балансувальників навантаження — Application Load Balancer або Network Load Balancer. + +nlb.`port` String +Обовʼязковий параметр. Порт та протокол, які Network Load Balancer буде прослуховувати. + +Підтримувані протоколи включають `tcp`, `udp` та `tls`. Якщо протокол не вказано, стандартно використовується `tcp`. Наприклад: + +```yaml +nlb: + port: 80 +``` + +буде прослуховувати порт 80 для запитів `tcp`. Це те саме, що і + +```yaml +nlb: + port: 80/tcp +``` + +Ви можете легко увімкнути термінування TLS. Наприклад: + +```yaml +nlb: + port: 443/tls +``` + +nlb.`healthcheck` Map +Вкажіть конфігурацію перевірки стану для вашого Network Load Balancer. + +```yaml +nlb: + healthcheck: + port: 80 + healthy_threshold: 3 + unhealthy_threshold: 2 + interval: 15s + timeout: 10s +``` + +nlb.healthcheck.`port` String +Порт, на який надсилаються запити перевірки стану. Вкажіть це, якщо перевірка стану повинна виконуватися на іншому порту, ніж порт цільового контейнера. + +nlb.healthcheck.`healthy_threshold` Integer +Кількість послідовних успішних перевірок стану, необхідних для визнання несправної цілі справною. Стандартно 3. Діапазон: 2-10. + +nlb.healthcheck.`unhealthy_threshold` Integer +Кількість послідовних невдалих перевірок стану, необхідних для визнання цілі несправною. Стандартно 3. Діапазон: 2-10. + +nlb.healthcheck.`grace_period` Duration +Час, протягом якого ігноруються невдалі перевірки стану цільової групи при запуску контейнера. Стандартно 60s. Це може бути корисно для розвʼязання проблем з розгортанням контейнерів, які потребують часу для досягнення справного стану та початку прослуховування вхідних зʼєднань, або для прискорення розгортання контейнерів, які гарантовано швидко запускаються. + +!!! info "Інформація" + Відповідно до [документації](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-health-checks.html) на момент написання, 'unhealthy threshold' повинен дорівнювати 'healthy threshold' для Network Load Balancer. + +nlb.healthcheck.`interval` Duration +Приблизний час, у секундах, між перевірками стану окремої цілі. Значення може бути 10s або 30s. Стандартно 30s. + +nlb.healthcheck.`timeout` Duration +Час, у секундах, протягом якого відсутність відповіді від цілі означає невдалу перевірку стану. Стандартно 10s. + +nlb.`target_container` String +Контейнер-sidecar, який замінює контейнер сервісу. + +nlb.`target_port` Integer +Порт контейнера, який отримує трафік. Вкажіть це поле, якщо порт контейнера відрізняється від `nlb.port`, порту прослуховувача. + +nlb.`ssl_policy` String +Політика безпеки, яка визначає, які протоколи та шифри підтримуються. Щоб дізнатися більше, дивіться [цей документ](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#describe-ssl-policies). + +nlb.`stickiness` Boolean +Вказує, чи увімкнені сесії з липкістю. + +nlb.`alias` String or Array of Strings +Аліаси домену для вашого сервісу. + +```yaml +# Версія з рядком. +nlb: + alias: example.com +# Альтернативно, як масив рядків. +nlb: + alias: ["example.com", "v1.example.com"] +``` +nlb.`additional_listeners` Array of Maps +Налаштуйте кілька прослуховувачів NLB. + +{% include 'nlb-additionallisteners.uk.md' %} diff --git a/site/content/docs/include/observability.uk.md b/site/content/docs/include/observability.uk.md new file mode 100644 index 00000000000..1db6efc08cc --- /dev/null +++ b/site/content/docs/include/observability.uk.md @@ -0,0 +1,9 @@ +
+ +`observability` Map +Розділ `observability` дозволяє налаштувати способи вимірювання поточного стану вашого сервісу. На цей час підтримується лише конфігурація трасування. + +Для отримання додаткової інформації перегляньте сторінку [спостереження](../../developing/observability/). + +observability.`tracing` String +Постачальник для трасування. Зараз підтримується лише `awsxray`. diff --git a/site/content/docs/include/overrides-intro.uk.md b/site/content/docs/include/overrides-intro.uk.md new file mode 100644 index 00000000000..19e2c503aa5 --- /dev/null +++ b/site/content/docs/include/overrides-intro.uk.md @@ -0,0 +1,10 @@ +!!! Attention "Увага" + + :warning: Перевизначення шаблонів CloudFormation є розширеною функцією, яка може призвести до неуспішного розгортання ваших стеків. Будь ласка, використовуйте з обережністю! + +Copilot генерує шаблони CloudFormation використовуючи конфігурацію, визначену в [маніфесті](../../../manifest/overview/). +Однак, не всі властивості CloudFormation можна налаштувати в маніфесті. +Наприклад, ви можете захотіти налаштувати [`Ulimits`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html) +для вашого робочого контейнера, але ця властивість не доступна в маніфестах. + +Перевизначення за допомогою `yamlpatch` або `cdk` дозволяють додавати, видаляти або замінювати _будь-яку_ властивість чи ресурс у шаблоні CloudFormation. diff --git a/site/content/docs/include/platform.uk.md b/site/content/docs/include/platform.uk.md new file mode 100644 index 00000000000..c6102c4b916 --- /dev/null +++ b/site/content/docs/include/platform.uk.md @@ -0,0 +1,30 @@ +
+ +`platform` String або Map +Операційна система та архітектура (формат `[os]/[arch]`), які передаються з `docker build --platform`. Наприклад, `linux/arm64` або `windows/x86_64`. Стандартно використовується `linux/x86_64`. + +Перевизначте згенерований рядок, щоб створити з іншою дійсною `osfamily` або `architecture`. Наприклад, користувачі Windows можуть змінити рядок + +```yaml +platform: windows/x86_64 +``` + +який стандартно використовується `WINDOWS_SERVER_2019_CORE`, використовуючи map: + +```yaml +platform: + osfamily: windows_server_2019_full + architecture: x86_64 +``` + +```yaml +platform: + osfamily: windows_server_2022_core + architecture: x86_64 +``` + +```yaml +platform: + osfamily: windows_server_2022_full + architecture: x86_64 +``` diff --git a/site/content/docs/include/publish.uk.md b/site/content/docs/include/publish.uk.md new file mode 100644 index 00000000000..676a118b08a --- /dev/null +++ b/site/content/docs/include/publish.uk.md @@ -0,0 +1,53 @@ +
+ +`publish` Map +Розділ `publish` дозволяє сервісам публікувати повідомлення в одну або кілька тем SNS. + +```yaml +publish: + topics: + - name: orderEvents +``` + +У наведеному вище прикладі цей маніфест оголошує тему SNS з назвою `orderEvents`, на яку можуть підписатися інші робочі сервіси, розгорнуті в середовищі Copilot. Змінна середовища під назвою `COPILOT_SNS_TOPIC_ARNS` вставляється у ваше робоче навантаження як рядок JSON. + +На JavaScript ви можете написати: + +```js +const {orderEvents} = JSON.parse(process.env.COPILOT_SNS_TOPIC_ARNS) +``` + +Для отримання додаткової інформації дивіться сторінку [pub/sub](../../developing/publish-subscribe/). + +publish.`topics` Array of topics +Список обʼєктів [`topic`](#publish-topics-topic). + +publish.topics.`topic` Map +Містить конфігурацію для однієї теми SNS. + +publish.topics.topic.`name` String +Обовʼязково. Назва теми SNS. Повинна містити лише великі та малі літери, цифри, дефіси та підкреслення. + +publish.topics.topic.`fifo` Boolean or Map +Конфігурація теми SNS FIFO (перший прийшов, перший пішов). +Якщо ви вкажете `true`, Copilot створить тему з упорядкуванням FIFO. + +```yaml +publish: + topics: + - name: mytopic + fifo: true +``` + +Альтернативно, ви також можете налаштувати розширені параметри теми SNS FIFO. + +```yaml +publish: + topics: + - name: mytopic + fifo: + content_based_deduplication: true +``` + +publish.topics.topic.fifo.`content_based_deduplication` Boolean +Якщо тіло повідомлення гарантовано є унікальним для кожного опублікованого повідомлення, ви можете увімкнути дедуплікацію на основі вмісту для теми SNS FIFO. diff --git a/site/content/docs/include/secrets.uk.md b/site/content/docs/include/secrets.uk.md new file mode 100644 index 00000000000..3a428f0ba14 --- /dev/null +++ b/site/content/docs/include/secrets.uk.md @@ -0,0 +1,7 @@ +
+ +`secrets` Map +Пари ключ-значення, які представляють секретні значення з [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) або [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html), які будуть безпечно передані вашому сервісу як змінні середовища. + +secrets.`from_cfn` String +Назва [експорту стека CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html). diff --git a/site/content/docs/include/sidecar-config.uk.md b/site/content/docs/include/sidecar-config.uk.md new file mode 100644 index 00000000000..dfaf3af21f5 --- /dev/null +++ b/site/content/docs/include/sidecar-config.uk.md @@ -0,0 +1,78 @@ +`port` Integer +Порт контейнера, який потрібно експонувати (необовʼязково). + +`image` String або Map +URL-адреса образу для sidecar-контейнера (обовʼязково). + +{% include 'image-config.uk.md' %} + +`essential` Bool +Чи є sidecar-контейнер (essential) контейнером (необовʼязково, Стандартно true). + +`credentialsParameter` String +ARN секрету, що містить облікові дані приватного репозиторію (необовʼязково). + +`variables` Map +Змінні середовища для sidecar-контейнера (необовʼязково) + +`secrets` Map +Секрети для передачі в sidecar-контейнер (необовʼязково) + +`env_file` String +Шлях до файлу з кореневої теки вашого робочого простору, що містить змінні середовища для передачі в sidecar-контейнер. Для отримання додаткової інформації про файл змінних середовища див. [Особливості визначення файлів змінних середовища](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html#taskdef-envfiles-considerations). + +`mount_points` Array of Maps +Точки монтування для томів EFS, визначених на рівні сервісу (необовʼязково). + +mount_points.`source_volume` String +Том джерела для монтування в цьому sidecar (обовʼязково). + +mount_points.`path` String +Шлях всередині sidecar-контейнера, куди монтується том (обовʼязково). + +mount_points.`read_only` Boolean +Чи дозволяти sidecar доступ тільки для читання до тому (стандартно true). + +`labels` Map +Docker-мітки для застосування до цього контейнера (необовʼязково). + +`depends_on` Map +Залежності контейнера для застосування до цього контейнера (необовʼязково). + +`entrypoint` String або Масив String +Перевизначає стандартну точку входу в sidecar. + +```yaml +# Вкрсія з рядком. +entrypoint: "/bin/entrypoint --p1 --p2" +# Або, з масивом рядків. +entrypoint: ["/bin/entrypoint", "--p1", "--p2"] +``` + +`command` String або Масив String +Перевизначає стандартну команду в sidecar. + +```yaml +# Вкрсія з рядком. +command: ps au +# Або, з масивом рядків. +command: ["ps", "au"] +``` + +`healthcheck` Map +Необовʼязкова конфігурація для перевірки стану sidecar-контейнера. + +healthcheck.`command` Array of Strings +Команда для виконання, щоб визначити, чи є sidecar-контейнер справним. Масив рядків може починатися з `CMD` для виконання аргументів команди безпосередньо або `CMD-SHELL` для виконання команди з використанням стандартної оболонки контейнера. + +healthcheck.`interval` Duration +Період часу між перевірками стану, у секундах. Стандартно 10с. + +healthcheck.`retries` Integer +Кількість спроб перед тим, як контейнер буде визнано несправним. Стандартно 2. + +healthcheck.`timeout` Duration +Час очікування перед тим, як вважати перевірку стану невдалою, у секундах. Стандартно 5с. + +healthcheck.`start_period` Duration +Тривалість періоду очікування для контейнерів перед тим, як невдалі перевірки стану будуть враховані в максимальну кількість спроб. Стандартно 0с. diff --git a/site/content/docs/include/storage.uk.md b/site/content/docs/include/storage.uk.md new file mode 100644 index 00000000000..5de707934ea --- /dev/null +++ b/site/content/docs/include/storage.uk.md @@ -0,0 +1,88 @@ +
+ +`storage` Map +Розділ Storage дозволяє вам вказати зовнішні томи EFS для монтування ваших контейнерів та sidecar. Це дозволяє отримати доступ до постійного сховища через зони доступності в регіоні для обробки даних або робочих навантажень CMS. Для отримання додаткової інформації дивіться сторінку [storage](../../developing/storage/). Ви також можете вказати розширюване ефемерне сховище на рівні завдання. + +storage.`ephemeral` Int +Вкажіть, скільки ефемерного сховища завдання потрібно виділити в GiB. Стандартне значення та мінімальне значення — 20 GiB. Максимальний розмір — 200 GiB. Розміри понад 20 GiB призводять до додаткових витрат. + +Щоб створити спільний файловий контекст між основним контейнером та sidecar, ви можете використовувати порожній том: + +```yaml +storage: + ephemeral: 100 + volumes: + scratch: + path: /var/data + read_only: false + +sidecars: + mySidecar: + image: public.ecr.aws/my-image:latest + mount_points: + - source_volume: scratch + path: /var/data + read_only: false +``` + +Цей приклад виділить 100 GiB сховища, яке буде спільно використовуватися між sidecar та контейнером завдання. Це може бути корисним для великих наборів даних або для використання sidecar для передачі даних з EFS у сховище завдань для робочих навантажень з високими вимогами до дискового вводу/виводу. + +storage.`readonly_fs` Boolean +Вкажіть true, щоб надати вашому контейнеру доступ лише для читання до його кореневої файлової системи. + +storage.`volumes` Map +Вкажіть імʼя та конфігурацію будь-яких томів EFS, які ви хочете підключити. Поле `volumes` вказується у вигляді map наступного формату: + +```yaml +volumes: + : + path: "/etc/mountpath" + efs: + ... +``` + +storage.volumes.`` Map +Вкажіть конфігурацію тому. + +storage.volumes.``.`path` String +Обовʼязково. Вкажіть місце в контейнері, де ви хочете змонтувати ваш том. Має бути не більше 242 символів і складатися лише з символів `a-zA-Z0-9.-_/`. + +storage.volumes.``.`read_only` Boolean +Необовʼязково. Стандартно `true`. Визначає, чи є том лише для читання, чи ні. Якщо false, контейнер отримує дозволи `elasticfilesystem:ClientWrite` на файлову систему, і том стає записуваним. + +storage.volumes.``.`efs` Boolean or Map +Вкажіть більш детальну конфігурацію EFS. Якщо вказано як boolean або використовуючи лише підполя `uid` та `gid`, створюється керована файлова система EFS та виділена точка доступу для цього робочого навантаження. + +```yaml +// Проста керована EFS +efs: true + +// Керована EFS з користувацькою POSIX інформацією +efs: + uid: 10000 + gid: 110000 +``` + +storage.volumes.``.efs.`id` String +Обовʼязково. Ідентифікатор файлової системи, яку ви хочете змонтувати. + +storage.volumes.``.efs.id.`from_cfn` String Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Імʼя [експорту стека CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html). + +storage.volumes.``.efs.`root_dir` String +Необов'язково. Стандартно `/`. Вкажіть місце у файловій системі EFS, яке ви хочете використовувати як корінь вашого тому. Має бути не більше 255 символів і складатися лише з символів `a-zA-Z0-9.-_/`. Якщо використовується точка доступу, `root_dir` має бути або порожнім, або `/`, і `auth.iam` має бути `true`. + +storage.volumes.``.efs.`uid` Uint32 +Необовʼязково. Має бути вказано разом з `gid`. Конфліктує з `root_dir`, `auth` та `id`. POSIX UID для використання у виділеній точці доступу, створеній для керованої файлової системи EFS. + +storage.volumes.``.efs.`gid` Uint32 +Необовʼязково. Має бути вказано разом з `uid`. Конфліктує з `root_dir`, `auth` та `id`. POSIX GID для використання у виділеній точці доступу, створеній для керованої файлової системи EFS. + +storage.volumes.``.efs.`auth` Map +Вкажіть розширену конфігурацію авторизації для EFS. + +storage.volumes.``.efs.auth.`iam` Boolean +Необовʼязково. Стандартно `true`. Чи використовувати авторизацію IAM для визначення, чи дозволено тому підключатися до EFS. + +storage.volumes.``.efs.auth.`access_point_id` String +Необовʼязково. Стандартно `""`. Ідентифікатор точки доступу EFS для підключення. Якщо використовується точка доступу, `root_dir` має бути або порожнім, або `/`, і `auth.iam` має бути `true`. diff --git a/site/content/docs/include/task-size.uk.md b/site/content/docs/include/task-size.uk.md new file mode 100644 index 00000000000..150dc17c7f0 --- /dev/null +++ b/site/content/docs/include/task-size.uk.md @@ -0,0 +1,9 @@ +
+ +`cpu` Integer +Кількість одиниць CPU для завдання. Дивіться [документацію Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html) для дійсних значень CPU. + +
+ +`memory` Integer +Кількість памʼяті в MiB, що використовується завданням. Дивіться [документацію Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html) для дійсних значень памʼяті. diff --git a/site/content/docs/include/taskdef-overrides.uk.md b/site/content/docs/include/taskdef-overrides.uk.md new file mode 100644 index 00000000000..37e0a8c56a6 --- /dev/null +++ b/site/content/docs/include/taskdef-overrides.uk.md @@ -0,0 +1,10 @@ +
+ +`taskdef_overrides` Array of Rules +Секція `taskdef_overrides` дозволяє користувачам застосовувати правила перевизначення до їхніх визначень завдань ECS (дивіться приклади [тут](../../developing/overrides/taskdef-overrides/d#examples)). + +taskdef_overrides.`path` String +Обовʼязково. Шлях до поля визначення завдання, яке потрібно перевизначити. + +taskdef_overrides.`value` Any +Обовʼязково. Значення поля визначення завдання, яке потрібно перевизначити. diff --git a/site/content/docs/manifest/backend-service.uk.md b/site/content/docs/manifest/backend-service.uk.md new file mode 100644 index 00000000000..850430e658e --- /dev/null +++ b/site/content/docs/manifest/backend-service.uk.md @@ -0,0 +1,398 @@ +--- +title: "Backend Service" +--- + +# Backend Service + +Список всіх доступних властивостей для маніфесту `'Backend Service'`. Щоб дізнатися про сервіси Copilot, дивіться сторінку концепції [Сервіси](../../concepts/services/). + +???+ note "Приклади маніфестів сервісу бекенду" + + === "Обслуговування внутрішнього трафіку" + + ```yaml + name: api + type: Backend Service + + image: + build: ./api/Dockerfile + port: 8080 + healthcheck: + command: ["CMD-SHELL", "curl -f http://localhost:8080 || exit 1"] + interval: 10s + retries: 2 + timeout: 5s + start_period: 0s + + network: + connect: true + + cpu: 256 + memory: 512 + count: 2 + exec: true + + env_file: ./api/.env + environments: + test: + deployment: + rolling: "recreate" + count: 1 + ``` + + === "Внутрішній балансувальник навантаження застосунків" + + ```yaml + # Ваш сервіс доступний за адресою: + # http://api.${COPILOT_ENVIRONMENT_NAME}.${COPILOT_APPLICATION_NAME}.internal + # за внутрішнім балансувальником навантаження лише у вашій VPC. + name: api + type: Backend Service + + image: + build: ./api/Dockerfile + port: 8080 + + http: + path: '/' + healthcheck: + path: '/_healthcheck' + success_codes: '200,301' + healthy_threshold: 3 + interval: 15s + timeout: 10s + grace_period: 30s + deregistration_delay: 50s + + network: + vpc: + placement: 'private' + + count: + range: 1-10 + cpu_percentage: 70 + requests: 10 + response_time: 2s + + secrets: + GITHUB_WEBHOOK_SECRET: GH_WEBHOOK_SECRET + DB_PASSWORD: + secretsmanager: 'mysql:password::' + ``` + + === "З доменом" + + ```yaml + # Припускаючи, що у вашому середовищі імпортовані приватні сертифікати, ви можете призначити + # HTTPS кінцеву точку для вашого сервісу. + # Дивіться https://aws.github.io/copilot-cli/docs/manifest/environment/#http-private-certificates + name: api + type: Backend Service + + image: + build: ./api/Dockerfile + port: 8080 + + http: + path: '/' + alias: 'v1.api.example.com' + hosted_zone: AN0THE9H05TED20NEID # Вставте запис для v1.api.example.com в зону хостингу. + + count: 1 + ``` + + === "Подієво-орієнтований" + + ```yaml + # Дивіться https://aws.github.io/copilot-cli/docs/developing/publish-subscribe/ + name: warehouse + type: Backend Service + + image: + build: ./warehouse/Dockerfile + port: 80 + + publish: + topics: + - name: 'inventory' + - name: 'orders' + fifo: true + + variables: + DDB_TABLE_NAME: 'inventory' + + count: + range: 3-5 + cpu_percentage: 70 + memory_percentage: 80 + ``` + + === "Спільна файлова система" + + ```yaml + # Дивіться http://localhost:8000/copilot-cli/docs/developing/storage/#file-systems + name: sync + type: Backend Service + + image: + build: Dockerfile + + variables: + S3_BUCKET_NAME: my-userdata-bucket + + storage: + volumes: + userdata: + path: /etc/mount1 + efs: + id: fs-1234567 + ``` + + === "Відкриття кількох портів" + + ```yaml + name: 'backend' + type: 'Backend Service' + + image: + build: './backend/Dockerfile' + port: 8080 + + http: + path: '/' + target_port: 8083 # Трафік на "/" перенаправляється до головного контейнера, на порт 8083. + additional_rules: + - path: 'customerdb' + target_port: 8081 # Трафік на "/customerdb" перенаправляється до головного контейнера, на порт 8081. + - path: 'admin' + target_port: 8082 # Трафік на "/admin" перенаправляється до побічного контейнера "envoy", на порт 8082. + target_container: envoy + + sidecars: + envoy: + port: 80 + image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/envoy-proxy-with-selfsigned-certs:v1 + ``` + +`name` String +Назва вашого сервісу. + +
+ +`type` String +Тип архітектури вашого сервісу. [Сервіси бекенду](../../concepts/services/#backend-service) недоступні з інтернету, але можуть бути досягнуті за допомогою [виявлення сервісу](../../developing/svc-to-svc-communication/#service-discovery) з ваших інших сервісів. + +
+ +`http` Map +Розділ http містить параметри, повʼязані з інтеграцією вашого сервісу з внутрішнім балансувальником навантаження застосунків. + +http.`path` String +Запити до цього шляху будуть перенаправлені до вашого сервісу. Кожен сервіс бекенду повинен слухати на унікальному шляху. + +http.`alb` String Додано у [v1.33.0](../../../blogs/release-v133/#imported-albs) +ARN або назва наявного внутрішнього ALB для імпорту. Правила слухача будуть додані до ваших слухачів. Copilot не буде керувати ресурсами, повʼязаними з DNS, такими як сертифікати. + +{% include 'http-healthcheck.uk.md' %} + +http.`deregistration_delay` Duration +Час очікування для зняття реєстрації цілей під час зняття реєстрації. Стандартно 60s. Встановлення цього значення на більше значення дає цілям більше часу для належного завершення зʼєднань, але збільшує час, необхідний для нових розгортань. Діапазон 0s-3600s. + +http.`target_container` String +Sidecar контейнер, до якого перенаправляються запити замість головного контейнера сервісу. Якщо порт цільового контейнера встановлено на `443`, тоді протокол встановлюється як `HTTPS`, щоб балансувальник навантаження встановлював TLS зʼєднання з завданнями Fargate, використовуючи сертифікати, які ви встановлюєте на цільовий контейнер. + +http.`stickiness` Boolean +Вказує, чи ввімкнені липкі сесії. + +http.`allowed_source_ips` Array of Strings +CIDR IP адреси, яким дозволено доступ до вашого сервісу. + +```yaml +http: + allowed_source_ips: ["192.0.2.0/24", "198.51.100.10/32"] +``` + +http.`alias` String або Array of Strings або Array of Maps +HTTPS доменний псевдонім вашого сервісу. + +```yaml +# Значення рядок. +http: + alias: example.com +# Обо масив рядків. +http: + alias: ["example.com", "v1.example.com"] +# Чи масив з map. +http: + alias: + - name: example.com + hosted_zone: Z0873220N255IR3MTNR4 + - name: v1.example.com + hosted_zone: AN0THE9H05TED20NEID +``` +http.`hosted_zone` String +ID наявної приватної зони хостингу, в яку Copilot вставить запис псевдоніма після створення внутрішнього балансувальника навантаження, зіставляючи імʼя псевдоніма з DNS-імʼям LB. Повинно використовуватися з `alias`. + +```yaml +http: + alias: example.com + hosted_zone: Z0873220N255IR3MTNR4 +# Також дивіться приклад http.alias масив з map вище. +``` + +http.`version` String +Версія протоколу HTTP(S). Повинна бути однією з `'grpc'`, `'http1'` або `'http2'`. Якщо не вказано, то передбачається `'http1'`. Якщо використовується gRPC, зверніть увагу, що домен повинен бути повʼязаний з вашим застосунком. + +http.`additional_rules` Array of Maps +Налаштуйте кілька правил слухача ALB. + +{% include 'http-additionalrules.uk.md' %} + +{% include 'image-config-with-port.uk.md' %} + +Якщо порт встановлено на `443` і ввімкнено внутрішній балансувальник навантаження за допомогою `http`, тоді протокол встановлюється як `HTTPS`, щоб балансувальник навантаження встановлював TLS зʼєднання з завданнями Fargate, використовуючи сертифікати, які ви встановлюєте на контейнер. + +{% include 'image-healthcheck.uk.md' %} + +{% include 'task-size.uk.md' %} + +{% include 'platform.uk.md' %} + +
+ +`count` Integer або Map +Кількість завдань, які ваш сервіс повинен підтримувати. + +Якщо ви вказуєте число: + +```yaml +count: 5 +``` + +Сервіс встановить бажану кількість на 5 і підтримуватиме 5 завдань у вашому сервісі. + +count.`spot` Integer + +Якщо ви хочете використовувати можливість Fargate Spot для запуску ваших сервісів, ви можете вказати число в підполі `spot`: + +```yaml +count: + spot: 5 +``` + +!!! info "Інформація" + Fargate Spot не підтримується для контейнерів, що працюють на архітектурі ARM. + +
+ +Альтернативно, ви можете вказати map для налаштування автомасштабування + +```yaml +count: + range: 1-10 + cooldown: + in: 30s + cpu_percentage: 70 + memory_percentage: + value: 80 + cooldown: + out: 45s + requests: 10000 + response_time: 2s +``` + +count.`range` String або Map +Ви можете вказати мінімальну та максимальну межу для кількості завдань, які ваш сервіс повинен підтримувати, на основі значень, які ви вказуєте для метрик. + +```yaml +count: + range: n-m +``` + +Це налаштує ціль автомасштабування застосунків з `MinCapacity` `n` та `MaxCapacity` `m`. + +Альтернативно, якщо ви хочете масштабувати свій сервіс на екземпляри Fargate Spot, вкажіть `min` і `max` в `range`, а потім вкажіть `spot_from` з бажаною кількістю, з якої ви хочете почати розміщувати свої сервіси в Spot. Наприклад: + +```yaml +count: + range: + min: 1 + max: 10 + spot_from: 3 +``` + +Це встановить ваш діапазон як 1-10, як вище, але розмістить перші дві копії вашого сервісу на виділеній потужності Fargate. Якщо ваш сервіс масштабується до 3 або більше, третя та будь-які додаткові копії будуть розміщені на Spot до досягнення максимуму. + +count.range.`min` Integer +Мінімальна бажана кількість для вашого сервісу за допомогою автомасштабування. + +count.range.`max` Integer +Максимальна бажана кількість для вашого сервісу за допомогою автомасштабування. + +count.range.`spot_from` Integer +Бажана кількість, з якої ви хочете почати розміщувати свій сервіс за допомогою провайдерів потужностей Fargate Spot. + +count.`cooldown` Map +Поля охолодження, які використовуються як стандартне охолодження для всіх полів автомасштабування, що вказані. + +count.cooldown.`in` Duration +Час охолодження для полів автомасштабування для збільшення масштабу сервісу. + +count.cooldown.`out` Duration +Час охолодження для полів автомасштабування для зменшення масштабу сервісу. + +Наступні опції `cpu_percentage`, `memory_percentage`, `requests` та `response_time` є полями автомасштабування для `count`, які можуть бути визначені як значення поля або як map, що містить розширену інформацію про значення поля та охолодження: + +```yaml +value: 50 +cooldown: + in: 30s + out: 60s +``` + +Вказане тут охолодження перевизначить стандартне охолодження. + +count.`cpu_percentage` Integer або Map +Масштабування вгору або вниз на основі середнього значення CPU, яке ваш сервіс повинен підтримувати. + +count.`memory_percentage` Integer або Map +Масштабування вгору або вниз на основі середнього значення памʼяті, яке ваш сервіс повинен підтримувати. + +count.`requests` Integer або Map +Масштабування вгору або вниз на основі кількості запитів, оброблених кожним завданням. + +count.`response_time` Duration або Map +Масштабування вгору або вниз на основі середнього часу відповіді сервісу. + +{% include 'exec.uk.md' %} + +{% include 'deployment.uk.md' %} + +```yaml +deployment: + rollback_alarms: + cpu_utilization: 70 // Відсоткове значення, при якому або вище якого спрацьовує тривога. + memory_utilization: 50 // Відсоткове значення, при якому або вище якого спрацьовує тривога. +``` + +{% include 'entrypoint.uk.md' %} + +{% include 'command.uk.md' %} + +{% include 'network.uk.md' %} + +{% include 'envvars.uk.md' %} + +{% include 'secrets.uk.md' %} + +{% include 'storage.uk.md' %} + +{% include 'publish.uk.md' %} + +{% include 'logging.uk.md' %} + +{% include 'observability.uk.md' %} + +{% include 'taskdef-overrides.uk.md' %} + +{% include 'environments.uk.md' %} diff --git a/site/content/docs/manifest/environment.uk.md b/site/content/docs/manifest/environment.uk.md new file mode 100644 index 00000000000..4abf8e846bf --- /dev/null +++ b/site/content/docs/manifest/environment.uk.md @@ -0,0 +1,378 @@ +--- +title: "Environment" +--- + +# Environment + +Список всіх доступних властивостей для маніфесту `'Environment'`. +Щоб дізнатися більше про середовища Copilot, дивіться сторінку концепції [Середовища](../../concepts/environments/). + +???+ note "Приклади маніфестів середовища" + + === "Базовий" + + ```yaml + name: prod + type: Environment + observability: + container_insights: true + ``` + + === "Імпортований VPC" + + ```yaml + name: imported + type: Environment + network: + vpc: + id: 'vpc-12345' + subnets: + public: + - id: 'subnet-11111' + - id: 'subnet-22222' + private: + - id: 'subnet-33333' + - id: 'subnet-44444' + ``` + + === "Налаштований VPC" + + ```yaml + name: qa + type: Environment + network: + vpc: + cidr: '10.0.0.0/16' + subnets: + public: + - cidr: '10.0.0.0/24' + az: 'us-east-2a' + - cidr: '10.0.1.0/24' + az: 'us-east-2b' + private: + - cidr: '10.0.3.0/24' + az: 'us-east-2a' + - cidr: '10.0.4.0/24' + az: 'us-east-2b' + ``` + + === "З публічними сертифікатами" + + ```yaml + name: prod-pdx + type: Environment + http: + public: # Застосувати існуючий сертифікат до публічного балансувальника навантаження. + certificates: + - arn:aws:acm:${AWS_REGION}:${AWS_ACCOUNT_ID}:certificate/13245665-cv8f-adf3-j7gd-adf876af95 + ``` + + === "Приватний" + + ```yaml + name: onprem + type: Environment + network: + vpc: + id: 'vpc-12345' + subnets: + private: + - id: 'subnet-11111' + - id: 'subnet-22222' + - id: 'subnet-33333' + - id: 'subnet-44444' + http: + private: # Застосувати існуючий сертифікат до приватного балансувальника навантаження. + certificates: + - arn:aws:acm:${AWS_REGION}:${AWS_ACCOUNT_ID}:certificate/13245665-cv8f-adf3-j7gd-adf876af95 + subnets: ['subnet-11111', 'subnet-22222'] + ``` + + === "Мережа доставки контенту" + + ```yaml + name: cloudfront + type: Environment + cdn: true + http: + public: + ingress: + cdn: true + ``` + +`name` String +Назва вашого середовища. + +
+ +`type` String +Має бути встановлено як `'Environment'`. + +
+ +`network` Map +Розділ мережі містить параметри для імпорту наявного VPC або налаштування VPC, створеного Copilot. + +network.`vpc` Map +Розділ vpc містить параметри для налаштування параметрів CIDR та підмереж. + +network.vpc.`id` String +Ідентифікатор VPC для імпорту. Це поле конфліктує з `cidr`. + +network.vpc.`cidr` String +Блок IPv4 CIDR, який потрібно асоціювати з VPC, створеним Copilot. Це поле конфліктує з `id`. + +network.vpc.`subnets` Map +Налаштуйте публічні та приватні підмережі у VPC. + +Наприклад, якщо ви імпортуєте наявний VPC: + +```yaml +network: + vpc: + id: 'vpc-12345' + subnets: + public: + - id: 'subnet-11111' + - id: 'subnet-22222' +``` + +Або, якщо ви налаштовуєте VPC, створений Copilot: + +```yaml +network: + vpc: + cidr: '10.0.0.0/16' + subnets: + public: + - cidr: '10.0.0.0/24' + az: 'us-east-2a' + - cidr: '10.0.1.0/24' + az: 'us-east-2b' +``` + +network.vpc.subnets.`public` Array of Subnets +Список конфігурацій публічних підмереж. + +network.vpc.subnets.`private` Array of Subnets +Список конфігурацій приватних підмереж. + +network.vpc.subnets..`id` String +Ідентифікатор підмережі для імпорту. Це поле конфліктує з `cidr` та `az`. + +network.vpc.subnets..`cidr` String +Блок IPv4 CIDR, призначений підмережі. Це поле конфліктує з `id`. + +network.vpc.subnets..`az` String +Назва зони доступності, призначена підмережі. Поле `az` є необовʼязковим, стандартно зони доступності призначаються в алфавітному порядку. +Це поле конфліктує з `id`. + +network.vpc.`security_group` Map +Правила для групи безпеки середовища. + +```yaml +network: + vpc: + security_group: + ingress: + - ip_protocol: tcp + ports: 80 + cidr: 0.0.0.0/0 +``` + +network.vpc.security_group.`ingress` Array of Security Group Rules +Список правил вхідного трафіку для групи безпеки. + +network.vpc.security_group.`egress` Array of Security Group Rules +Список правил вихідного трафіку для групи безпеки. + + +network.vpc.security_group..`ip_protocol` String +Назва або номер IP-протоколу. + +network.vpc.security_group..`ports` String або Integer +Діапазон або номер порту для правила групи безпеки. + +```yaml +ports: 0-65535 +``` + +або + +```yaml +ports: 80 +``` + +network.vpc.security_group..`cidr` String +Діапазон IP-адрес у форматі CIDR. + +network.vpc.`flow_logs` Boolean or Map +Якщо ви вказуєте 'true', Copilot увімкне журнали потоку VPC для захоплення інформації про IP-трафік, що входить і виходить з VPC середовища. +Стандартне значення для журналів потоку VPC — 14 днів (2 тижні). + +```yaml +network: + vpc: + flow_logs: on +``` + +Ви можете налаштувати кількість днів для збереження: + +```yaml +network: + vpc: + flow_logs: + retention: 30 +``` + +network.vpc.flow_logs.`retention` String +Кількість днів для збереження подій журналу. Дивіться [цю сторінку](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-loggroup.html#cfn-logs-loggroup-retentionindays) для всіх прийнятних значень. + +
+ +`cdn` Boolean or Map +Розділ cdn містить параметри, повʼязані з інтеграцією вашого сервісу з розподілом CloudFront. Щоб увімкнути розподіл CloudFront, вкажіть `cdn: true`. + +cdn.`certificate` String +Сертифікат, за допомогою якого можна увімкнути HTTPS-трафік на розподілі CloudFront. +CloudFront вимагає, щоб імпортовані сертифікати були в регіоні `us-east-1`. Наприклад: + +```yaml +cdn: + certificate: "arn:aws:acm:us-east-1:1234567890:certificate/e5a6e114-b022-45b1-9339-38fbfd6db3e2" +``` + +cdn.`static_assets` Map +Необовʼязково. Конфігурація для статичних активів, повʼязаних з CloudFront. + +cdn.static_assets.`alias` String +Додатковий HTTPS-доменний псевдонім для використання для статичних активів. + +cdn.static_assets.`location` String +Доменне імʼя DNS для S3 кошику (наприклад, `EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com`). + +cdn.static_assets.`path` String +Шаблон шляху (наприклад, `static/*`), який вказує, які запити повинні бути перенаправлені до S3 кошику. + +cdn.`terminate_tls` Boolean +Увімкнути завершення TLS для CloudFront. + +
+ +`http` Map +Розділ http містить параметри для налаштування публічного балансувальника навантаження, який використовується [Load Balanced Web Services](../lb-web-service/) +та внутрішнього балансувальника навантаження, який використовується [Backend Services](../backend-service/). + +http.`public` Map +Конфігурація для публічного балансувальника навантаження. + +http.public.`certificates` Array of Strings +Список [публічних сертифікатів AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) ARNs. +Додаючи публічні сертифікати до вашого балансувальника навантаження, ви можете асоціювати ваші Load Balanced Web Services з доменним іменем і досягати їх за допомогою HTTPS. +Дивіться [Розробка/Домени](../../developing/domain/#use-domain-in-your-existing-validated-certificates) для отримання додаткової інформації про те, як повторно розгортати служби, використовуючи [`http.alias`](../lb-web-service/#http-alias). + +http.public.`access_logs` Boolean or Map +Увімкнути [журнали доступу Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html). +Якщо ви вказуєте `true`, Copilot створить S3 кошик, де публічний балансувальник навантаження буде зберігати журнали доступу. + +```yaml +http: + public: + access_logs: true +``` + +Ви можете налаштувати префікс журналу: + +```yaml +http: + public: + access_logs: + prefix: access-logs +``` + +Також можливо використовувати ваш власний S3 кошик замість того, щоб дозволити Copilot створити його для вас: + +```yaml +http: + public: + access_logs: + bucket_name: my-bucket + prefix: access-logs +``` + +http.public.access_logs.`bucket_name` String +Назва наявного S3 кошику, в якому зберігати журнали доступу. + +http.public.access_logs.`prefix` String +Префікс для обʼєктів журналу. + +http.public.`ssl_policy` String +Необовʼязково. Вказує політику SSL для HTTPS-слухача вашого публічного балансувальника навантаження, коли це застосовне. + +http.public.`ingress` MapЗмінено у [v1.23.0](../../../blogs/release-v123/#move-misplaced-http-fields-in-environment-manifest-backward-compatible) +Правила вхідного трафіку для обмеження трафіку публічного балансувальника навантаження. + +```yaml +http: + public: + ingress: + cdn: true +``` + +???- note " "http.public.ingress" раніше було "http.public.security_groups.ingress"" + Це поле було `http.public.security_groups.ingress` до [v1.23.0](../../../blogs/release-v123/). + Ця зміна вплинула на дочірнє поле [`cdn`](#http-public-ingress-cdn) (єдине дочірнє поле на той час), яке раніше було `http.public.security_groups.ingress.restrict_to.cdn`. + Для отримання додаткової інформації дивіться [блог-пост для v1.23.0](../../../blogs/release-v123/#move-misplaced-http-fields-in-environment-manifest-backward-compatible). + +http.public.ingress.`cdn` BooleanЗмінено у [v1.23.0](../../../blogs/release-v123/#move-misplaced-http-fields-in-environment-manifest-backward-compatible) +Обмежити вхідний трафік для публічного балансувальника навантаження, щоб він надходив з розподілу CloudFront. + +http.public.ingress.`source_ips` Array of Strings +Обмежити вхідний трафік публічного балансувальника навантаження до вихідних IP-адрес. + +```yaml +http: + public: + ingress: + source_ips: ["192.0.2.0/24", "198.51.100.10/32"] +``` + +http.`private` Map +Конфігурація для внутрішнього балансувальника навантаження. + +http.private.`certificates` Array of Strings +Список [сертифікатів AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/gs.html) ARNs. +Додаючи публічні або приватні сертифікати до вашого балансувальника навантаження, ви можете асоціювати ваші Backend Services з доменним іменем і досягати їх за допомогою HTTPS. +Дивіться [Розробка/Домени](../../developing/domain/#use-domain-in-your-existing-validated-certificates) для отримання додаткової інформації про те, як повторно розгортати служби, використовуючи [`http.alias`](../backend-service/#http-alias). + +http.private.`subnets` Array of Strings +Ідентифікатори підмереж для розміщення внутрішнього балансувальника навантаження. + +http.private.`ingress` MapЗмінено у [v1.23.0](../../../blogs/release-v123/#move-misplaced-http-fields-in-environment-manifest-backward-compatible) +Правила вхідного трафіку для внутрішнього балансувальника навантаження. +```yaml +http: + private: + ingress: + vpc: true # Увімкнути вхідний трафік у межах VPC до внутрішнього балансувальника навантаження. +``` + +???- note " "http.private.ingress" раніше було "http.private.security_groups.ingress"" + Це поле було `http.private.security_groups.ingress` до [v1.23.0](../../../blogs/release-v123/). + Ця зміна вплинула на дочірнє поле [`vpc`](#http-private-ingress-vpc) (єдине дочірнє поле на той час), + яке раніше було `http.private.security_groups.ingress.from_vpc`. + Для отримання додаткової інформації дивіться [блог-пост для v1.23.0](../../../blogs/release-v123/#move-misplaced-http-fields-in-environment-manifest-backward-compatible). + +http.private.ingress.`vpc` BooleanЗмінено у [v1.23.0](../../../blogs/release-v123/#move-misplaced-http-fields-in-environment-manifest-backward-compatible) +Увімкнути трафік з меж VPC до внутрішнього балансувальника навантаження. + +http.private.`ssl_policy` String +Необовʼязково. Вказує політику SSL для HTTPS-слухача вашого внутрішнього балансувальника навантаження, коли це застосовне. + +
+ +`observability` Map +Розділ спостережуваності дозволяє налаштувати способи збору даних про служби та завдання, розгорнуті у вашому середовищі. + +observability.`container_insights` Bool +Чи увімкнути [CloudWatch container insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) у кластері ECS вашого середовища. diff --git a/site/content/docs/manifest/lb-web-service.uk.md b/site/content/docs/manifest/lb-web-service.uk.md new file mode 100644 index 00000000000..e538aa2cbb7 --- /dev/null +++ b/site/content/docs/manifest/lb-web-service.uk.md @@ -0,0 +1,507 @@ +--- +title: "Вебсервіс з балансуванням навантаження" +--- + +# Вебсервіс з балансуванням навантаження + +Список усіх доступних властивостей для маніфесту 'Load Balanced Web Service'. Щоб дізнатися більше про сервіси Copilot, перегляньте сторінку концепцій [Сервіси](../../concepts/services/). + +???+ note "Приклади маніфестів для сервісу з доступом до інтернету" + + === "Базовий" + + ```yaml + name: 'frontend' + type: 'Load Balanced Web Service' + + image: + build: './frontend/Dockerfile' + port: 8080 + + http: + path: '/' + healthcheck: '/_healthcheck' + + cpu: 256 + memory: 512 + count: 3 + exec: true + + variables: + LOG_LEVEL: info + secrets: + GITHUB_TOKEN: GITHUB_TOKEN + DB_SECRET: + secretsmanager: 'mysql' + ``` + + === "З доменом" + + ```yaml + name: 'frontend' + type: 'Load Balanced Web Service' + + image: + build: './frontend/Dockerfile' + port: 8080 + + http: + path: '/' + alias: 'example.com' + + environments: + qa: + http: + alias: # Середовще "qa" імпортує сертифікат. + - name: 'qa.example.com' + hosted_zone: Z0873220N255IR3MTNR4 + ``` + + === "Великі контейнери" + + ```yaml + # Наприклад, ми можемо захотіти прогріти наш Java-сервіс перед тим, як приймати зовнішній трафік. + name: 'frontend' + type: 'Load Balanced Web Service' + + image: + build: + dockerfile: './frontend/Dockerfile' + context: './frontend' + port: 80 + + http: + path: '/' + healthcheck: + path: '/_deephealthcheck' + port: 8080 + success_codes: '200,301' + healthy_threshold: 4 + unhealthy_threshold: 2 + interval: 15s + timeout: 10s + grace_period: 2m + deregistration_delay: 50s + stickiness: true + allowed_source_ips: ["10.24.34.0/23"] + + cpu: 2048 + memory: 4096 + count: 3 + storage: + ephemeral: 100 + + network: + vpc: + placement: 'private' + ``` + + === "Автомасштабування" + + ```yaml + name: 'frontend' + type: 'Load Balanced Web Service' + + http: + path: '/' + image: + location: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/frontend:latest + port: 80 + + cpu: 512 + memory: 1024 + count: + range: 1-10 + cooldown: + in: 60s + out: 30s + cpu_percentage: 70 + requests: 30 + response_time: 2s + ``` + + === "На основі подій" + + ```yaml + # See https://aws.github.io/copilot-cli/docs/developing/publish-subscribe/ + name: 'orders' + type: 'Load Balanced Web Service' + + image: + build: Dockerfile + port: 80 + http: + path: '/' + alias: 'orders.example.com' + + variables: + DDB_TABLE_NAME: 'orders' + + publish: + topics: + - name: 'products' + - name: 'orders' + fifo: true + ``` + + === "Мережевий балансувальник" + + ```yaml + name: 'frontend' + type: 'Load Balanced Web Service' + + image: + build: Dockerfile + port: 8080 + + http: false + nlb: + alias: 'example.com' + port: 80/tcp + target_container: envoy + + network: + vpc: + placement: 'private' + + sidecars: + envoy: + port: 80 + image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/envoy:latest + ``` + + === "Спільна файлова система" + + ```yaml + # Дивіться http://localhost:8000/copilot-cli/docs/developing/storage/#file-systems + name: 'frontend' + type: 'Load Balanced Web Service' + + image: + build: Dockerfile + port: 80 + depends_on: + bootstrap: success + + http: + path: '/' + + storage: + volumes: + wp: + path: /bitnami/wordpress + read_only: false + efs: true + + # Наповніть файлову систему деяким вмістом за допомогою контейнера bootstrap. + sidecars: + bootstrap: + image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/bootstrap:v1.0.0 + essential: false + mount_points: + - source_volume: wp + path: /bitnami/wordpress + read_only: false + ``` + + === "Наскрізне шифрування" + + ```yaml + name: 'frontend' + type: 'Load Balanced Web Service' + + image: + build: Dockerfile + port: 8080 + + http: + alias: 'example.com' + path: '/' + healthcheck: + path: '/_health' + + # Порт контейнера envoy - 443, що призводить до того, що протокол і протокол перевірки справності повинні бути "HTTPS" + # щоб балансувальник навантаження встановлював TLS-зʼєднання із завданнями Fargate, використовуючи сертифікати, які ви + # встановлюєте на контейнер envoy. Ці сертифікати можуть бути самопідписними. + target_container: envoy + + sidecars: + envoy: + port: 443 + image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/envoy-proxy-with-selfsigned-certs:v1 + + network: + vpc: + placement: 'private' + ``` + + === "Експонування кількох портів" + + ```yaml + name: 'frontend' + type: 'Load Balanced Web Service' + + image: + build: './frontend/Dockerfile' + port: 8080 + + nlb: + port: 8080/tcp # Трафік через порт 8080/tcp перенаправляється до основного контейнера, на порт 8080. + additional_listeners: + - port: 8084/tcp # Трафік на порт 8084/tcp перенаправляється до основного контейнера, на порт 8084. + - port: 8085/tcp # Трафік через порт 8085/tcp перенаправляється на sidecar "envoy", на порт 3000. + target_port: 3000 + target_container: envoy + + http: + path: '/' + target_port: 8083 # Трафік на "/" перенаправляється до основного контейнера, в порт 8083. + additional_rules: + - path: 'customerdb' + target_port: 8081 # Трафік на "/customerdb" перенаправляється в основний контейнер, на порт 8083. + - path: 'admin' + target_port: 8082 # Трафік на "/admin" перенаправляється на sidecar "envoy", на порт 8082. + target_container: envoy + + sidecars: + envoy: + port: 80 + image: aws_account_id.dkr.ecr.us-west-2.amazonaws.com/envoy-proxy-with-selfsigned-certs:v1 + ``` + + +`name` String +Назва вашого сервісу. + +
+ +`type` String +Тип архітектури вашого сервісу. [Вебсервіс з балансуванням навантаження](../../concepts/services/#load-balanced-web-service) - це сервіс з доступом до інтернету, який працює за балансувальником навантаження, оркеструється Amazon ECS на AWS Fargate. + +
+ +`http` Boolean або Map +Розділ http містить параметри, повʼязані з інтеграцією вашого сервісу з балансувальником навантаження Application Load Balancer. + +Щоб вимкнути Application Load Balancer, вкажіть `http: false`. Зверніть увагу, що для вебсервісу з балансуванням навантаження повинен бути увімкнений хоча б один з балансувальників — Application Load Balancer або Network Load Balancer. + +http.`path` String +Запити до цього шляху будуть перенаправлені до вашого сервісу. Кожне правило слухача повинно слухати унікальний шлях. + +http.`alb` String Додано у [v1.32.0](../../../blogs/release-v132/#imported-albs) +ARN або назва навного публічного ALB для імпорту. Правила слухача будуть додані до ваших слухачів. Copilot не буде керувати ресурсами, повʼязаними з DNS, такими як сертифікати. + +{% include 'http-healthcheck.uk.md' %} + +http.`deregistration_delay` Duration +Час очікування для зняття цілей з реєстрації під час зняття з реєстрації. Стандартно це 60 секунд. Встановлення цього значення на більше значення дає цілям більше часу для належного завершення зʼєднань, але збільшує час, необхідний для нових розгортань. Діапазон 0s-3600s. + +http.`target_container` String +Контейнер sidecar, до якого перенаправляються запити замість основного контейнера сервісу. +Якщо порт контейнера призначення встановлено на `443`, то протокол встановлюється на `HTTPS`, щоб балансувальник навантаження встановлював TLS-зʼєднання з завданнями Fargate, використовуючи сертифікати, які ви встановлюєте на контейнер призначення. + +http.`target_port` String +Необовʼязково. Порт контейнера, який отримує трафік. Стандартно це буде `image.port`, якщо контейнер призначення є основним контейнером, або `sidecars..port`, якщо контейнер призначення є sidecar. + +http.`stickiness` Boolean +Вказує, чи увімкнено липкі сесії. + +http.`allowed_source_ips` Array of Strings +CIDR IP-адреси, яким дозволено доступ до вашого сервісу. + +```yaml +http: + allowed_source_ips: ["192.0.2.0/24", "198.51.100.10/32"] +``` + +http.`alias` String або Array of Strings або Array of Maps +HTTPS-доменний псевдонім вашого сервісу. + +```yaml +# Версія з рядком. +http: + alias: example.com +# Або як масив рядків. +http: + alias: ["example.com", "v1.example.com"] +# Або як масив з map. +http: + alias: + - name: example.com + hosted_zone: Z0873220N255IR3MTNR4 + - name: v1.example.com + hosted_zone: AN0THE9H05TED20NEID +``` + +http.`hosted_zone` String +ID вашої наявної зони хостингу; може використовуватися тільки з `http.alias`. Якщо у вас є середовище з імпортованими сертифікатами, ви можете вказати зону хостингу, в яку Copilot повинен вставити запис A після створення балансувальника навантаження. + +```yaml +http: + alias: example.com + hosted_zone: Z0873220N255IR3MTNR4 +# Також дивіться приклад масиву з map http.alias вище. +``` + +http.`redirect_to_https` Boolean +Автоматично перенаправляє балансувальник навантаження з HTTP на HTTPS. Стандартно `true`. + +http.`version` String +Версія протоколу HTTP(S). Повинна бути однією з `'grpc'`, `'http1'` або `'http2'`. Якщо не вказано, то Стандартно використовується `'http1'`. Якщо ви використовуєте gRPC, зверніть увагу, що домен повинен бути повʼязаний з вашим застосунком. + +http.`additional_rules` Array of Maps +Налаштуйте кілька правил слухача ALB. + +{% include 'http-additionalrules.uk.md' %} + +{% include 'nlb.uk.md' %} + +{% include 'image-config-with-port.uk.md' %} +Якщо порт встановлено на `443`, то протокол встановлюється на `HTTPS`, щоб балансувальник навантаження встановлював TLS-зʼєднання з завданнями Fargate, використовуючи сертифікати, які ви встановлюєте на контейнер. + +{% include 'image-healthcheck.uk.md' %} + +{% include 'task-size.uk.md' %} + +{% include 'platform.uk.md' %} + +
+ +`count` Integer або Map +Кількість завдань, які ваш сервіс повинен підтримувати. + +Якщо ви вказуєте число: + +```yaml +count: 5 +``` + +Сервіс встановить бажану кількість на 5 і підтримуватиме 5 завдань у вашому сервісі. + +count.`spot` Integer + +Якщо ви хочете використовувати потужності Fargate Spot для запуску ваших сервісів, ви можете вказати число в підполі `spot`: + +```yaml +count: + spot: 5 +``` + +!!! info "Інформація" + Fargate Spot не підтримується для контейнерів, що працюють на архітектурі ARM. + +
+ +Альтернативно, ви можете вказати map для налаштування автомасштабування: + +```yaml +count: + range: 1-10 + cooldown: + in: 30s + out: 60s + cpu_percentage: 70 + memory_percentage: + value: 80 + cooldown: + in: 80s + out: 160s + requests: 10000 + response_time: 2s +``` + +count.`range` String або Map +Ви можете вказати мінімальну та максимальну межу для кількості завдань, які ваш сервіс повинен підтримувати, на основі значень, які ви вказуєте для метрик. + +```yaml +count: + range: n-m +``` + +Це налаштує ціль автомасштабування застосунків з `MinCapacity` на `n` та `MaxCapacity` на `m`. + +Альтернативно, якщо ви хочете масштабувати свій сервіс на екземплярі Fargate Spot, вкажіть `min` та `max` під `range`, а потім вкажіть `spot_from` з бажаною кількістю, з якої ви хочете почати розміщувати свої сервіси на потужностях Spot. Наприклад: + +```yaml +count: + range: + min: 1 + max: 10 + spot_from: 3 +``` + +Це встановить ваш діапазон як 1-10, як вище, але розмістить перші дві копії вашого сервісу на виділеній потужності Fargate. Якщо ваш сервіс масштабується до 3 або більше, третя та будь-які додаткові копії будуть розміщені на Spot до досягнення максимуму. + +count.range.`min` Integer +Мінімальна бажана кількість для вашого сервісу з використанням автомасштабування. + +count.range.`max` Integer +Максимальна бажана кількість для вашого сервісу з використанням автомасштабування. + +count.range.`spot_from` Integer +Бажана кількість, з якої ви хочете почати розміщувати свій сервіс з використанням потужності Fargate Spot. + +count.`cooldown` Map +Поля охолодження, які використовуються як стандартне значення для всіх полів автомасштабування. + +count.cooldown.`in` Duration +Час охолодження для полів автомасштабування для зменшення масштабу сервісу. + +count.cooldown.`out` Duration +Час охолодження для полів автомасштабування для збільшення масштабу сервісу. + +Наступні опції `cpu_percentage`, `memory_percentage`, `requests` та `response_time` є полями автомасштабування для `count`, які можуть бути визначені як значення поля, або як map, що містить розширену інформацію про значення поля та охолодження: + +```yaml +value: 50 +cooldown: + in: 30s + out: 60s +``` + +Охолодження, вказане тут, перевизначить стандартне значення. + +count.`cpu_percentage` Integer або Map +Масштабування вгору або вниз на основі середнього значення CPU, яке ваш сервіс повинен підтримувати. + +count.`memory_percentage` Integer або Map +Масштабування вгору або вниз на основі середнього значення памʼяті, яке ваш сервіс повинен підтримувати. + +count.`requests` Integer або Map +Масштабування вгору або вниз на основі кількості запитів, оброблених кожним завданням. + +count.`response_time` Duration або Map +Масштабування вгору або вниз на основі середнього часу відповіді сервісу. + +{% include 'exec.uk.md' %} + +{% include 'deployment.uk.md' %} + +```yaml +deployment: + rollback_alarms: + cpu_utilization: 70 // Відсоткове значення, при якому або вище якого спрацьовує тривога. + memory_utilization: 50 // Відсоткове значення, при якому або вище якого спрацьовує тривога. +``` + +{% include 'entrypoint.uk.md' %} + +{% include 'command.uk.md' %} + +{% include 'network.uk.md' %} + +{% include 'envvars.uk.md' %} + +{% include 'secrets.uk.md' %} + +{% include 'storage.uk.md' %} + +{% include 'publish.uk.md' %} + +{% include 'logging.uk.md' %} + +{% include 'observability.uk.md' %} + +{% include 'taskdef-overrides.uk.md' %} + +{% include 'environments.uk.md' %} diff --git a/site/content/docs/manifest/overview.uk.md b/site/content/docs/manifest/overview.uk.md new file mode 100644 index 00000000000..293c8369c22 --- /dev/null +++ b/site/content/docs/manifest/overview.uk.md @@ -0,0 +1,11 @@ +--- +title: "Огляд" +--- + +# Маніфест + +Маніфест AWS Copilot CLI описує архітектуру сервісу, завдання, конвеєра або середовища як інфраструктура-як-код. + +Це файл, згенерований за допомогою `copilot init`, `copilot svc init`, `copilot job init`, `copilot pipeline init` або `copilot env init`, який перетворюється на шаблон AWS CloudFormation. На відміну від сирих шаблонів CloudFormation, маніфест дозволяє зосередитися на найпоширеніших налаштуваннях _архітектури_ вашого сервісу, завдання, конвеєра або середовища, а не на окремих ресурсах. + +Файли маніфестів зберігаються в `copilot/<назва вашого сервісу, завдання або середовища>/manifest.yml` або `copilot/pipelines/<назва вашого конвеєра>/manifest.yml`. diff --git a/site/content/docs/manifest/pipeline.uk.md b/site/content/docs/manifest/pipeline.uk.md new file mode 100644 index 00000000000..cf5c49508de --- /dev/null +++ b/site/content/docs/manifest/pipeline.uk.md @@ -0,0 +1,300 @@ +--- +title: Конвейер +--- + +# Конвейер + +Список усіх доступних властивостей для маніфесту Copilot pipeline. Щоб дізнатися більше про конвеєри, дивіться сторінку концепції [Конвеєри](../../concepts/pipelines/). + +???+ note "Приклади маніфестів безперервної доставки" + + === "Реліз робочих навантажень" + ```yaml + # "app-pipeline" розгорне всі сервіси та завдання з user/repo + # в середовища "test" та "prod". + name: app-pipeline + + source: + provider: GitHub + properties: + branch: main + repository: https://github.com/user/repo + # Опціонально: вкажіть назву наявного зʼєднання CodeStar Connections. + # connection_name: a-connection + + build: + image: aws/codebuild/amazonlinux2-x86_64-standard:5.0 + # additional_policy: # Додайте додаткові дозволи під час створення ваших контейнерних образів та шаблонів. + + stages: + - # Стандартно всі робочі навантаження розгортаються одночасно в межах етапу. + name: test + pre_deployments: + db_migration: + buildspec: ./buildspec.yml + test_commands: + - make integ-test + - echo "ура! Тести пройдено" + - + name: prod + requires_approval: true + ``` + + === "Контроль порядку розгортання" + ```yaml + # Альтернативно, ви можете контролювати порядок розгортання стеків на етапі. + # Див. https://aws.github.io/copilot-cli/blogs/release-v118/#controlling-order-of-deployments-in-a-pipeline + name: app-pipeline + + source: + provider: Bitbucket + properties: + branch: main + repository: https://bitbucket.org/user/repo + + stages: + - name: test + deployments: + orders: + warehouse: + frontend: + depends_on: [orders, warehouse] + - name: prod + require_approval: true + deployments: + orders: + warehouse: + frontend: + depends_on: [orders, warehouse] + ``` + + === "Реліз середовищ" + ```yaml + # Зміни в маніфестах середовищ також можуть бути випущені через конвеєр. + name: env-pipeline + + source: + provider: CodeCommit + properties: + branch: main + repository: https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo + + stages: + - name: test + deployments: + deploy-env: + template_path: infrastructure/test.env.yml + template_config: infrastructure/test.env.params.json + stack_name: app-test + - name: prod + deployments: + deploy-prod: + template_path: infrastructure/prod.env.yml + template_config: infrastructure/prod.env.params.json + stack_name: app-prod + ``` + +`name` String +Назва вашого конвеєру. + +
+ +`version` String +Версія схеми для шаблону. Зараз підтримується лише одна версія, `1`. + +
+ +`source` Map +Конфігурація для того, як ваш конвеєр запускається. + +source.`provider` String +Назва вашого провайдера. Наразі підтримуються `GitHub`, `Bitbucket` та `CodeCommit`. + +source.`properties` Map +Конфігурація, специфічна для провайдера, щодо того, як запускається конвеєра. + +source.properties.`access_token_secret` String +Назва секрету AWS Secrets Manager, який містить GitHub access token для запуску конвеєра, якщо ваш провайдер — GitHub і ви створили свій конвеєр за допомогою персонального access token. + +!!! info "Інформація" + Починаючи з AWS Copilot v1.4.0, access token більше не потрібен для джерел репозиторіїв GitHub. Замість цього, Copilot буде запускати конвеєр [використовуючи зʼєднання AWS CodeStar](https://docs.aws.amazon.com/codepipeline/latest/userguide/update-github-action-connections.html). + +source.properties.`branch` String +Назва гілки у вашому репозиторії, яка запускає конвеєр. Copilot автоматично заповнює це поле вашою поточною локальною гілкою. + +source.properties.`repository` String +URL вашого репозиторію. + +source.properties.`connection_name` String +Назва наявного зʼєднання CodeStar Connections. Якщо не вказано, Copilot створить зʼєднання для вас. + +source.properties.`output_artifact_format` String +Опціонально. Формат вихідного артефакту. Значення можуть бути або `CODEBUILD_CLONE_REF`, або `CODE_ZIP`. Якщо не вказано, типово використовується `CODE_ZIP`. + +!!! info "Інформація" + Ця властивість недоступна для конвеєрів з джерелами дій [GitHub version 1](https://docs.aws.amazon.com/codepipeline/latest/userguide/appendix-github-oauth.html), які використовують `access_token_secret`. + +
+ +`build` Map +Конфігурація для проєкту CodeBuild. + +build.`image` String +URI, який ідентифікує Docker образ для використання в цьому проєкті збірки. Зараз стандартно використовується `aws/codebuild/amazonlinux2-x86_64-standard:5.0`. + +build.`buildspec` String +Опціонально. Шлях до файлу buildspec, відносно кореня проєкту, для використання в цьому проєкті збірки. Стандартно Copilot створить один для вас, розташований за адресою `copilot/pipelines/[your pipeline name]/buildspec.yml`. + +build.`additional_policy.``PolicyDocument` Map +Опціонально. Вкажіть додатковий документ політики для додавання до ролі проєкту збірки. Додатковий документ політики можна вказати у вигляді map в YAML, наприклад: + +```yaml +build: + additional_policy: + PolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - ecr:GetAuthorizationToken + Resource: '*' +``` + +або альтернативно у вигляді JSON: + +```yaml +build: + additional_policy: + PolicyDocument: + { + "Statement": [ + { + "Action": ["ecr:GetAuthorizationToken"], + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + } +``` + +
+ +`stages` Array of Maps +Упорядкований список середовищ, до яких буде розгорнуто ваш конвеєр. + +stages.`name` String +Назва середовища для розгортання ваших сервісів. + +stages.`requires_approval` Boolean +Опціонально. Вказує, чи додати крок ручного затвердження перед розгортанням (або перед діями перед розгортанням, якщо ви їх додали). Стандартно `false`. + +stages.`pre_deployments` Map Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Опціонально. Додайте дії, які будуть виконані перед розгортанням. + +```yaml +stages: + - name: + pre_deployments: + : + buildspec: + depends_on: [, ...] +``` + +stages.pre_deployments.`` Map Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Назва дії перед розгортанням. + +stages.pre_deployments.``.`buildspec` String Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Шлях до файлу buildspec, відносно кореня проєкту, для використання в цьому проєкті збірки. + +stages.pre_deployments.``.`depends_on` Array of Strings Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Опціонально. Назви інших дій перед розгортанням, які повинні бути виконані перед виконанням цієї дії. Стандартно немає залежностей. + +!!! info "Інформація" + Для отримання додаткової інформації про дії перед та після розгортання дивіться [блог пост v1.30.0](../../../blogs/release-v130/) та сторінку [Конвеєри](../../concepts/pipelines/). + +stages.`deployments` Map +Опціонально. Контролюйте, які стеки CloudFormation розгортати та їх порядок. +Залежності `deployments` вказуються у вигляді map наступного формату: + +```yaml +stages: + - name: test + deployments: + : + : + depends_on: [, ...] +``` + +Наприклад, якщо ваш git репозиторій має наступну структуру: + +``` +copilot +├── api +│ └── manifest.yml +└── frontend + └── manifest.yml +``` + +І ви хочете контролювати порядок розгортання, так щоб `api` розгорталося перед `frontend`, тоді ви можете налаштувати свій етап наступним чином: + +```yaml +stages: + - name: test + deployments: + api: + frontend: + depends_on: + - api +``` + +Ви також можете обмежити, які мікросервіси випускати в рамках вашого конвеєра. У наступному маніфесті ми вказуємо розгортати лише `api`, а не `frontend`: + +```yaml +stages: + - name: test + deployments: + api: +``` + +Нарешті, якщо `deployments` не вказано, стандартно Copilot розгорне всі ваші сервіси та завдання в git репозиторії паралельно. + +stages.deployments.`` Map +Назва завдання або сервісу для розгортання. + +stages.deployments.``.`depends_on` Array of Strings +Опціонально. Назва інших завдань або сервісів, які повинні бути розгорнуті перед розгортанням цього мікросервісу. Стандартно немає залежностей. + +stages.deployments.``.`stack_name` String +Опціонально. Назва стека для створення або оновлення. Стандартно `--`. +Наприклад, якщо ваш застосунок називається `demo`, назва етапу `test`, а назва сервісу `frontend`, тоді назва стека буде `demo-test-frontend`. + +stages.deployments.``.`template_path` String +Опціонально. Шлях до шаблону CloudFormation, створеного під час фази `build`. Стандартно `infrastructure/-.yml`. + +stages.deployments.``.`template_config` String +Опціонально. Шлях до конфігурації шаблону CloudFormation, створеної під час фази `build`. Стандартно `infrastructure/-.params.json`. + +stages.`post_deployments` MapДодано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Опціонально. Додайте дії, які будуть виконані після розгортання. Конфліктує з `stages.test_commands`. + +```yaml +stages: + - name: + post_deployments: + : + buildspec: + depends_on: [, ...] +``` + +stages.post_deployments.`` Map Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Назва дії після розгортання. + +stages.post_deployments.``.`buildspec` String Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Шлях до файлу buildspec, відносно кореня проєкту, для використання в цьому проєкті збірки. + +stages.post_deployments.``.`depends_on` Array of Strings Додано у [v1.30.0](../../../blogs/release-v130/#deployment-actions) +Опціонально. Назви інших дій після розгортання, які повинні бути виконані перед виконанням цієї дії. Стандартно немає залежностей. + +stages.`test_commands` Array of Strings +Опціонально. Команди для запуску інтеграційних або кінцевих тестів після розгортання. Стандартно немає перевірок після розгортання. Конфліктує з `stages.post_deployment`. diff --git a/site/content/docs/manifest/rd-web-service.uk.md b/site/content/docs/manifest/rd-web-service.uk.md new file mode 100644 index 00000000000..0346fadd74d --- /dev/null +++ b/site/content/docs/manifest/rd-web-service.uk.md @@ -0,0 +1,252 @@ +--- +title: "Вебсервіс на основі запитів" +--- + +# Вебсервіс на основі запитів + +Список всіх доступних властивостей для маніфесту `'Request-Driven Web Service'`. + +???+ note "Приклади маніфестів AWS App Runner" + + === "Публічний" + + ```yaml + # Розгортає вебсервіс, доступний за адресою https://web.example.com. + name: frontend + type: Request-Driven Web Service + + http: + healthcheck: '/_healthcheck' + alias: web.example.com + + image: + build: ./frontend/Dockerfile + port: 80 + cpu: 1024 + memory: 2048 + + variables: + LOG_LEVEL: info + tags: + owner: frontend + observability: + tracing: awsxray + secrets: + GITHUB_TOKEN: GITHUB_TOKEN + DB_SECRET: + secretsmanager: 'mysql' + + environments: + test: + variables: + LOG_LEVEL: debug + ``` + + === "Підключений до VPC середовища" + + ```yaml + # Весь вихідний трафік маршрутизується через VPC середовища. + name: frontend + type: Request-Driven Web Service + + image: + build: ./frontend/Dockerfile + port: 8080 + cpu: 1024 + memory: 2048 + + network: + vpc: + placement: private + ``` + + === "Подієво-орієнтований" + + ```yaml + # Дивіться https://aws.github.io/copilot-cli/docs/developing/publish-subscribe/ + name: refunds + type: Request-Driven Web Service + + image: + build: ./refunds/Dockerfile + port: 8080 + + http: + alias: refunds.example.com + cpu: 1024 + memory: 2048 + + publish: + topics: + - name: 'refunds' + - name: 'orders' + fifo: true + ``` + +`name` String +Назва вашого сервісу. + +
+ +`type` String +Тип архітектури вашого сервісу. [Вебсервіс на основі запитів](../../concepts/services/#request-driven-web-service) — це сервіс, що доступний через інтернет і розгортається на AWS App Runner. + +
+ +`http` Map +Розділ http містить параметри, повʼязані з керованим балансувальником навантаження. + +http.`private` Bool або Map +Обмежити вхідний трафік лише вашим середовищем. Стандартно false. + +http.private`endpoint` String +ID наявного VPC Endpoint до App Runner. + +```yaml +http: + private: + endpoint: vpce-12345 +``` + +http.`healthcheck` String або Map +Якщо ви вказуєте рядок, Copilot інтерпретує його як шлях, що відкривається у вашому контейнері для обробки запитів на перевірку стану цільової групи. Стандартно "/". + +```yaml +http: + healthcheck: '/' +``` + +Ви також можете вказати healthcheck як map: + +```yaml +http: + healthcheck: + path: '/' + healthy_threshold: 3 + unhealthy_threshold: 2 + interval: 15s + timeout: 10s +``` + +http.healthcheck.`path` String +Місце призначення, куди надсилаються запити на перевірку стану. + +http.healthcheck.`healthy_threshold` Integer +Кількість послідовних успішних перевірок стану, необхідних для визнання несправної цілі справною. Стандартно 3. Діапазон: 1-20. + +http.healthcheck.`unhealthy_threshold` Integer +Кількість послідовних невдалих перевірок стану, необхідних для визнання цілі несправною. Стандартно 3. Діапазон: 1-20. + +http.healthcheck.`interval` Duration +Приблизний час, у секундах, між перевірками стану окремої цілі. Стандартно 5s. Діапазон: 1s–20s. + +http.healthcheck.`timeout` Duration +Час, у секундах, протягом якого відсутність відповіді від цілі означає невдалу перевірку стану. Стандартно 2s. Діапазон 1s-20s. + +http.`alias` String +Призначте дружнє доменне імʼя вашим вебсервісам на основі запитів. Щоб дізнатися більше, дивіться [`developing/domain`](../../developing/domain/#request-driven-web-service). + +
+ +`image` Map +Розділ image містить параметри, що стосуються конфігурації збірки Docker та експонованого порту. + +image.`build` Рядок або Карта +Якщо ви вказуєте рядок, Copilot інтерпретує його як шлях до вашого Dockerfile. Він припускає, що імʼя теки рядка, який ви вказуєте, має бути контекстом збірки. Маніфест: + +```yaml +image: + build: path/to/dockerfile +``` + +призведе до наступного виклику docker build: `$ docker build --file path/to/dockerfile path/to` + +Ви також можете вказати build як map: + +```yaml +image: + build: + dockerfile: path/to/dockerfile + context: context/dir + target: build-stage + cache_from: + - image:tag + args: + key: value +``` +У цьому випадку Copilot використовуватиме вказаний вами контекстну теку і перетворюватиме пари ключ-значення з args на перевизначення --build-arg. Еквівалентний виклик docker build буде: +`$ docker build --file path/to/dockerfile --target build-stage --cache-from image:tag --build-arg key=value context/dir`. + +Ви можете пропустити поля, і Copilot зробить все можливе, щоб зрозуміти, що ви маєте на увазі. Наприклад, якщо ви вказуєте `context`, але не `dockerfile`, Copilot запустить Docker у контекстній теці та припустить, що ваш Dockerfile називається "Dockerfile". Якщо ви вказуєте `dockerfile`, але не `context`, Copilot припускає, що ви хочете запустити Docker у теці, що містить `dockerfile`. + +Усі шляхи відносні до кореня вашого робочого простору. + +image.`location` String +Замість створення контейнера з Dockerfile, ви можете вказати наявне імʼя образу. Конфліктує з [`image.build`](#image-build). + +!!! note "Примітка" + Лише публічні образи, збережені в [Amazon ECR Public](https://docs.aws.amazon.com/AmazonECR/latest/public/public-repositories.html), доступні у AWS App Runner. + +image.`port` Integer +Порт, експонований у вашому Dockerfile. Copilot повинен проаналізувати це значення для вас з вашої інструкції `EXPOSE`. + +
+ +`cpu` Integer +Кількість одиниць CPU, зарезервованих для кожного екземпляра вашого сервісу. Дивіться [документацію AWS App Runner](https://docs.aws.amazon.com/apprunner/latest/api/API_InstanceConfiguration.html#apprunner-Type-InstanceConfiguration-Cpu) для дійсних значень CPU. + +
+ +`memory` Integer +Кількість памʼяті в MiB, зарезервованої для кожного екземпляра вашого сервісу. Дивіться [документацію AWS App Runner](https://docs.aws.amazon.com/apprunner/latest/api/API_InstanceConfiguration.html#apprunner-Type-InstanceConfiguration-Memory) для дійсних значень памʼяті. + +
+ +`network` Map +Розділ `network` містить параметри для підключення сервісу до ресурсів AWS у VPC середовища. +Підключивши сервіс до VPC, ви можете використовувати [service discovery](../../developing/svc-to-svc-communication/#service-discovery) для спілкування з іншими сервісами +у вашому середовищі або підключитися до бази даних у вашому VPC, такої як Amazon Aurora, за допомогою [`storage init`](../../commands/storage-init/). + +network.`vpc` Map +Підмережі у VPC для маршрутизації вихідного трафіку з сервісу. + +network.vpc.`placement` String +Єдиний правильний варіант сьогодні — `'private'`. Якщо ви не хочете, щоб сервіс був підключений до VPC, ви можете видалити поле `network`. + +Коли розміщення - `'private'`, сервіс App Runner маршрутизує вихідний трафік через приватні підмережі VPC. +Якщо ви використовуєте VPC, створений Copilot, Copilot автоматично додасть NAT-шлюзи до вашого середовища для підключення до інтернету. (Дивіться [ціни](https://aws.amazon.com/vpc/pricing/).) Альтернативно, при запуску `copilot env init`, ви можете імпортувати наявний VPC з NAT-шлюзами або один з VPC endpoints для ізольованих робочих навантажень. Дивіться нашу сторінку [custom environment resources](../../developing/custom-environment-resources/) для отримання додаткової інформації. + +{% include 'observability.uk.md' %} + +
+ +`command` String +Необовʼязково. Перевизначає стандартну команду в образі. + +
+ +`variables` Map +Пари ключ-значення, що представляють змінні середовища, які будуть передані вашому сервісу. Copilot стандартно включить для вас ряд змінних середовища. + +{% include 'secrets.uk.md' %} + +{% include 'publish.uk.md' %} + +
+ +`tags` Map +Пари ключ-значення, що представляють теґи AWS, які передаються вашим ресурсам AWS App Runner. + +
+ +`count` String +Вкажіть імʼя наявної конфігурації автомасштабування. + +```yaml +count: high-availability/3 +``` + +
+ +`environments` Map +Розділ середовища дозволяє перевизначити будь-яке значення у вашому маніфесті на основі середовища, в якому ви знаходитесь. У наведеному вище прикладі маніфесту ми перевизначаємо змінну середовища `LOG_LEVEL` у нашому середовищі 'test'. diff --git a/site/content/docs/manifest/scheduled-job.uk.md b/site/content/docs/manifest/scheduled-job.uk.md new file mode 100644 index 00000000000..77b54440ee9 --- /dev/null +++ b/site/content/docs/manifest/scheduled-job.uk.md @@ -0,0 +1,246 @@ +--- +title: Заплановане завдання +--- + +# Заплановане завдання + +Список всіх доступних властивостей для маніфесту `'Scheduled Job'`. Щоб дізнатися більше про завдання Copilot, дивіться сторінку концепції [Завдання](../../concepts/jobs/). + +???+ note "Приклад маніфесту Scheduled Job" + + ```yaml + name: report-generator + type: Scheduled Job + + on: + schedule: "@daily" + cpu: 256 + memory: 512 + retries: 3 + timeout: 1h + + image: + build: ./Dockerfile + + variables: + LOG_LEVEL: info + env_file: log.env + secrets: + GITHUB_TOKEN: GITHUB_TOKEN + + # Ви можете перевизначити будь-яке з вказаних вище значень для кожного середовища. + environments: + prod: + cpu: 2048 + memory: 4096 + ``` + +`name` String +Назва вашого завдання. + +
+ +`type` String +Тип архітектури для вашого завдання. Наразі Copilot підтримує лише тип "Scheduled Job" для завдань, які запускаються або за фіксованим розкладом, або періодично. + +
+ +`on` Map +Конфігурація для події, яка запускає ваше завдання. + +on.`schedule` String +Ви можете вказати частоту для періодичного запуску вашого завдання. Підтримувана частота: + +| Частота | Ідентична до | Текст, зрозумілий людині, в `UTC`, запускається ... | +| ------------ | --------------------- | --------------------------------------------- | +| `"@yearly"` | `"cron(0 * * * ? *)"` | опівночі 1 січня | +| `"@monthly"` | `"cron(0 0 1 * ? *)"` | опівночі першого дня місяця | +| `"@weekly"` | `"cron(0 0 ? * 1 *)"` | опівночі в неділю | +| `"@daily"` | `"cron(0 0 * * ? *)"` | опівночі | +| `"@hourly"` | `"cron(0 * * * ? *)"` | на 0-й хвилині | + +* `"@every {duration}"` (Наприклад, "1m", "5m") +* `"rate({duration})"` на основі [виразів частоти CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#RateExpressions) + +Альтернативно, ви можете вказати розклад cron, якщо хочете запускати роботу в конкретний час: + +* `"* * * * *"` на основі стандартного [формату cron](https://uk.wikipedia.org/wiki/Cron#Таблиця_crontab). +* `"cron({fields})"` на основі [виразів cron](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions) CloudWatch з шістьма полями. + +Нарешті, ви можете заборонити запуск завдання, встановивши в полі `schedule` значення `none`: + +```yaml +on: + schedule: "none" +``` + +
+ +{% include 'image.uk.md' %} + +{% include 'image-config.uk.md' %} + +
+ +`entrypoint` String або Array of Strings +Перевизначення стандартного значення entrypoint в образі. + +```yaml +# Версія з рядком. +entrypoint: "/bin/entrypoint --p1 --p2" +# Або, версія з масивом рядків. +entrypoint: ["/bin/entrypoint", "--p1", "--p2"] +``` + +
+ +`command` String або Array of Strings +Перевизначення стандартного значення command в образі. + +```yaml +# Версія з рядком. +command: ps au +# Або, версія з масивом рядків. +command: ["ps", "au"] +``` + +
+ +`cpu` Integer +Кількість одиниць CPU для завдання. Допустимі значення CPU див. у [Amazon ECS docs] (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html). + +
+ +`memory` Integer +Обсяг памʼяті в MiB, що використовується завданням. Допустимі значення памʼяті див. у [Amazon ECS docs] (https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html). + +
+ +`platform` String +Операційна система та архітектура (у форматі `[os]/[arch]`) передаються за допомогою `docker build --platform`. Наприклад, `linux/arm64` або `windows/x86_64`. Стандартно використовується `linux/x86_64`. + +Перевизначає згенерований рядок для збирання з іншим допустимим `osfamily` або `architecture`. Наприклад, користувачі Windows можуть змінити рядок +```yaml +platform: windows/x86_64 +``` + +для встановлення стандартного значення `WINDOWS_SERVER_2019_CORE`, з використанням map: + +```yaml +platform: + osfamily: windows_server_2019_full + architecture: x86_64 +``` + +```yaml +platform: + osfamily: windows_server_2019_core + architecture: x86_64 +``` + +```yaml +platform: + osfamily: windows_server_2022_core + architecture: x86_64 +``` + +```yaml +platform: + osfamily: windows_server_2022_full + architecture: x86_64 +``` + +
+ +`retries` Integer +Кількість спроб виконання завдання перед тим, як завдання буде завершено невдачею. + +
+ +`timeout` Duration +Скільки часу має працювати завдання, перш ніж воно перерветься і завершиться невдачею. Можна використовувати одиниці: `h`, `m` або ``. + +
+ +{% include 'network-vpc.uk.md' %} + +
+ +`variables` Map +Пари ключ-значення, що представляють змінні оточення, які будуть передані вашому завданню. Стандартно Copilot включає низку змінних середовища для вас. + +
+ +`secrets` Map +Пари ключ-значення, які представляють секретні значення зі сховища параметрів [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html), які будуть безпечно передані у ваше завдання як змінні середовища. + +
+ +`storage` Map +У розділі Storage ви можете вказати зовнішні томи EFS для підключення контейнерів і додаткових контейнерів sidecar. Це дозволить вам отримати доступ до постійного сховища у різних регіонах для обробки даних або робочих навантажень CMS. Докладнішу інформацію можна знайти на сторінці [storage](../../developing/storage/). + +storage.`volumes` Map +Визначає назву та конфігурацію будь-яких томів EFS, які ви бажаєте приєднати. Поле `volumes` вказано як map форми: + +```yaml +volumes: + : + path: "/etc/mountpath" + efs: + ... +``` + +storage.volumes.`` Map +Визначає конфігурацію тому. + +storage.volumes.``.`path` String +Обовʼязкове. Вкажіть місце у контейнері, куди ви бажаєте змонтувати том. Має містити не більше 242 символів і складатися лише з символів `a-zA-Z0-9.-_/`. + +storage.volumes.``.`read_only` Boolean +Опціонально. Стандартно має значення `true`. Визначає, чи є том доступним лише для читання. Якщо значення false, контейнеру надаються права на файлову систему `elasticfilesystem:ClientWrite` і том стає доступним для запису. + +storage.volumes.``.`efs` Map +Визначає більш детальну конфігурацію EFS. + +storage.volumes.``.efs.`id` String +Обовʼязкове. Ідентифікатор файлової системи, яку потрібно змонтувати. + +storage.volumes.``.efs.`root_dir` String +Опціонально. Стандартне значення `/`. Вкажіть місце у файловій системі EFS, яке ви хочете використовувати як корінь вашого тому. Має містити не більше 255 символів і складатися лише з символів `a-zA-Z0-9.-_/`. Якщо використовується точка доступу, `root_dir` має бути або порожнім, або `/`, а `auth.iam` має бути `true`. + +storage.volumes.``.efs.`auth` Map +Вказує розширену конфігурацію авторизації для EFS. + +storage.volumes.``.efs.auth.`iam` Boolean +Опціонально. Стандартно має значення `true`. Чи потрібно використовувати авторизацію IAM для визначення того, чи дозволено тому підключатися до EFS. + +storage.volumes.``.efs.auth.`access_point_id` String +Опціонально. Стандартно має значення `""`. Ідентифікатор точки доступу до EFS, до якої потрібно підключитися. Якщо використовується точка доступу, `root_dir` має бути або порожнім, або `/`, а `auth.iam` має бути `true`. + +
+ +`logging` Map +Секція логування містить параметри конфігурації логу для драйвера логу [FireLens](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html) вашого контейнера (див. приклади [тут](../../developing/sidecars/#sidecar-patterns)). + +logging.`image` Map +Опціонально. Образ Fluent Bit для використання. Стандартно використовується `public.ecr.aws/aws-observability/aws-for-fluent-bit:stable`. + +logging.`destination` Map +Опціонально. Параметри конфігурації для надсилання драйверу журналу FireLens. + +logging.`enableMetadata` Map +Опціонально. Чи включати метадані ECS до журналів. Стандартно має значення `true`. + +logging.`secretOptions` Map +Опціонально. Секрети для передачі конфігурації журналу. + +logging.`configFilePath` Map +Опціонально. Повний шлях до файлу конфігурації у вашому власному образі Fluent Bit. + +{% include 'publish.uk.md' %} + +
+ +`environments` Map +Секція середовища дозволяє вам замінити будь-яке значення у вашому маніфесті залежно від середовища, в якому ви перебуваєте. +У наведеному вище прикладі маніфесту ми перевизначаємо параметр CPU, щоб наш промисловий контейнер був більш продуктивним. diff --git a/site/content/docs/manifest/static-site.uk.md b/site/content/docs/manifest/static-site.uk.md new file mode 100644 index 00000000000..2456e0e2fc3 --- /dev/null +++ b/site/content/docs/manifest/static-site.uk.md @@ -0,0 +1,88 @@ +--- +title: "Статичний сайт" +--- + +# Статичний сайт + +Список усіх доступних властивостей для маніфесту `'Static Site'`. + +???+ note "Приклад маніфесту Static Site" + + ```yaml + name: example + type: Static Site + + http: + alias: 'example.com' + + files: + - source: src/someDirectory + recursive: true + - source: someFile.html + + # Ви можете перевизначити будь-яке з наведених вище значень для кожного середовища. + # environments: + # test: + # files: + # - source: './blob' + # destination: 'assets' + # recursive: true + # exclude: '*' + # reinclude: + # - '*.txt' + # - '*.png' + ``` + +`name` String +Назва вашого сервісу. + +
+ +`type` String +Тип архітектури вашого сервісу. [Статичний сайт](../../concepts/services/#static-site) — це сервіс, що доступний в інтернет і розміщений на Amazon S3. + +
+ +`http` Map +Конфігурація для вхідного трафіку на ваш сайт. + +http.`alias` String +HTTPS доменний псевдонім вашого сервісу. + +http.`certificate` String +ARN сертифіката, який використовується для вашого HTTPS трафіку. +CloudFront вимагає, щоб імпортовані сертифікати були в регіоні `us-east-1`. Наприклад: + +```yaml +http: + alias: example.com + certificate: "arn:aws:acm:us-east-1:1234567890:certificate/e5a6e114-b022-45b1-9339-38fbfd6db3e2" +``` + +
+ +`files` Array of Maps +Параметри, повʼязані з вашими статичними ресурсами. + +files.`source` String +Шлях, відносно кореня вашого робочого простору, до теки або файлу, який потрібно завантажити на S3. + +files.`recursive` Boolean +Чи слід завантажувати вихідну теку рекурсивно. Стандартно true для тек. + +files.`destination` String +Необовʼязково. Підшлях, який буде додано до ваших файлів у вашому S3 кошику. Стандартно — `.` + +files.`exclude` String +Необовʼязково. Патерн-фільтри [filters](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/index.html#use-of-exclude-and-include-filters) для виключення файлів з завантаження. Допустимі символи: +`*` (відповідає всьому) +`?` (відповідає будь-якому одному символу) +`[sequence]` (відповідає будь-якому символу в `sequence`) +`[!sequence]` (відповідає будь-якому символу, якого немає в `sequence`) + +files.`reinclude` String +Необовʼязково. Патерн-фільтри [filters](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/index.html#use-of-exclude-and-include-filters) для повторного включення файлів, які були виключені з завантаження за допомогою [`exclude`](#files-exclude). Допустимі символи: +`*` (відповідає всьому) +`?` (відповідає будь-якому одному символу) +`[sequence]` (відповідає будь-якому символу в `sequence`) +`[!sequence]` (відповідає будь-якому символу, якого немає в `sequence`) diff --git a/site/content/docs/manifest/worker-service.uk.md b/site/content/docs/manifest/worker-service.uk.md new file mode 100644 index 00000000000..449001ceb05 --- /dev/null +++ b/site/content/docs/manifest/worker-service.uk.md @@ -0,0 +1,409 @@ +--- +title: Сервіс робочих навантажень +--- + +# Сервіс робочих навантажень + +Список всіх доступних властивостей для маніфесту `'Worker Service'`. Щоб дізнатися більше про сервіси Copilot, перегляньте сторінку концепцій [Сервіси](../../concepts/services/). + +???+ note "Приклади маніфестів Worker Service" + + === "Одна черга" + + ```yaml + # Збирає повідомлення з кількох тем, опублікованих з інших сервісів, в одну чергу SQS. + name: cost-analyzer + type: Worker Service + + image: + build: ./cost-analyzer/Dockerfile + + subscribe: + topics: + - name: products + service: orders + filter_policy: + event: + - anything-but: order_cancelled + - name: inventory + service: warehouse + queue: + retention: 96h + timeout: 30s + dead_letter: + tries: 10 + + cpu: 256 + memory: 512 + count: 3 + exec: true + + secrets: + DB: + secretsmanager: 'mysql' + ``` + + === "Автомасштабування Spot" + + ```yaml + # Передає завдання на Fargate Spot, якщо є можливість. + name: cost-analyzer + type: Worker Service + + image: + build: ./cost-analyzer/Dockerfile + + subscribe: + topics: + - name: products + service: orders + - name: inventory + service: warehouse + + cpu: 256 + memory: 512 + count: + range: + min: 1 + max: 10 + spot_from: 2 + queue_delay: # Ensure messages are processed within 10mins assuming a single message takes 250ms to process. + acceptable_latency: 10m + msg_processing_time: 250ms + exec: true + ``` + + === "Окремі черги" + + ```yaml + # Assign individual queues to each topic. + name: cost-analyzer + type: Worker Service + + image: + build: ./cost-analyzer/Dockerfile + + subscribe: + topics: + - name: products + service: orders + queue: + retention: 5d + timeout: 1h + dead_letter: + tries: 3 + - name: inventory + service: warehouse + queue: + retention: 1d + timeout: 5m + count: 1 + ``` + +`name` String +Назва вашого сервісу. + +
+ +`type` String +Тип архітектури вашого сервісу. [Worker Service](../../concepts/services/#worker-service) недоступні з інтернету або з інших місць у VPC. Вони призначені для отримання повідомлень з їх повʼязаних черг SQS, які заповнюються їх підписками на теми SNS, створені полями `publish` інших сервісів Copilot. + +
+ +`subscribe` Map +Розділ `subscribe` дозволяє worker сервісам створювати підписки на теми SNS, які надаються іншими сервісами Copilot у тому ж застосунку та середовищі. Кожна тема може визначати свою власну чергу SQS, але стандартно всі теми підписуються на чергу стандартного worker сервісу. + +URI черги стандартно буде вставлено в контейнер як змінну середовища, `COPILOT_QUEUE_URI`. + +```yaml +subscribe: + topics: + - name: events + service: api + queue: # Визначає конкретну чергу для теми api-events. + timeout: 20s + - name: events + service: fe + queue: # Стандартно повідомлення з усіх тем потрапляють до спільної черги. + timeout: 45s + retention: 96h + delay: 30s +``` + +subscribe.`queue` Map +Стандартно завжди створюється черга на рівні сервісу. `queue` дозволяє налаштувати певні атрибути цієї стандартної черги. + +subscribe.queue.`delay` Duration +Час у секундах, на який затримується доставка всіх повідомлень у черзі. стандартно 0s. Діапазон 0s-15m. + +subscribe.queue.`retention` Duration +Retention визначає час, протягом якого повідомлення залишатиметься в черзі перед видаленням. Стандартно 4d. Діапазон 60s-336h. + +subscribe.queue.`timeout` Duration +Timeout визначає тривалість часу, протягом якого повідомлення недоступне після доставки. Стандартно 30s. Діапазон 0s-12h. + +subscribe.queue.`fifo` Boolean або Map +Увімкніть FIFO (перший прийшов, перший пішов) упорядкування у вашій черзі SQS, щоб обробляти сценарії, де порядок операцій та подій є критичним, або де дублікати не можуть бути допущені. + +```yaml +subscribe: + topics: + - name: events + service: api + - name: events + service: fe + queue: # Повідомлення з обох тем FIFO SNS надходять до спільної черги FIFO SQS. + fifo: true +``` + +Коли черга увімкнена з можливостями FIFO, Copilot вимагає, щоб вихідні теми SNS [також були FIFO](../../include/publish/#publish-topics-topic-fifo). + +Альтернативно, ви також можете вказати розширені конфігурації черги SQS FIFO: + +```yaml +subscribe: + topics: + - name: events + service: api + queue: # Визначає специфічну для теми чергу Standard для теми api-events. + timeout: 20s + - name: events + service: fe + queue: # Стандартно повідомлення з усіх тем FIFO потрапляють до спільної черги FIFO. + fifo: + content_based_deduplication: true + high_throughput: true +``` + +subscribe.queue.fifo.`content_based_deduplication` Boolean +Якщо тіло повідомлення гарантовано унікальне для кожного опублікованого повідомлення, ви можете увімкнути дедуплікацію на основі вмісту для теми SNS FIFO. + +subscribe.queue.fifo.`deduplication_scope` String +Для високої пропускної здатності для черг FIFO вказує, чи відбувається дедуплікація повідомлень на рівні групи повідомлень або черги. Дійсні значення: "messageGroup" і "queue". + +subscribe.queue.fifo.`throughput_limit` String +Для високої пропускної здатності для черг FIFO вказує, чи квота пропускної здатності черги FIFO застосовується до всієї черги або на рівні групи повідомлень. Дійсні значення: "perQueue" і "perMessageGroupId". + +subscribe.queue.fifo.`high_throughput` Boolean +Якщо увімкнено, забезпечує більшу кількість транзакцій в секунду (TPS) для повідомлень у чергах FIFO. Конфліктує з `deduplication_scope` і `throughput_limit`. + +subscribe.queue.dead_letter.`tries` Integer +Якщо вказано, створює чергу мертвих листів і політику повторного надсилання, яка перенаправляє повідомлення до DLQ після `tries` спроб. Тобто, якщо worker сервіс не вдається обробити повідомлення успішно `tries` разів, воно буде перенаправлено до DLQ для перевірки замість повторного надсилання. + +subscribe.`topics` Масив `topic` +Містить інформацію про те, на які теми SNS повинен підписатися worker сервіс. + +subscribe.topics.topic`name` String +Обовʼязково. Назва теми SNS для підписки. + +subscribe.topics.topic`service` String +Обовʼязково. Сервіс, який надає цю тему SNS. Разом з назвою теми це унікально ідентифікує тему SNS у середовищі copilot. + +subscribe.topics.topic`filter_policy` Map +Необовʼязково. Вкажіть політику фільтрації підписки SNS для оцінки атрибутів вхідних повідомлень відповідно до політики. +Політику фільтрації можна вказати у форматі JSON, наприклад: + +```json +filter_policy: {"store":["example_corp"],"event":[{"anything-but":"order_cancelled"}],"customer_interests":["rugby","football","baseball"],"price_usd":[{"numeric":[">=",100]}]} +``` + +або альтернативно як map в YAML: + +```yaml +filter_policy: + store: + - example_corp + event: + - anything-but: order_cancelled + customer_interests: + - rugby + - football + - baseball + price_usd: + - numeric: + - ">=" + - 100 +``` + +Для додаткової інформації про те, як писати політики фільтрації, перегляньте [документацію SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-subscription-filter-policies.html). + +subscribe.topics.topic.`queue` Boolean або Map +Необовʼязково. Вкажіть конфігурацію черги SQS для теми. Якщо вказано як `true`, черга буде створена з конфігурацією стандартно. Вкажіть це поле як map для налаштування певних атрибутів для цієї черги, специфічної для теми. +Якщо ви вказуєте одну або більше черг, специфічних для теми, ви можете отримати доступ до цих URI черг через змінну `COPILOT_TOPIC_QUEUE_URIS`. Ця змінна є JSON map від унікального ідентифікатора для черги, специфічної для теми, до її URI. + +Наприклад, worker сервіс з чергою, специфічною для теми `orders` від сервісу `merchant`, і FIFO +тема `transactions` від сервісу `merchant` матиме наступну структуру JSON. + +```json +// COPILOT_TOPIC_QUEUE_URIS +{ + "merchantOrdersEventsQueue": "https://sqs.eu-central-1.amazonaws.com/...", + "merchantTransactionsfifoEventsQueue": "https://sqs.eu-central-1.amazonaws.com/..." +} +``` + +subscribe.topics.topic.queue.`fifo` Boolean або Map +Необовʼязково. Вкажіть конфігурацію черги SQS FIFO для теми. Якщо вказано як `true`, черга FIFO буде створена з конфігурацією FIFO стандартно. Вкажіть це поле як map для налаштування певних атрибутів для цієї черги, специфічної для теми. + +{% include 'image.uk.md' %} + +{% include 'image-config.uk.md' %} + +{% include 'image-healthcheck.uk.md' %} + +{% include 'task-size.uk.md' %} + +{% include 'platform.uk.md' %} + +
+ +`count` Integer або Map +Кількість завдань, які ваш сервіс повинен підтримувати. + +Якщо ви вказуєте число: + +```yaml +count: 5 +``` + +Сервіс встановить бажану кількість на 5 і підтримуватиме 5 завдань у вашому сервісі. + +count.`spot` Integer + +Якщо ви хочете використовувати потужність Fargate Spot для запуску ваших сервісів, ви можете вказати число в підполі `spot`: + +```yaml +count: + spot: 5 +``` + +!!! info "Інформація" + Fargate Spot не підтримується для контейнерів, що працюють на архітектурі ARM. + +
+ +Альтернативно, ви можете вказати map для налаштування автомасштабування: + +```yaml +count: + range: 1-10 + cpu_percentage: 70 + memory_percentage: + value: 80 + cooldown: + in: 80s + out: 160s + queue_delay: + acceptable_latency: 10m + msg_processing_time: 250ms + cooldown: + in: 30s + out: 60s +``` + +count.`range` String або Map +Ви можете вказати мінімальну та максимальну межу для кількості завдань, які ваш сервіс повинен підтримувати, на основі значень, які ви вказуєте для метрик. + +```yaml +count: + range: n-m +``` + +Це налаштує цільове значення Application Autoscaling з `MinCapacity` `n` і `MaxCapacity` `m`. + +Альтернативно, якщо ви бажаєте масштабувати свій сервіс на екземпляри Fargate Spot, вкажіть `min` і `max` під `range`, а потім вкажіть `spot_from` з бажаною кількістю, з якої ви бажаєте почати розміщувати свої сервіси на потужностях Spot. Наприклад: + +```yaml +count: + range: + min: 1 + max: 10 + spot_from: 3 +``` + +Це встановить ваш діапазон як 1-10, як зазначено вище, але розмістить перші дві копії вашого сервісу на виділеній потужності Fargate. Якщо ваш сервіс масштабується до 3 або більше, третя та будь-які додаткові копії будуть розміщені на Spot до досягнення максимуму. + +count.range.`min` Integer +Мінімальна бажана кількість для вашого сервісу з використанням автомасштабування. + +count.range.`max` Integer +Максимальна бажана кількість для вашого сервісу з використанням автомасштабування. + +count.range.`spot_from` Integer +Бажана кількість, з якої ви бажаєте почати розміщувати свій сервіс з використанням потужностей Fargate Spot. + +count.`cooldown` Map +Поля охолодження, які використовуються як значення охолодження стандартно для всіх полів автомасштабування, що вказані. + +count.cooldown.`in` Duration +Час охолодження для полів автомасштабування для збільшення масштабу сервісу. + +count.cooldown.`out` Duration +Час охолодження для полів автомасштабування для зменшення масштабу сервісу. + +Наступні опції `cpu_percentage` і `memory_percentage` є полями автомасштабування для `count`, які можуть бути визначені як значення поля або як map, що містить розширену інформацію про значення поля та охолодження: + +```yaml +value: 50 +cooldown: + in: 30s + out: 60s +``` + +Вказане тут охолодження перевизначить стандартне охолодження. + +count.`cpu_percentage` Integer або Map +Масштабування вгору або вниз на основі середнього значення CPU, яке ваш сервіс повинен підтримувати. + +count.`memory_percentage` Integer або Map +Масштабування вгору або вниз на основі середнього значення памʼяті, яке ваш сервіс повинен підтримувати. + +count.`queue_delay` Map +Масштабування вгору або вниз для підтримки прийнятної затримки черги шляхом відстеження прийнятного відставання на завдання. +Прийнятне відставання на завдання розраховується шляхом ділення `acceptable_latency` на `msg_processing_time`. Наприклад, якщо ви можете терпіти споживання повідомлення протягом 10 хвилин +після його прибуття і вашому завданню в середньому потрібно 250 мілісекунд для обробки повідомлення, тоді `acceptableBacklogPerTask = 10 * 60 / 0.25 = 2400`. Таким чином, кожне завдання може містити до +2400 повідомлень. +Цільова політика відстеження налаштовується від вашого імені, щоб забезпечити масштабування вашого сервісу вгору і вниз для підтримки <= 2400 повідомлень на завдання. Щоб дізнатися більше, перегляньте [документацію](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-using-sqs-queue.html). + +count.queue_delay.`acceptable_latency` Duration +Прийнятний час, протягом якого повідомлення може залишатися в черзі. Наприклад, `"45s"`, `"5m"`, `10h`. + +count.queue_delay.`msg_processing_time` Duration +Середній час, необхідний для обробки повідомлення SQS. Наприклад, `"250ms"`, `"1s"`. + +count.queue_delay.`cooldown` Map +Поля охолодження для масштабування вгору і вниз для затримки черги. + +{% include 'exec.uk.md' %} + +{% include 'deployment.uk.md' %} + +```yaml +deployment: + rollback_alarms: + cpu_utilization: 70 // Відсоткове значення, при досягненні або перевищенні якого спрацьовує тривога. + memory_utilization: 50 // Відсоткове значення, при досягненні або перевищенні якого спрацьовує тривога. + messages_delayed: 5 // Кількість затриманих повідомлень у черзі, при досягненні якої спрацьовує тривога. +``` + +{% include 'entrypoint.uk.md' %} + +{% include 'command.uk.md' %} + +{% include 'network.uk.md' %} + +{% include 'envvars.uk.md' %} + +{% include 'secrets.uk.md' %} + +{% include 'storage.uk.md' %} + +{% include 'publish.uk.md' %} + +{% include 'logging.uk.md' %} + +{% include 'observability.uk.md' %} + +{% include 'taskdef-overrides.uk.md' %} + +{% include 'environments.uk.md' %} diff --git a/site/content/docs/overview.uk.md b/site/content/docs/overview.uk.md new file mode 100644 index 00000000000..5a0e9b20bdc --- /dev/null +++ b/site/content/docs/overview.uk.md @@ -0,0 +1,20 @@ +--- +title: Огляд +--- + +# Огляд + +Ласкаво просимо до AWS Copilot CLI 🎉 + +Copilot CLI — це інструмент для розробників, який дозволяє створювати, випускати та керувати готовими до використання контейнеризованими застосунками на AWS App Runner та Amazon ECS на AWS Fargate. +Від початку роботи, розгортання в середовищі тестування та випуску у промислову експлуатацію, Copilot може допомогти керувати всім життєвим циклом розробки вашого застосунку. + +## Встановлення + +Ви можете встановити AWS Copilot з допомогою [Homebrew](https://brew.sh/) або завантаживши бінарні файли напряму. Якщо ви не хочете використовувати Homebrew, ви можете встановити його [вручну](../getting-started/install/). + +```sh +brew install aws/tap/copilot-cli +``` + +![Copilot help](https://user-images.githubusercontent.com/828419/85797638-e181ae00-b6f0-11ea-8751-3a7552e3fa7f.png) diff --git a/site/content/index.uk.md b/site/content/index.uk.md new file mode 100644 index 00000000000..4999e578842 --- /dev/null +++ b/site/content/index.uk.md @@ -0,0 +1,4 @@ +--- +template: layouts/home.uk.html +title: AWS Copilot CLI +--- diff --git a/site/overrides/layouts/home.uk.html b/site/overrides/layouts/home.uk.html new file mode 100644 index 00000000000..de4053095ae --- /dev/null +++ b/site/overrides/layouts/home.uk.html @@ -0,0 +1,590 @@ +{% extends "main.html" %} + + +{% block tabs %} + {{ super() }} + + + + + +
+
+
+
+

Ваш інструментарій для контейнеризованих застосунків в AWS

+

AWS Copilot — це інтерфейс командного рядка з відкритим вихідним кодом, який полегшує розробникам створення, + випуск та використання готових до експлуатації контейнеризованих застосунків на AWS App Runner, Amazon ECS та AWS Fargate. +

+ + Вперед + + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Почніть з архітектури

+

+ Виконайте одну команду, щоб швидко почати роботу з контейнеризованим застосунком, використовуючи найкращі практики на AWS з Dockerfile. +

+

+ Замість моделювання окремих ресурсів, Copilot пропонує загальні хмарні архітектури: + Вебсервіс на основі запитів, + Вебсервіс з балансуванням навантаження, + Бекенд-сервіс, + Сервіс виконання робочих навантажень, Заплановане завдання. + Необхідна інфраструктура генерується з обраного шаблону. + Зосередьте свій час на написанні бізнес-логіки замість підключення ресурсів AWS. +

+
+
+
+ +
+
+
+ +
+ + + + + + +
+
+{% endblock %} + + +{% block content %}{% endblock %} + + +{% block footer %} + {{ super() }} +{% endblock %} From 91fbe74a0b2a3bde7ceb22e05e87eba66946e3bf Mon Sep 17 00:00:00 2001 From: Andrii Holovin Date: Fri, 15 Nov 2024 23:45:14 +0200 Subject: [PATCH 2/2] Update site-local targets in Makefile --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 5bf47f26df4..15c0f50af03 100644 --- a/Makefile +++ b/Makefile @@ -100,7 +100,7 @@ generate-coverage: test go tool cover -html=${COVERAGE} .PHONY: integ-test -integ-test: package-custom-resources run-integ-test package-custom-resources-clean +integ-test: package-custom-resources run-integ-test package-custom-resources-clean .PHONY: run-integ-test run-integ-test: @@ -155,7 +155,7 @@ tools: .PHONY: site-local site-local: docker build . -f Dockerfile.site -t site:latest - docker run -p 8000:8000 -v `pwd`/site:/website/site -it site:latest + docker run --rm --init -it -p 8000:8000 -v `pwd`/site:/website/site site:latest .PHONY: gen-mocks gen-mocks: tools