From 769b8d22990f45ee4fb684528f2072f76a96e308 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Fri, 3 Nov 2023 12:41:03 -0500 Subject: [PATCH 01/28] docs(lambda): Add Lambda content CDAAS-2609 --- content/en/get-started/lambda/index.md | 38 ++++++++++++++++++++++ content/en/get-started/overview.md | 17 ++++++++-- content/en/get-started/quickstart/index.md | 6 ++-- 3 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 content/en/get-started/lambda/index.md diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md new file mode 100644 index 00000000..ff517f93 --- /dev/null +++ b/content/en/get-started/lambda/index.md @@ -0,0 +1,38 @@ +--- +title: Quickstart AWS Lambda Deployment +linktitle: Quickstart AWS Lambda +description: > + Quickly get started using Armory CD-as-a-Service to deploy to AWS Lambda. Install the CLI, connect to AWS Lambda with a single command, and deploy a sample app. Learn deployment file syntax. +weight: 2 +categories: ["Get Started", "Guides"] +tags: ["Deployment", "Quickstart"] +--- + + +## Learning objectives + +1. [Sign up for CD-as-a-Service](#sign-up-for-cd-as-a-service). +1. [Install the CD-as-as-Service CLI](#install-the-cd-as-as-service-cli) on your Mac, Linux, or Windows workstation. +1. [Connect your Kubernetes cluster](#connect-your-cluster) to CD-as-a-Service. + + +## {{% heading "prereq" %}} + +* You are familiar with CD-as-a-Service's [key components]({{< ref "architecture.md" >}}). +* You have an [AWS account](https://aws.amazon.com/) and are familiar with [AWS Lambda](https://aws.amazon.com/lambda/). + +## Sign up for CD-as-a-Service + +{{< include "register.md" >}} + +## Install the CD-as-as-Service CLI + +{{< include "cli/install-cli-tabpane.md" >}} + +### Log in with the CLI + +```shell +armory login +``` + +Confirm the device code in your browser when prompted. Then return to this guide. \ No newline at end of file diff --git a/content/en/get-started/overview.md b/content/en/get-started/overview.md index 35038562..b3becaec 100644 --- a/content/en/get-started/overview.md +++ b/content/en/get-started/overview.md @@ -10,14 +10,25 @@ tags: ["Quickstart", "Deployment"] ## What you need to use CD-as-a-Service -You need a Mac, Linux, or Windows workstation and access to a Kubernetes cluster. If you need a cluster, consider installing a local [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) or [Minikube](https://minikube.sigs.k8s.io/docs/start/) cluster. Your cluster's API endpoint does not need to be publicly accessible to use CD-as-a-Service. +You need a Mac, Linux, or Windows workstation and access to a Kubernetes cluster or AWS Lambda. -## Deploy a sample app provided by Armory +If you need a Kubernetes cluster, consider installing a local [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) or [Minikube](https://minikube.sigs.k8s.io/docs/start/) cluster. Your cluster's API endpoint does not need to be publicly accessible to use CD-as-a-Service. Alternately, you can use a interactive learning environment like [Killercoda](https://killercoda.com/learn). + + +## AWS Lambda + +### Deploy a sample app provided by Armory + + * Written [Quickstart guide]({{< ref "get-started/lambda.md" >}}) deploying a sample function to your AWS account + +## Kubernetes + +### Deploy a sample app provided by Armory * [Guided UI tour](https://console.cloud.armory.io/getting-started) using an Armory sandbox cluster * Written [Quickstart guide]({{< ref "get-started/quickstart.md" >}}) deploying a sample app to your own cluster -## Deploy your own app to your cluster +### Deploy your own app to your cluster * [Guided UI tour](https://console.cloud.armory.io/getting-started?gettingStartedPane=InstallFlowPane) * Written [Deploy Your Own App]({{< ref "get-started/deploy-your-app.md" >}}) guide \ No newline at end of file diff --git a/content/en/get-started/quickstart/index.md b/content/en/get-started/quickstart/index.md index 80cdb2c2..c00fd912 100644 --- a/content/en/get-started/quickstart/index.md +++ b/content/en/get-started/quickstart/index.md @@ -1,8 +1,8 @@ --- -title: Quickstart -linktitle: Quickstart +title: Quickstart Kubernetes Deployment +linktitle: Quickstart Kubernetes description: > - Quickly get started using Armory CD-as-a-Service. Install the CLI, connect your Kubernetes cluster with a single command, and deploy a sample app using a canary traffic split strategy. Learn deployment file syntax. + Quickly get started using Armory CD-as-a-Service to deploy a sample app to Kubernetes. Install the CLI, connect your Kubernetes cluster with a single command, and deploy a sample app using a canary traffic split strategy. Learn deployment file syntax. weight: 2 categories: ["Get Started", "Guides"] tags: ["Deployment", "Quickstart"] From 12f9da1d8c9a048eea996ba81ce09e63d6146f55 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 6 Nov 2023 14:15:02 -0600 Subject: [PATCH 02/28] add skeleton lambda deploy config file --- content/en/deployment/create-deploy-config.md | 21 +++++- content/en/get-started/deploy-your-app.md | 4 +- .../get-started/deploy-your-own-function.md | 11 +++ content/en/get-started/lambda/index.md | 3 +- ...{create-config.md => create-k8s-config.md} | 0 content/en/includes/create-lambda-config.md | 15 ++++ .../{deploy-example.yaml => k8s-example.yaml} | 0 ...leton-config.md => k8s-skeleton-config.md} | 2 +- .../en/includes/dep-file/lambda-example.yaml | 68 +++++++++++++++++++ .../dep-file/lambda-skeleton-config.md | 6 ++ .../en/integrations/ci-systems/gh-action.md | 2 +- content/en/reference/deployment/_index.md | 23 +++++-- .../deployment/config-file/_index.md | 11 ++- 13 files changed, 152 insertions(+), 14 deletions(-) create mode 100644 content/en/get-started/deploy-your-own-function.md rename content/en/includes/{create-config.md => create-k8s-config.md} (100%) create mode 100644 content/en/includes/create-lambda-config.md rename content/en/includes/dep-file/{deploy-example.yaml => k8s-example.yaml} (100%) rename content/en/includes/dep-file/{skeleton-config.md => k8s-skeleton-config.md} (71%) create mode 100644 content/en/includes/dep-file/lambda-example.yaml create mode 100644 content/en/includes/dep-file/lambda-skeleton-config.md diff --git a/content/en/deployment/create-deploy-config.md b/content/en/deployment/create-deploy-config.md index 47c4ea12..5c2125e9 100644 --- a/content/en/deployment/create-deploy-config.md +++ b/content/en/deployment/create-deploy-config.md @@ -14,11 +14,26 @@ Make sure you have [installed the CD-as-a-Service CLI]({{< ref "cli" >}}), which ## How to create a deployment config file -{{< include "create-config.md" >}} +{{< tabpane text=true right=true >}} +{{% tab header="**Platform:**" disabled=true /%}} +{{% tab header="Kubernetes" %}} +{{< include "create-k8s-config.md" >}} +{{% /tab %}} +{{% tab header="AWS Lambda" %}} +{{< include "create-lambda-config.md" >}} +{{% /tab %}} +{{< /tabpane >}} -## Deployment config file example +## Deployment config file examples + +### Kubernetes + +{{< include "dep-file/k8s-skeleton-config.md" >}} + +### AWS Lambda + +{{< include "dep-file/lambda-skeleton-config.md" >}} -{{< include "dep-file/skeleton-config.md" >}} ## {{% heading "nextSteps" %}} diff --git a/content/en/get-started/deploy-your-app.md b/content/en/get-started/deploy-your-app.md index 832a3512..f0e63d6f 100644 --- a/content/en/get-started/deploy-your-app.md +++ b/content/en/get-started/deploy-your-app.md @@ -1,6 +1,6 @@ --- -title: Deploy Your Own App -linkTitle: Deploy Your Own App +title: Deploy Your Own App to Kubernetes +linkTitle: Deploy Your Own Kubernetes App description: > Use a canary strategy to deploy two versions of your app to your Kubernetes cluster with Armory CD-as-a-Service. Install the CLI, connect your cluster, create a deployment config file, and deploy your app to two environments. weight: 10 diff --git a/content/en/get-started/deploy-your-own-function.md b/content/en/get-started/deploy-your-own-function.md new file mode 100644 index 00000000..11120848 --- /dev/null +++ b/content/en/get-started/deploy-your-own-function.md @@ -0,0 +1,11 @@ +--- +title: Deploy Your Own Function to AWS Lambda +linkTitle: Deploy Your Own Function +description: > + tbd +weight: 10 +draft: true +--- + + - lambda function + - S3 https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html \ No newline at end of file diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index ff517f93..b1aa186a 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -19,7 +19,8 @@ tags: ["Deployment", "Quickstart"] ## {{% heading "prereq" %}} * You are familiar with CD-as-a-Service's [key components]({{< ref "architecture.md" >}}). -* You have an [AWS account](https://aws.amazon.com/) and are familiar with [AWS Lambda](https://aws.amazon.com/lambda/). +* You should be familiar with [AWS Lambda](https://aws.amazon.com/lambda/) and have a [Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). + ## Sign up for CD-as-a-Service diff --git a/content/en/includes/create-config.md b/content/en/includes/create-k8s-config.md similarity index 100% rename from content/en/includes/create-config.md rename to content/en/includes/create-k8s-config.md diff --git a/content/en/includes/create-lambda-config.md b/content/en/includes/create-lambda-config.md new file mode 100644 index 00000000..98d1150a --- /dev/null +++ b/content/en/includes/create-lambda-config.md @@ -0,0 +1,15 @@ +1. Create a YAML file. + +1. Customize your deployment file by setting the following minimum set of parameters: + + - `application`: The name of your app. + - `targets.`: A descriptive name for your deployment. Armory recommends using the environment name. + - `targets..account`: This is the name of your RNA. If you installed the RNA manually, it is the value that you assigned to the `agentIdentifier` parameter. + + LAMBDA STUFF + +1. (Optional) Ensure there are no YAML issues with your deployment file. + + Since a hidden tab in your YAML can cause your deployment to fail, it's a good idea to validate the structure and syntax in your deployment file. There are several online linters, IDE-based linters, and command line linters such as `yamllint` that you can use to validate your deployment file. + +> You can view detailed configuration options in the {{< linkWithTitle "reference/deployment/config-file/_index.md" >}} section. diff --git a/content/en/includes/dep-file/deploy-example.yaml b/content/en/includes/dep-file/k8s-example.yaml similarity index 100% rename from content/en/includes/dep-file/deploy-example.yaml rename to content/en/includes/dep-file/k8s-example.yaml diff --git a/content/en/includes/dep-file/skeleton-config.md b/content/en/includes/dep-file/k8s-skeleton-config.md similarity index 71% rename from content/en/includes/dep-file/skeleton-config.md rename to content/en/includes/dep-file/k8s-skeleton-config.md index d719a29d..8a8d8dcb 100644 --- a/content/en/includes/dep-file/skeleton-config.md +++ b/content/en/includes/dep-file/k8s-skeleton-config.md @@ -2,5 +2,5 @@ Expand to see a skeleton config file for a deployment to Kubernetes. All all con
Click to view a skeleton deployment config file
-{{< readfile file="/includes/dep-file/deploy-example.yaml" code="true" lang="yaml" >}} +{{< readfile file="/includes/dep-file/k8s-example.yaml" code="true" lang="yaml" >}}
\ No newline at end of file diff --git a/content/en/includes/dep-file/lambda-example.yaml b/content/en/includes/dep-file/lambda-example.yaml new file mode 100644 index 00000000..3c0593fe --- /dev/null +++ b/content/en/includes/dep-file/lambda-example.yaml @@ -0,0 +1,68 @@ +--- +version: v1 +kind: lambda +application: +targets: + : + account: + region: + deployAsIamRole: + strategy: + constraints: + dependsOn: + - + - +artifacts: + - functionName: + path: # S3 bucket + type: zipFile +providerOptions: + lambda: + - handler: # typically index.handler + name: + runAsIamRole: + runtime: # nodejs18.x, Python, etc + target: +strategies: + : + canary: + steps: + - pause: + duration: + unit: + - setWeight: + weight: 100 + - runWebhook: + name: +analysis: + defaultMetricProviderName: + queries: + - name: + upperLimit: + lowerLimit: + queryTemplate: >- + +webhooks: + - name: + method: + uriTemplate: + networkMode: + agentIdentifier: + headers: + - key: Authorization + value: + - key: Content-Type + value: application/json + bodyTemplate: + inline: >- + { + "event_type": "", + "client_payload": { + "callbackUri": "{{armory.callbackUri}}/callback" + } + } + retryCount: +deploymentConfig: + timeout: + unit: + duration: diff --git a/content/en/includes/dep-file/lambda-skeleton-config.md b/content/en/includes/dep-file/lambda-skeleton-config.md new file mode 100644 index 00000000..4f0b684f --- /dev/null +++ b/content/en/includes/dep-file/lambda-skeleton-config.md @@ -0,0 +1,6 @@ +Expand to see a skeleton config file for a deployment to AWS Lambda. All all config options are listed for each section. + +
Click to view a skeleton deployment config file +
+{{< readfile file="/includes/dep-file/lambda-example.yaml" code="true" lang="yaml" >}} +
\ No newline at end of file diff --git a/content/en/integrations/ci-systems/gh-action.md b/content/en/integrations/ci-systems/gh-action.md index cb78e96e..e861c401 100644 --- a/content/en/integrations/ci-systems/gh-action.md +++ b/content/en/integrations/ci-systems/gh-action.md @@ -58,7 +58,7 @@ Then the value you use for `manifests.path` in your `deployment.yaml` would be ` ### Create a deployment file -{{< include "create-config.md" >}} +{{< include "create-k8s-config.md" >}} Save your deployment file to a directory in your repo. You use this path later when you configure the GitHub Action's `path-to-file` parameter. diff --git a/content/en/reference/deployment/_index.md b/content/en/reference/deployment/_index.md index 5dd3cec3..af85f998 100644 --- a/content/en/reference/deployment/_index.md +++ b/content/en/reference/deployment/_index.md @@ -17,7 +17,7 @@ Make sure you have [installed the CD-as-a-Service CLI]({{< ref "cli" >}}), which ## Templates -You can generate a template file by running the following command with the CLI: +You can generate a Kubernetes deployment config file template by running the following command with the CLI: Basic template: @@ -48,12 +48,27 @@ armory template kubernetes [template-type] > deployment-template.yaml ## How to create a deployment config file -{{< include "create-config.md" >}} +{{< tabpane text=true right=true >}} +{{% tab header="**Platform:**" disabled=true /%}} +{{% tab header="Kubernetes" %}} +{{< include "create-k8s-config.md" >}} +{{% /tab %}} +{{% tab header="AWS Lambda" %}} +{{< include "create-lambda-config.md" >}} +{{% /tab %}} +{{< /tabpane >}} -## Deployment config file example -{{< include "dep-file/skeleton-config.md" >}} +## Deployment config file examples + +### Kubernetes + +{{< include "dep-file/k8s-skeleton-config.md" >}} + +### AWS Lambda + +{{< include "dep-file/lambda-skeleton-config.md" >}} ## {{% heading "nextSteps" %}} diff --git a/content/en/reference/deployment/config-file/_index.md b/content/en/reference/deployment/config-file/_index.md index 1ede758e..6627f1f1 100644 --- a/content/en/reference/deployment/config-file/_index.md +++ b/content/en/reference/deployment/config-file/_index.md @@ -8,9 +8,16 @@ categories: ["Reference"] tags: ["Deployment", "Deploy Config"] --- -## Deployment config file example +## Deployment config file examples + +### Kubernetes + +{{< include "dep-file/k8s-skeleton-config.md" >}} + +### AWS Lambda + +{{< include "dep-file/lambda-skeleton-config.md" >}} -{{< include "dep-file/skeleton-config.md" >}} From 89385b1a9104196386dd2e34ac71a7ad693806bc Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 8 Nov 2023 14:05:37 -0600 Subject: [PATCH 03/28] stub lambda overview; troubleshoot page --- content/en/deployment/lambda/_index.md | 12 --- content/en/deployment/lambda/index.md | 58 +++++++++++++++ .../en/deployment/lambda/lambda-deploy.webp | Bin 0 -> 17496 bytes content/en/deployment/overview/index.md | 6 +- .../get-started/lambda/create-s3-bucket.webp | Bin 0 -> 26226 bytes content/en/get-started/lambda/index.md | 4 +- .../deployment/config-file/application.md | 14 ++-- .../deployment/config-file/artifacts.md | 30 ++++++++ .../config-file/provider-options.md | 26 +++++++ .../deployment/config-file/strategies.md | 2 + .../deployment/config-file/targets.md | 70 +++++++++++------- .../config-file/traffic-management.md | 2 +- content/en/troubleshooting/lambda.md | 49 ++++++++++++ 13 files changed, 225 insertions(+), 48 deletions(-) delete mode 100644 content/en/deployment/lambda/_index.md create mode 100644 content/en/deployment/lambda/index.md create mode 100644 content/en/deployment/lambda/lambda-deploy.webp create mode 100644 content/en/get-started/lambda/create-s3-bucket.webp create mode 100644 content/en/reference/deployment/config-file/artifacts.md create mode 100644 content/en/reference/deployment/config-file/provider-options.md create mode 100644 content/en/troubleshooting/lambda.md diff --git a/content/en/deployment/lambda/_index.md b/content/en/deployment/lambda/_index.md deleted file mode 100644 index 0e52e63f..00000000 --- a/content/en/deployment/lambda/_index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Lambda -linktitle: Lambda -weight: 10 -description: > - placeholder -draft: true -no_list: false -exclude_search: true ---- - - @TODO placeholder change to DRAFT \ No newline at end of file diff --git a/content/en/deployment/lambda/index.md b/content/en/deployment/lambda/index.md new file mode 100644 index 00000000..aca18f6d --- /dev/null +++ b/content/en/deployment/lambda/index.md @@ -0,0 +1,58 @@ +--- +title: AWS Lambda Deployment Overview +linktitle: AWS Lambda Overview +weight: 1 +description: > + Learn what an Armory CD-as-a-Service deployment to AWS Lambda is, how CD-as-a-Service connects to your AWS Account, and how deployment works. +--- + + +## What a deployment is + +A _deployment_ encompasses the manifests, artifacts, configuration, and actions that deliver your code to remote environments. You can configure a deployment to deliver your Lambda function to a single environment or multiple environments, either in sequence or in parallel depending on your [deployment configuration]({{}}). + +You define your CD-as-a-Service deployment configuration in a YAML file, which you store within your source control, enabling code-like management. You trigger deployments using the Armory CLI, either from your CI system or your workstation. Although CD-as-a-Service requires a separate deployment configuration file for each app, you can deploy multiple Kubernetes Deployment objects together as part of a single app. + +## How deployment works + +{{< figure src="lambda-deploy.webp" width=80%" height="80%" >}} + +CD-as-a-Service starts a deployment with a target environment, which is a combination of AWS account and region. such as development, that does not depend on another environment. Then deployment progresses through the steps, conditions, and environments defined in your deployment process. + + +CD-as-a-Service automatically rolls back when: + * There is an error deploying your Lambda function + * Deployment fails to finish within 30 minutes + * A webhook fails + * You configured your retrospective analysis step to automatically rollback + * A user fails to issue a configured manual approval within a specified time frame + * A deployment target constraint is not met + +## How CD-as-a-Service integrates with AWS + +ArmoryRole per account + +S3 bucket per region + +zip in region bucket that matches target deploy region + +4 accounts all deploy to 1 region, only need 1 S3 bucket + +1 account deploy to 4 regions, need 4 S3 buckets + +## How to trigger a deployment + +* [Use the GitHub Action]({{< ref "integrations/ci-systems/gh-action" >}}) in your GitHub workflow. +* [Use the CLI]({{< ref "cli" >}}) with any CI system by installing the CLI natively or running it in Docker. + + +## Define your deployment + +CD-as-a-Service enables you to declaratively define your deployment configuration outcome in a YAML file. +At its core, you only need to provide only three pieces of information: + +* The target you want to deploy to +* The Lambda function you want to deploy +* The deployment strategy you want to use for the deployment + +An example of a simple deployment may look like this: \ No newline at end of file diff --git a/content/en/deployment/lambda/lambda-deploy.webp b/content/en/deployment/lambda/lambda-deploy.webp new file mode 100644 index 0000000000000000000000000000000000000000..be1b08359e4536d26a9a1016d73a118aac73650f GIT binary patch literal 17496 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 ki_;L` - Learn what an Armory CD-as-a-Service deployment is and how it works - strategies (blue/green, canary) and constraints for deploying your app to your target Kubernetes clusters. + Learn what an Armory CD-as-a-Service deployment to Kubernetes is and how it works - strategies (blue/green, canary) and constraints for deploying your app to your target Kubernetes clusters. categories: ["Canary Analysis", "Features", "Concepts"] tags: ["Deploy Strategy", "Canary", "Blue/Green", "Kubernetes"] --- diff --git a/content/en/get-started/lambda/create-s3-bucket.webp b/content/en/get-started/lambda/create-s3-bucket.webp new file mode 100644 index 0000000000000000000000000000000000000000..d684d920ecb1db41f574f49a690223c319f4918b GIT binary patch literal 26226 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 - Define your app name. + Declare your app name and specify whether the deployment is to Kubernetes or AWS Lambda. --- -## Application + +## Fields ```yaml version: v1 -kind: kubernetes -application: +kind: +application: ``` -Provide a descriptive name for your application so that you can identify it when viewing the status of your deployment in the **Deployments UI** and other locations. +- `kind`: `kubernetes` or `lambda` +- `application`: Provide a descriptive name for your Kubernetes app or Lambda function so that you can identify it when viewing the status of your deployment in the **Deployments UI** and other locations. diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md new file mode 100644 index 00000000..a5e25174 --- /dev/null +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -0,0 +1,30 @@ +--- +title: Artifacts (AWS Lambda) +description: > + Declare your AWS Lambda artifacts (functionName, path, type). +--- + + +## Artifacts + +This section defines the artifacts you are deploying. By default, the artifacts reach all targets, but you can specify certain targets if needed. + +```yaml +artifacts: + - functionName: + path: # S3 bucket + type: zipFile +``` + +- `functionName`: +- `path`: The S3 path to your function archive? + +does cdaas support lambda container images uploaded to amazon ecr? + +- `type`: ? AWS also supports + + + + + + diff --git a/content/en/reference/deployment/config-file/provider-options.md b/content/en/reference/deployment/config-file/provider-options.md new file mode 100644 index 00000000..7add9e15 --- /dev/null +++ b/content/en/reference/deployment/config-file/provider-options.md @@ -0,0 +1,26 @@ +--- +title: Provider Options (Lambda) +description: > + Declare your Lambda provider options. +--- + +## Provider options + +This section defines options specific to the cloud provider to which you are deploying. + +```yaml +providerOptions: + lambda: + - handler: # typically index.handler + name: + runAsIamRole: + runtime: # nodejs18.x, Python, etc + target: +``` + + +- `handler`: Lambda function handler name, such as `index.handler` +- `name`: The name of your function; this is the same as `artifacts.functionName` +- `runAsIamRole`: The name of the [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) for your function +- `runtime`: Your function's [runtime identifier](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html), such as `python3.22` or `nodejs18.x` +- `target`: CD-as-a-Service [target]({{< ref "reference/deployment/config-file/targets" >}}) \ No newline at end of file diff --git a/content/en/reference/deployment/config-file/strategies.md b/content/en/reference/deployment/config-file/strategies.md index 3c50ac38..b33ab4dd 100644 --- a/content/en/reference/deployment/config-file/strategies.md +++ b/content/en/reference/deployment/config-file/strategies.md @@ -345,6 +345,8 @@ All the queries must pass for the step as a whole to be considered a success. ## Blue/green fields +**Kubernetes** + ```yaml strategies: diff --git a/content/en/reference/deployment/config-file/targets.md b/content/en/reference/deployment/config-file/targets.md index 900cdbc8..9f17f6db 100644 --- a/content/en/reference/deployment/config-file/targets.md +++ b/content/en/reference/deployment/config-file/targets.md @@ -1,24 +1,41 @@ --- title: Targets Config description: > - Declare your deployment targets: account, namespace, and strategy to use. Configure target constraints such as `dependsOn`, `beforeDeployment`, and `afterDeployment` with pause, webhoook, and analysis conditions. + Declare your Kubernetes or Lambda deployment targets. --- ## Targets config overview -In the `targets.` config block, you define where and how you want to deploy an app. You can specify multiple targets. Provide unique descriptive names for each environment to which you are deploying. +In the `targets.` config block, you define where and how you want to deploy your Kubernetes app or Lambda function. -```yaml +You can specify multiple targets. Provide unique descriptive names for each target to which you are deploying. + +{{< cardpane >}} +{{< card code=true lang="yaml" header="Kubernetes" >}} targets: : - account: - namespace: - strategy: - constraints: -``` + account: + namespace: + strategy: + constraints: +{{< /card >}} +{{< card code=true lang="yaml" header="Lambda" >}} +targets: + : + account: + deployAsIamRole: + region: + strategy: + constraints: +{{< /card >}} +{{< /cardpane >}} -## Name +## Common fields + +These fields are declared the same whether your target is AWS Lambda or a Kubernetes cluster. + +### Name `targets.`: A descriptive name for this deployment, such as the name of the environment you want to deploy to. @@ -30,7 +47,24 @@ targets: ... ``` -## Account (cluster) +### Strategy + +`targets..strategy`: This is the name of the strategy that you want to use to deploy your app. You define the strategy and its behavior in the `strategies` block. + +For example, this snippet configures a deployment to use the `canary-wait-til-approved` strategy: + +```yaml +targets: + prod: + account: prod-cluster-west + strategy: canary-wait-til-approved +``` + +Read more about how this config is defined and used in the [strategies]({{< ref "reference/deployment/config-file/strategies" >}}) section. + +## Kubernetes fields + +### Account (cluster) `targets..account`: The account name that a target Kubernetes cluster got assigned when you installed the Remote Network Agent (RNA) on it. Specifically, it is the value for the `agentIdentifier` parameter. Note that older versions of the RNA used the `agent-k8s.accountName` parameter. @@ -45,7 +79,7 @@ targets: ... ``` -## Namespace +### Namespace `targets..namespace` @@ -62,21 +96,7 @@ targets: namespace: overflow ``` -## Strategy -`targets..strategy`: This is the name of the strategy that you want to use to deploy your app. You define the strategy and its behavior in the `strategies` block. - -For example, this snippet configures a deployment to use the `canary-wait-til-approved` strategy: - -```yaml -targets: - prod: - account: prod-cluster-west - namespace: overflow - strategy: canary-wait-til-approved -``` - -Read more about how this config is defined and used in the [strategies]({{< ref "reference/deployment/config-file/strategies" >}}) section. ## Constraints diff --git a/content/en/reference/deployment/config-file/traffic-management.md b/content/en/reference/deployment/config-file/traffic-management.md index 71641b0a..85adb4b3 100644 --- a/content/en/reference/deployment/config-file/traffic-management.md +++ b/content/en/reference/deployment/config-file/traffic-management.md @@ -1,7 +1,7 @@ --- title: Traffic Management Config description: > - Declare Istio or Linkerd traffic management for all or specific targets. Configure Istio settings such as virtual service and destination rule. Configure Linkerd settings like root service, canary service, active service, and traffic split. + Declare Istio or Linkerd traffic management for all or specific Kubernetes targets. Configure Istio settings such as virtual service and destination rule. Configure Linkerd settings like root service, canary service, active service, and traffic split. --- ## Traffic management section diff --git a/content/en/troubleshooting/lambda.md b/content/en/troubleshooting/lambda.md new file mode 100644 index 00000000..925f2b13 --- /dev/null +++ b/content/en/troubleshooting/lambda.md @@ -0,0 +1,49 @@ +--- +title: Troubleshoot Lambda Deployment +linkTitle: Lambda +weight: 1 +description: > + Solutions for issues you might encounter while deploying AWS Lambda functions using the Armory CD-as-a-Service. +--- + + + +## InvalidParameterValueException + +```yaml +AWSCreateLambdaError: operation error +Lambda: CreateFunction, https response error +StatusCode: 400, +RequestID: ce98341e-8aa6-4c42-99e1-544245303295, +InvalidParameterValueException: Error occurred while GetObject. +S3 Error Code: PermanentRedirect. +S3 Error Message: The bucket is in this region: us-east-2. Please use this region to retry the request +``` + +Duplicate functionName in deploy config file + +You need to have an S3 bucket with your function archive in the region you want to deploy your function to. + +For example: + +| Function | Target and Region | S3 Bucket Region | Bucket Name | Function Path | +|-----------------|-------------------|------------------|---------------|------------------------------------| +| hello-world.zip | Dev: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | +| hello-world.zip | Staging: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | +| hello-world.zip | Infosec: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | +| hello-world.zip | Prod: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | +| hello-world.zip | Prod: us-east-2 | us-east-2 | lambda-us-east-2 | s3://lambda-us-east-2/hello-world.zip | +| hello-world.zip | Prod: us-west-1 | us-west-1 | lambda-us-west-1 | s3://lambda-us-west-1/hello-world.zip | +| hello-world.zip | Prod: us-west-2 | us-west-2 | lambda-us-west-2 | s3://lambda-us-west-2/hello-world.zip | + + + + +## ResourceConflictException + +AWSUpdateLambdaError: operation error Lambda: UpdateFunctionCode, https response error StatusCode: 409, RequestID: 8027c7ee-0762-4027-a238-2c636a716d48, ResourceConflictException: Conflict due to concurrent requests on this function. Please try this request again. + + Concurrent deployments to same region + + +2 concurrent targets in same region From 2ed22f850ae34ddaa2c6fd790069f5f2cbbe6962 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 13 Nov 2023 11:11:17 -0600 Subject: [PATCH 04/28] update account to be user-supplied name --- content/en/deployment/lambda/index.md | 289 +++++++++++++++++- .../en/includes/dep-file/lambda-example.yaml | 2 +- 2 files changed, 278 insertions(+), 13 deletions(-) diff --git a/content/en/deployment/lambda/index.md b/content/en/deployment/lambda/index.md index aca18f6d..42d64c4d 100644 --- a/content/en/deployment/lambda/index.md +++ b/content/en/deployment/lambda/index.md @@ -9,7 +9,7 @@ description: > ## What a deployment is -A _deployment_ encompasses the manifests, artifacts, configuration, and actions that deliver your code to remote environments. You can configure a deployment to deliver your Lambda function to a single environment or multiple environments, either in sequence or in parallel depending on your [deployment configuration]({{}}). +A _deployment_ encompasses the manifests, artifacts, configuration, and actions that deliver your code to remote environments. You can configure a deployment to deliver your [AWS Lambda](https://docs.aws.amazon.com/lambda) function to a single environment or multiple environments, either in sequence or in parallel depending on your [deployment configuration]({{}}). You define your CD-as-a-Service deployment configuration in a YAML file, which you store within your source control, enabling code-like management. You trigger deployments using the Armory CLI, either from your CI system or your workstation. Although CD-as-a-Service requires a separate deployment configuration file for each app, you can deploy multiple Kubernetes Deployment objects together as part of a single app. @@ -19,8 +19,8 @@ You define your CD-as-a-Service deployment configuration in a YAML file, which y CD-as-a-Service starts a deployment with a target environment, which is a combination of AWS account and region. such as development, that does not depend on another environment. Then deployment progresses through the steps, conditions, and environments defined in your deployment process. - CD-as-a-Service automatically rolls back when: + * There is an error deploying your Lambda function * Deployment fails to finish within 30 minutes * A webhook fails @@ -30,29 +30,294 @@ CD-as-a-Service automatically rolls back when: ## How CD-as-a-Service integrates with AWS -ArmoryRole per account +CD-as-a-Service needs to assume an IAM Role to manage your Lambda deployments. The Armory CLI provides a function that creates an [AWS CloudFormation Stack](https://docs.aws.amazon.com/cloudformation/) with an IAM Role, by default named **ArmoryRole**. You need to create a Stack in each AWS Account you want to deploy your Lambda functions to. Each AWS Accounts needs its own **ArmoryRole**. + +You need to store your function zip files in an S3 bucket, and the S3 bucket should be in the same region you deploy to. For example, if you plan to deploy to three regions, you need three S3 buckets, one for each region. CD-as-a-Service deploys your Lambda function's archive from your S3 bucket. + +| AWS Accounts | ArmoryRole | Regions | S3 Buckets | +|--------------|-----------|---------|------------| +| 1 | 1 | 4 | 4 | +| 4 | 4 | 1 | 1 | +| 4 | 4 | 4 | 4 | +| 2 | 2 | 6 | 6 | + + + -4 accounts all deploy to 1 region, only need 1 S3 bucket +For each Lambda function you want to deploy, CD-as-a-Service needs the following: -1 account deploy to 4 regions, need 4 S3 buckets +1. **ArmoryRole** ARN +1. Region +1. S3 path to the function zip file +1. The ARN of your [Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) +1. Your function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) and handler method + +This basic example deploys one function to one region in one account: + +```yaml +version: v1 +kind: lambda +application: potatoless-facts +description: awsLambda +targets: + us-east-1: + account: armory-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-1 + strategy: allAtOnce +strategies: + allAtOnce: + canary: + steps: + - setWeight: + weight: 100 +artifacts: + - functionName: potatolessFacts + path: s3://armory-docs-dev-us-east-1/potatolessfacts-justsweetpotatoes.zip + type: zipFile +providerOptions: + lambda: + - name: potatolessFacts + target: us-east-1 + runAsIamRole: arn:aws:iam::111111111111:role/lamdaExecutionRole + handler: index.handler + runtime: nodejs18.x +``` ## How to trigger a deployment +* [Use the CLI]({{< ref "cli" >}}) in your terminal or with any CI system by installing the CLI natively or running it in Docker. * [Use the GitHub Action]({{< ref "integrations/ci-systems/gh-action" >}}) in your GitHub workflow. -* [Use the CLI]({{< ref "cli" >}}) with any CI system by installing the CLI natively or running it in Docker. ## Define your deployment -CD-as-a-Service enables you to declaratively define your deployment configuration outcome in a YAML file. -At its core, you only need to provide only three pieces of information: +CD-as-a-Service enables you to declare your deployment configuration outcome in a YAML file. + +For an AWS Lambda deployment, you only need to provide the following pieces of information: * The target you want to deploy to * The Lambda function you want to deploy -* The deployment strategy you want to use for the deployment +* Provider options for that Lambda function +* The canary strategy you want to use for the deployment + +## Elements of a deployment + +### Targets + +Within a deployment, you define _targets_ that are equivalent to the environments you are deploying to - a unique combination of AWS account (ArmoryRole ARN) and region. + +The following example has multiple region-based targets in a single AWS account: + +```yaml +targets: + Prod-East-1: + account: armory-prod + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-1 + strategy: allAtOnce + Prod-West-2: + account: armory-prod + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-2 + strategy: allAtOnce +``` + +This example has targets that are separate AWS Accounts: + +```yaml +targets: + Lab: + account: armory-lab + deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + Staging: + account: armory-core + deployAsIamRole: "arn:aws:iam::222222222222:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + Audit: + account: armory-audit + deployAsIamRole: "arn:aws:iam::333333333333:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + ITSec: + account: armory-itsec + deployAsIamRole: "arn:aws:iam::444444444444:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment +``` + +#### Target constraints + +You can also configure your deployment targets to use constraints that prevent a deployment from beginning or completing until certain conditions are met. For example, you can configure your deployment to wait for your code to be deployed to your staging environment before promoting that code to production. + +You can set `beforeDeployment` or `afterDeployment` constraints depending on your use case. + +CD-as-a-Service offers you multiple constraint options including: + +* `dependsOn` + Use `dependsOn` to specify a target deployment that must successfully complete prior to starting this target's deployment. +* `pause` + Use `pause` to pause a deployment for a set period of time or until an authorized user issues an approval. + +This example has multiple targets and illustrates `dependsOn`, `beforeDeployment`, and `afterDeployment` constraints. + +```yaml +targets: + Lab: + account: armory-lab + deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + Staging: + account: armory-core + deployAsIamRole: "arn:aws:iam::222222222222:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Integration-Tests + Audit: + account: armory-audit + deployAsIamRole: "arn:aws:iam::333333333333:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Audit-Analysis + ITSec: + account: armory-itsec + deployAsIamRole: "arn:aws:iam::444444444444:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Security-Scans + Prod-West-2: + account: armory-prod + deployAsIamRole: "arn:aws:iam::555555555555:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Staging + - Audit + - ITSec + beforeDeployment: + - runWebhook: + name: Send-Slack-Deployment-Approval-Required + - pause: + untilApproved: true +``` + +### Artifacts + +An _artifact_ is your Lambda function name and the S3 path to the function's archive. + +```yaml +artifacts: + - functionName: hello-world-python + path: s3://armory-demos-us-west-2/hello-world-python.zip + type: zipFile +``` + +### Provider options + +This section is where you provide additional information about your function. Each target has an entry. + +```yaml +providerOptions: + lambda: + - target: Lab + name: hello-world-python + runAsIamRole: arn:aws:iam::111111111111:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: Staging + name: hello-world-python + runAsIamRole: arn:aws:iam::222222222222:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: Audit + name: hello-world-python + runAsIamRole: arn:aws:iam::333333333333:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: ITSec + name: hello-world-python + runAsIamRole: arn:aws:iam::444444444444:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: Prod-West-2 + name: hello-world-python + runAsIamRole: arn:aws:iam::555555555555:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 +``` + +### Strategies + +A deployment strategy is the method by which CD-as-a-Service deploys your changes to a target. Strategies can use different techniques to allow for rapid rollback should a problem be discovered, minimizing the impact of potential issues to a small subset of users. You could also use a strategy optimized for speed. + +For Lambda, CD-as-a-Service supports a canary deployment strategy, which involves releasing a new software version to a small subset of users or systems while leaving the majority on the current version. This strategy allows for real-world testing and monitoring of the new version's performance and stability. +If the canary users experience positive results, the new version can be gradually rolled out to a wider audience. + +```yaml +strategies: + allAtOnce: + canary: + steps: + - setWeight: + weight: 100 +``` -An example of a simple deployment may look like this: \ No newline at end of file +## {{% heading "nextSteps" %}} \ No newline at end of file diff --git a/content/en/includes/dep-file/lambda-example.yaml b/content/en/includes/dep-file/lambda-example.yaml index 3c0593fe..12369049 100644 --- a/content/en/includes/dep-file/lambda-example.yaml +++ b/content/en/includes/dep-file/lambda-example.yaml @@ -4,7 +4,7 @@ kind: lambda application: targets: : - account: + account: region: deployAsIamRole: strategy: From 3285cd1faf047883cb259c223052cb1dc1889d6a Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 13 Nov 2023 16:42:19 -0600 Subject: [PATCH 05/28] get started - add buckets --- content/en/deployment/lambda/index.md | 4 +- .../get-started/lambda/create-s3-bucket.webp | Bin 26226 -> 0 bytes .../lambda/files/just-sweet-potatoes.zip | Bin 0 -> 943 bytes content/en/get-started/lambda/index.md | 102 +++++++++++++++++- content/en/get-started/lambda/s3-buckets.webp | Bin 0 -> 25444 bytes content/en/includes/lambda/iam-role.md | 1 + 6 files changed, 102 insertions(+), 5 deletions(-) delete mode 100644 content/en/get-started/lambda/create-s3-bucket.webp create mode 100644 content/en/get-started/lambda/files/just-sweet-potatoes.zip create mode 100644 content/en/get-started/lambda/s3-buckets.webp create mode 100644 content/en/includes/lambda/iam-role.md diff --git a/content/en/deployment/lambda/index.md b/content/en/deployment/lambda/index.md index 42d64c4d..9ecbad26 100644 --- a/content/en/deployment/lambda/index.md +++ b/content/en/deployment/lambda/index.md @@ -30,9 +30,9 @@ CD-as-a-Service automatically rolls back when: ## How CD-as-a-Service integrates with AWS -CD-as-a-Service needs to assume an IAM Role to manage your Lambda deployments. The Armory CLI provides a function that creates an [AWS CloudFormation Stack](https://docs.aws.amazon.com/cloudformation/) with an IAM Role, by default named **ArmoryRole**. You need to create a Stack in each AWS Account you want to deploy your Lambda functions to. Each AWS Accounts needs its own **ArmoryRole**. +{{< include "lambda/iam-role.md" >}} -You need to store your function zip files in an S3 bucket, and the S3 bucket should be in the same region you deploy to. For example, if you plan to deploy to three regions, you need three S3 buckets, one for each region. CD-as-a-Service deploys your Lambda function's archive from your S3 bucket. +You need to store your function zip files in an S3 bucket, and the S3 bucket should be in the same region you deploy to (this is an AWS limitation). For example, if you plan to deploy to three regions, you need three S3 buckets, one for each region. CD-as-a-Service deploys your Lambda function's archive from your S3 bucket. | AWS Accounts | ArmoryRole | Regions | S3 Buckets | |--------------|-----------|---------|------------| diff --git a/content/en/get-started/lambda/create-s3-bucket.webp b/content/en/get-started/lambda/create-s3-bucket.webp deleted file mode 100644 index d684d920ecb1db41f574f49a690223c319f4918b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26226 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 literal 0 HcmV?d00001 diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 37ffd912..2d61cdb9 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -13,14 +13,14 @@ tags: ["Deployment", "Quickstart"] 1. [Sign up for CD-as-a-Service](#sign-up-for-cd-as-a-service). 1. [Install the CD-as-as-Service CLI](#install-the-cd-as-as-service-cli) on your Mac, Linux, or Windows workstation. -1. [Connect your Kubernetes cluster](#connect-your-cluster) to CD-as-a-Service. +1. ## {{% heading "prereq" %}} * You are familiar with CD-as-a-Service's [key components]({{< ref "architecture.md" >}}). * You should be familiar with [AWS Lambda](https://aws.amazon.com/lambda/) and have a [Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). - +* You have read the {{< linkWithTitle "deployment/lambda/index.md" >}}. ## Sign up for CD-as-a-Service @@ -38,4 +38,100 @@ armory login Confirm the device code in your browser when prompted. Then return to this guide. -## Create the Armory role \ No newline at end of file +## Create the Armory IAM role + +{{< include "lambda/iam-role.md" >}} + +1. In your default browser, log in to your AWS Account. You must have permissions to configure IAM roles. +1. In your terminal, execute the following: + + ```bash + armory aws create-role + ``` + + Type "Y" in the terminal to continue with Stack creation. This opens your browser to the CloudFormation page of your AWS Console. You complete the rest of this process in your browser. + +1. Review the resources that CD-as-a-Service is creating in your AWS account. The default IAM Role name is **ArmoryRole**. +1. Click **Create** on the AWS CloudFormation page and wait for Stack creation to finish. +1. After the CloudFormation Stack creation finishes, locate the created role ARN in the **Outputs** section. You can find it under the key **RoleArnOutput**. Make note of the ARN since you use it in your deployment config file. + +## Create S3 buckets + +You need to store your Lambda function as a zip file in an S3 bucket, and S3 bucket needs to be in the same region you deploy to. For this guide, you are going to deploy the Lambda function to four regions so you need to create four buckets: + + +| Region | Bucket Name | +| ---------|----------| +| us-east-1 | armory-demo-east-1 | +| us-east-2 | armory-demo-east-2 | +| us-west-1 | armory-demo-west-1 | +| us-west-2 | armory-demo-west-2 | + +Use the default values for the rest of the fields. + +After you have finished, you should have four buckets. + +{{< figure src="s3-buckets.webp" >}} + +## Upload the Lambda function to your buckets + +Armory provides a basic Lambda function called `just-sweet-potatoes` for you to deploy. + +
Expand to see the code + +`index.js` has the following content: + +```js +exports.handler = async (event) => { + + const randomFact = potatolessFacts[Math.floor(Math.random() * potatolessFacts.length)]; + + // Prepare the response + const response = { + statusCode: 200, + body: randomFact, + }; + + return response; +}; + +const potatolessFacts = [ + "Sweet potatoes are a great source of vitamin A, which is important for vision health.", + "There are over 400 varieties of sweet potatoes around the world.", + "Sweet potatoes are not related to regular potatoes; they belong to the morning glory family.", + "Sweet potatoes are high in fiber, making them good for digestion.", + "Sweet potatoes come in different colors, including orange, purple, and white.", + "Sweet potatoes are one of the oldest vegetables known to man.", + "North Carolina is the largest producer of sweet potatoes in the United States.", + "Sweet potatoes are often used in Thanksgiving dishes like casseroles and pies.", + ]; +``` + +
+ +1. Download the Lambda zip file +1. Upload the file to your `armory-demo-lambda-deploy` S3 bucket. +1. Make a note of each bucket's S3 path to the lambda function. They should be: + + * `s3://armory-demo-east-1/just-sweet-potatoes.zip` + * `s3://armory-demo-east-2/just-sweet-potatoes.zip` + * `s3://armory-demo-west-1/just-sweet-potatoes.zip` + * `s3://armory-demo-west-2/just-sweet-potatoes.zip` + +## Create your deployment config file + +First create a file called `deploy.yaml` with the following contents: + +{{< highlight yaml "linenos=table, hl_lines=2 3 4" >}} +version: v1 +kind: lambda +application: just-sweet-potatoes +description: A demo function for deployment using CD-as-a-Service +{{< /highlight >}} + +* `kind`: `lambda` tells CD-as-a-Service the deployment type +* `application`: This is the unique name of your deployment and appears in the **Deployments** list. +* `description`: Brief description of your function (optional) + +### Add targets + diff --git a/content/en/get-started/lambda/s3-buckets.webp b/content/en/get-started/lambda/s3-buckets.webp new file mode 100644 index 0000000000000000000000000000000000000000..291fdbe161ce4e41b00bddd5252a2335ad32818c GIT binary patch literal 25444 zcma&MQ;;r9u&&v*ZQHhO+uf_}?$x$!+qP}nHdou`cmCOXPQ+YJ#CuT}6qqg=f}8Q_-ioh?ZTX#mBY&j+)bIH$#rhxCZ=l!HW5O%{RR1La;70>c`1AEJ|6UFN zH0N*juK=vxfPM+Tao^`(4A%&+3;|zPAHlz@-|e6IAMyQw&i*gK!~Vsu5&-xw=ojac z|0#foa14;@yY&nB8Sx){CH?LE4c~x#Z-4MV_czRc0+0jt{GEU2zg)in@7X`oUy^T% zxA`6W{eW+OAwV>M?04}e{tfjF05Cj&{M}bVtOpd%9}v#_z5Z5y5`XL7Z$HO>39bXe zelfotJ~+?Mp6jpjxB2V8DUbY<{m}fSe`|l{GuUMOP@jX30c-xUfFXZ#0Qlqj3*rdk zh@#sMnIFb)fWPM#$T#b|;G^ONVcGtwV2^+LYv@n&ee`HG{g3@G?`QQr`1$%UAj4nz zN8)$?xBC080dTY*ZgBFW^}GCC|Ezir`Yw47IN9IomlrJgR{gd3WQ<1K0rdID0}#L5 zf8(zq-z6XN|M_qDPx^}jV1JKqc%K26{=0x)fA!y10Oy|OG2xnjDBBi$G@YWLhoyvy+^2o-r#r{VEd;g$f@^g-trvPBUJx+vB`b&nLL)f zNnWqvs5xDG%NreY7n0?APF8o*{d;x@#Y~>#iKI1G*U3!~rTJa_hL@1+zU>7n+q9i8 z2t`l)6X-45{@$`e7HIdUq1;pC8kmK+w$v6cv`&FrG8xAX6~_*td9;Oc2OsOJtA_M? z+Q9s1xkV;Ba3x(uP?d;4LK-t7EJ^jxgj&`mYRRq3>tMMp+<%1Ai{$H&MWQ&s&5HjpE0xraaUG4`3JMlL4rEFNMF#WDay zx-4>!p&KBkqPjTA4=2qsUr|LiMZ z?LgKAi(lG< zj;#sl94U$&98~*sm5$A#c>b+=qsI&; ztjxUi*KB7IXWk0oXb?Z^S)hB_^P98kbp z-9en*^~dO;d;EOj&k@IH$~A>WX7Z`NJwKij1r=FNhvn`EfJ?)iiDcD7By%bUQ zCr4Ts9Y-M5kXxXjC+ftteu*i>G~ZQnm?MLpM3X2VoAun@>fdDpY!UE@BCy12i#*OX z#OwSCI>g%XV&-@2P~b&zJ%XC8{T@T5uQtMX9EtIdXqLKOxSyj3_xgNHTsyDxDM0{^ z?LO!})J5F4N!`dYFqes{gIw`~be5#j>h1_sVWj(>1YNucv`dEIgue&nWlJfC7II#} z0a>*0g}InEYb~a+K%KShn6Qq7XFq+<1Wk`rAqqU0T4NpW;BC9DF~p1c_l%qW4;ib! z<=p7eTXHC5n{xn8s3p0i!L*hH4e!OG&IAnWZY?(&Fhulva{K{=-4o}nu;5v#7)!Kr zg8#m~iLK3R*r~v+7#!*Tu?6j|rvL-9zOlsb1^H>mp0NqI)#ySi^7oZPMhIz|9Xg5a zfm#mJt6MbM?5LqVbj;IVl;g;sYVAkW2d4OKGBkvE_+SO&6jdUqQ23IPtP^I3#3qK- zzuR4)1Q3`J>D|GCp-%~(=0Z-9tw1f4*`#hDKm9tH3td(!Uo0XM2%@cyw(FId1SWga zL-gSpqU-cLO+L9cx@SQT?j~zBN;4!>117;VXfKQ35FKQd-CCvWHk<5s|H7zS!bfS9 zPEE20&aC<&t5V4{Xn|7Y)W^p(d3|02ZKu;EM7aSTKvn&a6v8^{zB(Z%LRGG*efemzb_sL%tntLIGvsfA#pIUI6zmbtMD-(FRiNwL z*aP=*K3z{cbASb9m;oW`xD!ui-bt(}UNJ(BYUcL5h3|!~i+t$f>j>!bw&!O>3Y$N{ z4?G$QNV4%{??re+>D$c!G^4B0co*Ow3-gz_|B75=H_`~` zq4jLL7ypppZ7%=;VUpzK?ETG3*A&}Uzwb%JJWO=xdVM>&4jR-8#G>96LOaSHm$c~7 zH2YGp^pR*LbagyJ#V93Y+`Zi*xhAbMGGutCl-%T-_b+((d274KnJ|E%W|^}cMLbMo zr=Vag;rSRrm@P=dwhRW9>~vg;qY-R_6XN^&wJy;yC(9HurDR=+ViuY6u-pc{fh_l# z9qmQ~2>~ZGhoKhEoy zn~Wg2*uPWK16^8c;S3^Z^%AhB8jgz{rv~{`LSFg|NOgi47M8NaN#BBn8flt`xJ1$D zQ4;9DF-BL#@^P&RgJ-Q_V-ek7sTs@F10%XIg zMXi(sdKs9iM%7&M%mw3>FnkgF|E2CIuRCLOc2xEKEy(&+D_ky0&pFPWN6>{Zp>vWBBp_TVh+OUH4F-phYXOUOKn{2ERrO7z0Dw!JYNqP{j$P zd0Ia+i>Os6l3TA;2b=)ZO}S<3Ew?(~=FD=Q1x?SRp2vMNi_iXIyso1YX83%(SIc=M z^=}lYca+-Xv`K@XFIAVF2;}Ej66>tj)O8H5?a5{azc@0dFW^%t>JQH{`p~{c@`Ho{ z0mI4Hj99JiPDQOuezaGpL%NcHqFL8PKJNtK?$>J_`3-a@fZpuDkZ%fv(pn-m-Xq-N6<&qJmJwfxo2w+w;1(v?nXbh7yCw)_` z`JY{{R3&(w^P-79a-XYiKFhs5_l?goL|2?raQni`o(CWPh#O8rn|<99`{cX=&1hFv z$lsiA&OQloTO1^GH(SWS?}vHN!DS~ zF}=>-ojrQ$!W_*8SPpS8^HN0hk?iIbk~TMs~n9#g@qmG%>vudQeYwX2LeP{R}JmL+n+IF zWQ%`CYQ%z9o)so4B%siJ93N6>IfalQ3HE4?u9cjzr{DcCF%Eir;Ifw>tG+rstsArz(WSanRw87W5l-{ zKh9{4{$f;74egM7yM6X_ip$+UFD(S$MyN}JOCXjajbtr|UKTT4c)R3(wGHEPW!PQ; zZd2Eq@n>HL;!5+fvKq*2Z<1r~z%5-Kd!C$rb&+uOT=*{wh`}M)tD09h$@?o@?pr2_ z=o;Ff33)jCx@{f;9d15w3kz&BlL=+~?Ge6Y4NP=28&XioMw{(w6~dR0#km9aJXP)Q zx}=5;=2YzFN1J4nxNR;!5Y*B+ibg`115DfTE5kdYq|u80QL zixfxg*lsq>h9<}zs0!i=iYbqu9u188(?rPOMdCDDvc705OuD#Kmpe<%#!IC+UPvU^ z9}7uNSEeGai801OQdS}s?0y;~>J%F-);Yu&>%243XX83>n0}(jQ+x*iKww<0OZe?Z zM@(L&;!i1fnY`og%y3%s>4!;)((<-L_?YA)U2@8x^Ugw8gC}{3CG{g4R=%!m6r3mAiabLyrnQSwkmY^z?4^oBlR@C3I85yTWW? z7gyTXt+2>o(|7(1R&Yjp4ETc*epJf`0CAv}<%N51b?bzhi;lvtp+QPMMu)q{% znWF3x)V%UXM<#05&KU4aj0O=YT+bt7@m-U{T@^Fg%M-Y837qH!-xIYR!^&!7pb$d_ z4Gn*k*YLuyL$V@{QsSpXPa`-F4LhpsmTz^8Eve}TF@!loUiK7OR_^s=Ns)U#8M0f= zl$#h@iN}mcFgAXG%pf@TUw-NbOg>q$&lrt|RMAB20fEQwm$dWz39TbMvfeqWd7F{3 z49C_}jE;a~Nh}+oJDCZn+!ps46L@Q2*|a(lIbTPHM0OCH@7Fenv4TmvgHSV5r>PCR zmHnO@h(o8vPE6=rRGyR@kIq7)X`j2H#6~55pWPv$OzkSJx$%vo7u>gvO~g=KHvxxn zkB!BwGsPj5jxqVe9GOpeW}T@@X+kfrI$)vJt94P=7ClbfTl6D0qjN9v%|Z_q=o5@k zODX1Vt}g`pxv0eXX9}tQ+H#Iii#Y=Y=Ptdga1Z(GlJ@8=f_{cm(qaH}2^r2RhB1Iz zSc*DLluDp-31ayMaN4&LQKHWEGh>kZFo^CIQ zTyKb?3IK$%YUN?N!@mTPnXx^^wmPxMzBY_|BV&+KjeJ2CgjX=jN9U5DZR600eqB&V zbr6+hqT{VmP>SMjP;8QMHel)vhg$o#%gp}k^R2!v-@023$u2FIFttU+Ko$&v*b>~Q z5d-CJTSYuY{~Gfa!45)poG(X%d7#B=Yn9+sMJ6?&LGv#*xLYZLnttvtv714iRK^$UqqU&sQVG8IgabPC z+t}%j+0Mk7O~lr>zsMcesPi{o*4LluR)#`MWcp(VlUxTA zd9fQkNhmBGkTNqt?j)fMC?<5Li|eB{Uewz#M)3T)Ip@@vU`*B#1iKE`E>PM(4tW(Z z&0cBVyu7b^$p!^}h@X4Jp=4Pq4Q^6j4jqd<+w$DLQv)fMb`2<=$1+HLjUmxmJ`{#~ zP~B^~OChM@!*;qc*tcPHH|_pyHlgq~amzZ5(zxrK2${$FMpQucy<*nmvxgK)&RRUYyB z8*9mr{xy-rGBlK(i}PpW%ji~!9{a$5AF!y6^sVP-n0(#2F}XwgUj5(9D&L_nFRu*+ z0>vOevrKhpYbh>NOWme$b{xH?CHPSc3Y+Zi$)$G5Irv|P@|K<=mk^G@^g0}AylU5n zFyF|R{zE@wl90kUx0QmL(r7_OBvLjRmv z&L~CUMs(vLKbRAtHWfQSlsnIFYcdsI$aXWpdW0-#ExZpv|GOUXRHjxA6EYBZRo}L$O@XDF$q3dyU;kXWfA?JV#@FfDMgJOI#Yt zI+?{z+!r^O)Z_4hn1J~0-U865KJ-uymCG6~I3uYEJTRa@Ng`Hlk%N-2CK@0#Y~hBJ zZMfc!Aoe+|=YTsQm1dBd*s}I9MvmBI(K1m;;aw+$(ELnXVajAXnOi$7%@EP=?Ffdz zlPBN@i)5X$s7>mQY)JOX5t({J>kWaj?ra}Nu-Yy;v}^e1@%wToBP-h+7_C?5DNqo% zw*w^-1PoMbM5Qcl>vw3`Ow-rE7ZDVuMVfSqphYH$TK!}TDYmN^B&2s56xZAPj#Hrj zu-}dNI?cLJ%_m@VfiSD;zaB!Q3p2vYvG!zAPP{M9CDJ; zwTvgwr_QeDI_HNVrY%?P zB^r-J_WU=@Vo4VbjZ$pX8CED^)-P7l@+1U$rQaB_Q~<13JE7J;KZ>RVG}gs+jwGC% ziP+ap<+k3xU1{0s!K^771N*D2+l+6k4G)4P4(H*P@||I1h{HIz;{ybnbN77$1cC;S z!}b_wpz)`NgUNZOL2|L{Fl}rhr6p+3(U7;~3G54>RDC27i1+ui*N&MBXh@%aaT;!~ z1Cn;dj%E@Rc`}7^;j=Ox<;x8kSHquv zjl|rXQ}FWn+z1kn9KY|Unx&Py%VTW6qcepFT&>PH8%fqwlTTo(OP5Nq5Rh}rbn}aL z43&HMA;^+)(j3@n$$pZBWf=UDN3uz9>T{-KCu*lI$9pdB)9}-`JEy9~7BV-rh>PPy zy}R9ABGeTo&}~sbC`@(dfdZl}_xcZ{S5ucgR0J6aNX0%8f8ZIhjCO$tPEMqd(I_iY zc3JMZWZYw@+mG9P+Q;(u@&kja2c6pL{M+$@7{7yF; z7NWamPTs?sJ{qO>(%R!L>V9eyeaxB<{>Ucrk@cF52@VhOx8D76IU6 z4)H_w2v?wapq$gU1aNXb0v=;L5;{N5I31f@$=_3*do|KqOQZ1(4G5Y&8iVb|WsZlMif!KsFGlTO^xZT#E)=RMjMT__W5{C+1IF2*iwFE+_F47~}^?J{CZE zZcC3n;U^fm4>rPI-Z*M4fJEX9zb?L|Hrj`o_KEn~LqS#{oNqd{33vNHMcjO>#J^Um z6w}KONO;Q%ML30?g->6Z{D@fXnP7aTZQc~&p0PNf3GRc8JHEgNQ0k90K4pR9wACQh z9S){MvI0`KZ^1<Lz zyj7q)@1DA`8#TESaR}>A-<;1o91ElwaX(WbKF+{j`>=PgUdL$RVF8C5uHj4e1S&04 zTaU3s365Vuz_;m&sxhKuKFbM{S}ce(S0oRvLwPBW)u)?gSu7W3ozQ*hHbN9Bb^Sm} zhL?(jKIRGeLve9rrFVkvv~fk8DT@MM;6|~Q&w;6!3xc;X0Zi z$3@Kw!D#U-UC8&!Q;^NVWruvzQ*4ul;GGyOIxvi~@?lVebwkPna(o}~K4OGjwQ|2R zF4cK@nEfqQ_iF=!LzGdWGQ1L7n-=ygE*a;ur|tdUznoS6^V2oDYS_Z)>D<*CvShqI zG$QE0qxPH$pK}#m)FMbu@l8a2>%{zu1DDZqu}wy5`O@8~XKei`V=cAWc!^{wRKS{* z_~m`~aCnIoDg3At*aeycJuHq+NjM%jWMHe-m{ZVp6*x^{P5}~O&ut5&rdn}0JMQ=p z0H4&3r)9cC;2{%9oEkmZ^bFE4lQ$B=QABe3KVE;e;yP}TT3=atw2Bd zXhpBJmhGG)bZ?kLTAZk8NAN_|{;a;dB`|zzw)&s;k|Vv=9;BH|yT6%Cp@=2kXlZqs z#v#ckC_rGf52p#)Gvm1oK-VlmeT0=G-O1XMggsAg%P87AH)}KLl(@#pL}dFb-V>U6 zVcjHPaU^lCpNL%#G=_p2zk^`b@RPX*b4LmpRbpOEZ(}PsZq$VfXBB0ynMU*3`J7ZV&M|C>1D2SsJ-vbudLk5e7R?%cWPd56gZ}jmW`Q-Aj4~!_11KTDa=U#^GMFlbKed zY{6ScU1FY6sAK(Jg4dk(epft&sICn1%H?FAVhXxaYyPPOTs1TYilLaIg_8{V-xp9R z{F%D94P+7ks9@KcUNyWm%R@p&2K@K81E_Z|lNQ5r%SD;H1c*@!2Z{kLcDTTU!-ama z;3HBF2q=OHCc>O-P?b6sPYehM3)+HhDO$a|x-Qhz2J?!{XHxJnb&c+Hj8VrKw2}}* zKH2!6qe8WP1-Tgf@|pB+ z;>fprCw#PycroLA)5($UdMj=3lCqwCSSd?-An8Prz8E1hZr>Z=wtK6?iM9G!1Pwrp zWxAY3WDmIqx0fiMolT~08YJ3rjHDfC;imdoshxQWOdq;q*$MoWi=vD&^S$;R*(^pI zDyx{?8Zk+}n17Le6l8w)T$tXj1(N)Ru!Q4Mpz)ZOt~b8utNU~*TwKpkfQ^Af<&-9v z8%%x`iQ4@3%W-iIt6aQE&wrZ`ubqR{Kpo=mr)eu5Vs-P%*SbUB!CfgUTF-F93 z;vOehJByrS|KK2{{4J|qjPAxOBdRiL^BSe#PiW7(4j^^5%vmdec5M$}qgMirI!n?k za@-ps#Au_tJKb77=2REzeT1mIW=ZF9_$Ev`Rm`Z zuwgpgQ%lHlf8>6zBL8s|g-AC)pR!-3$-2vO^C9*M*}2-7&>RzOHM^VvAuaXUj5D&q zCtat{L*0ztnzj=Ff-XekhToG~zG4RtqQ1bIDnB@ug^(E7 zj~raU;BLq|f`&tLIc15YoniTUTc!_gPn>gH;eZ?-UI*PtX8C%^m!jDP<^D?xEKZxc zNeqOLvM>y$1iz39^ml~2qMw{9BH)z|G{Rh@U>3fsf64j0IEDu++}btjVvKtax+FaB zYVy53B{DfvBf!iL`JOOuL?raq7cJk?! zv60*)yHN; z)M4!cFH!s1B_e+Nt-^HiEvk?b$hg{s3uMzSULeV=%x8*rH}Van=qDw^y`nl0|7oRN z&c7CQ+|4V0B_JRruEdQQ9cygIJJQ7g+7U}%aLza5yRB1I5unAUnCeH3Ne}05e_dNT89o#RBIZotW|O}3brdQ%^8u)17PUia>y@pbINBy>$`M@ zA6sQ&BrP~Zy6N=5-bjM7LK<+HG2HhO7~}G~p7V+i!c3{mI2YYDhdEGg_x@Qa02n1! z^OLKZX)HheXWw1FIS>#q;9hEG0yA;|jolfv*MGmTJeC6JzTfTW!1q_OrSV>0$N1Cu zto6_8TxrF@TrF#4#W0%g-{wUjV{@NQnRw9n^H+3m<{V}M6+5p2TE`Jmu|(JuJK4c~ z3OB*QcYwW1li)uY3^HgBPf&^si$IY4lN1EzPJ>cOhsdK3M`FWdiSCdzI>?I0zkj>~ zw23J-*P=O^m%w8sNQ+pbiN(+HY0PmhC-2TX6p?EiEXm24Epf zR?la8Zf!fl7#(sTxR9-3OG?Mh3`fBP81DjaOR<5UD{D;JW9KHId)L-3Twd8G>I>soiUc5j@!OE2e{48=s zk%?oDX^Jj#4*w?E_#q@zrbEkKLL>b5=gxuweWzz^k`6X1eJ9tneDF;@DX}`n8-f}% z=Sdj~%vvDSh1l}!F)-q{ROEi$X4pSZ`L1RU*R9_z+2ib$M+bowF4tG72#*_cP*7mcuc zBzhjoqgMR|_KRg|&92u`o3Xpfb=eMofb-3r<2B>W=cN0{Z@_9<7sTYjlbEeNt-@RJ zIC=GtvOy_$-dF%=#s@%5!Aaxv778sp@DK$QwU(TTKi+hm${32oVU|KxlqWJ-QoOi` z?yg`e8O5Ik$s9H(J^PT*dZQiEN7MCT?vGR9$srrN0syy&h`xuc+Taj#z& z+}!4s{t(?TzCr1VY7KWP?jKZPyiJN&!44&P>h=q&cL@5$1YWhQrf6sEq5;X@ksCFJ zE~V*#52}e>8g0>c?aAyfN~1KZcj;gMJi{M+H{%)<+N_Qg3n&xaeCG#5A_pEG09<3R zZNvT6b8EJwN}KNYmI(HTTCd(gLH#c;lweqPy&#R9Gq1oum6#^9XTv_ILz*5pLJ%O! zJ(4nNqQqEl+E?^%Da7Ze@Mv1e5ttPi@XUNOa9=>Qe&mQ71F``e(|#%*kgY|?v91Yv z@Bq5{E8@=12a(vJ1aBo@uiSp>9$tEzIK!I)NC9h(v#ta-xIp+rYG zdBEnud(RM2JV?I%N1p;BgP{nKo+Q~#m85WLw^k=PqHOYI6jE@nFaf7~8h3wmZ(I=K zle47uXVsYYsU3C?-}ZKGi!bDcA*xl3r*!Oin8T)uly4i{WN1o-D41YcVnFvV3Z3r<1ZbG_VDLay7Nr9X%zd<%sl2>~ATx;&O1FrehypNeb%+K{`|YOI;Y-s2*z?;b7!23(LK316Cyew@AmFlphY8wxFO1vlZkD92(JRePSNFR(jL|^DHfbNVj0TNO1o#UaoCK-{xMQk?bM%HeW<@ zcB-CiyN8VAMhh$5;|CSIYK#?kP48WG3Vo=Ur_xO(*gN|odNzuyqO=4BR-(5q@Uhn# zr7xdzO})*RtNd5CbPv1Z1c2HA2TiCeb6mN=7g493#N zYX!GtBJOYQ$OqMW3=;l+|G&h1WU=eBg%p%P1+n#e(fN@VYUkQg)d%SdUExL%&n_5* zN$Aut4E@)UyKV&|Am)+=Jc%%PcJRe zvYa37;h%}h73)Z@v@G;DKD^6PXp!(oNohc`C!5n-Z1E6BpL5e6e6>Y$p1qGsy30Z3 z;+{^B>;e-b82K0!iPCm3x&>!-Lvx@etYF|QVGLfZz9qHB6JsGVUSmBwz?&G9a66>fOrGsOd+YenObKO8zVxY0M zXQC0klG6claiib7w4h;o7z9kN&L&Xl!RgUf;_%Q(r<1}+ zx-Eol3TnQeAX0)W8JowV3qwH-9@>^D_LEKEG!9bJCN(g_RCo-7_BaiNsOc-*lH#YP z0)%tSi7W3`z>SylbI=(`efF6#bL4Kz+a#huh!al^38h!t;zp%@*Ek_Id3)ausx-kB z+LsJ!Eo*$VsijlYF)5%B{xWk)9|*E%|6MRce!VW=upfN2`z^^w0HY2=_*YN*oin!E z3JUe2&)svt%59tDxoOPmqslDxJ-qlrM{Bm9<)_X=baXK6a9qW5V?A&M=0U~%myj14 zS2qOBzK8|GE_vCDtpUu8Z#YP`bp-pbb~>=Q>b)a${61e@r+BTEdKbjm)y0VG_=L#AVsUOz9dIPcMY6s!FpD|DYy?#r1v5E%M$G&e`R{#$qS zV+tUBWCj6tiaIkyIlhnT`txHd2jkXcK6)2$R(Zo7T`$NlRP4{^;FP&Ibj3Q3G?{;2 zuo$mhcS?NcIG#Hz%MIA0Z0kNj{+TX=85vs1wdEwxjkIBz=TK5c*A6mBctl#lLp)%W zjalePzu&{P1an7lXm954qWQVONYqgC@%!Dx7o$?U6Nu+?j{WMI-s=46_gjbm>f`AS zD6Rf)`Nhih`ukN22mPcSxgNnrZT!hew)j#2wq61GXn;-D=`Ov$N1u5xU;I1xSuJ>`l70oJ_yzqz!8wN7L zEQ?2fq5|18$YBI+S~Az9S4D4vtj*l&>Ft;R({|YTK#KlhDVV2k3);CPPu>UJWjChP zqPz&XX!sJ0C7c>4E0IJix__qpg%GClCD642V@H!G&uH+LBPy*HAm%f3!am(Sg2(8& z7?op`BR9_WPg8nPrnH?-8p}N1`XO%pyHvQ}FN|I$QDEY0(TO_htU?2~QtIr^>*stM z5=~hCkxEWO$|@B1k(d|qCt_cjOqu`G+mmg6DRQ%dXN>%*kX%J8K+=m9f{p&+#zy;P zRHlfw;#*0qrXj9YRX`QUG4x6MaYgEBBIpwv0FWe2u6Wo6@mQzxk|Z%#I* zaNm|)V-@QdJ(*|SEu$S^x9weISvS{%>eOw&AOpm|bA*8bS_Y?sevL^D^J;`Z;YBb~%VLO25u2U^ z(LBFLjzdWA;5{^bGbet33sm-gT%}*qWI^F09{f7t8_9u)bY&PE&yv!(S56}-EdCJ1 zILS^C(-MA$Kyx}lMp#@qi+Ni#e-?}#IpuGF+D5(_U<&1?#|7lbF})ajZncOI{uxDR ztI`2gFKnh9S9iQE=78X75_iY9%?sB5iL`pbz4r=3@Zo{YEXKeKgxNv{OUo{g@F8a|ZykZh0R2eq8e4at#E0$z`_bzAE5!>de z;8MDn9q^IR@1Rqa`O27cj~T0~Cp4Hoxj%X}bWKYH?|^bgNvS=Y(va>+1GesAsIgRy^*pmH#4^Rq>3-9wy5akD}&+w?ZHgVl!Tpo%P-Hs zKCM4Yek~m=mWlj(&%0GYc3ufQbzvV=!>0k$P=J_-dB%={MXW8glgtviSi;R}GGaYj zGLCO86KE@|XY`^?3Iw!vfB){VhlSTjrEuDRkM8|oe$#eopmDRQ1-G1V-uYs9jD>zKK+ zG9;c$VUyDHw z8-MS|mwb3N{6wb)^CL@9(@S3g0xmd7h4;s~S0-*Bb@cH-q@NcK&(CerX&g%g35Pze?PU(Ev&OM|h2e+KCCAoDEG?dZu z#azdYT}KeTV+I%pq78gW;kdc}C;K9<=Ml>%i`YPEvw z5rKD7cLu06+0;+Z)6MbdBj&tIR5>BF;@NloK7@Lcyb(uTxf{ox$Gj|N8nf2(Buf;9 zB=(Rt{~~jLHrc{6HnuDSM)n#8F~FZU5ApXaJ!cWWw^rsWxuNEsW9m_b-74JZN2|I> z#+Yl=2&#n7i99Sr{XjZX`RL9^o;eHdQEKitNL@<2RPAoJ`ULfs@N@^#%4{i*mTsmP zx;FF18m-%PTK*|^HDmB2#5{y@}SG(^aC&t~Un4H*<>LfIpj?;yt|urDa|inGHi~wDPo!V8wCg z#y!dwF5_xv`dc|X0B8t77OypzXW5YrCm^e}U{CVpy6IF*n=cHz5V#~ik;aPX+LnKJ z1zE-<{xV2zvp(r@Hl@TU);!u2DSY!X|L(-fYWd=x3AHNzxo@jHzsz)*X}C)ONOSgj zoj$M9V_~04$u;a``c5?^C!2Z%{j!u4;^IBHFyewb4BI!+TvO;;eT~K)4X%lI`>y2V zG^_L*=bHKzMxS40xODBB{!A3ByFP!|1m&_Bn; zh(T0QFWP0J1kzaD*VAqZb8L{Z>DczI7?V>=>~TJ8HNdjjRZwu+5}8S+){oh!5RTDb za|kxGcrn{j0W6tH-bn5Qp;Q{U+c&bMzO?ts9sH~*Jq*a-Uew2EOak*sq{>1@LA(ak zD1EVWt@e#KMI?~_EvL$-e@V|c%wzTH^DX5~9;<$&5^PnYAxMD8(y=yk%za0OOI)U@ zh;P7Nj`I&!T-q4ca`!mbzQQye_ zYnmiw`QGE>gWPTc$=-sZ#oXWTMz!^lOx!E<|LfW8ZrQc(ccAM@bE356ZBqab=9&Su z{sFhXG!W=xN*^!lZpPYO4!3`O?_*$$BpImK?z2w`0RbW*V)S&R&<^$?gXi$#T3Sii z>pV6ox6zw@)%9DYBV?mr)q^ov?l+KKa%!i+v*(_So<}D~)K6+SUkY%a>ynZR!G<2+ znr_kY3&yL)+sHGUKhh(OV=5p;P_rz#+52g>X)G$Lx;jI?5@?Y1p)nKhZ@wv=az{2r=Cy*AVCYZnNcr>F zCek%XNbhc+qA}Z+y7aHTjF>P>W=BHz7*6;g|1~%Ueb4n`QUtVaf0gmvm-t^O3|a{2 zpgs2pyd3FXopuHsUxfBtbL4r&pSM@yBBfd#N~}PvtHDWQxq*cdzXCa~divbiac`V?JaA%k-;gLj&wK5wZ+OJ&@J%&loJ!5A zYi5>g9|BhUi?De_=nJ>JY@Feg7Aag13kUA~noHOvJ(G$|wz03{L#2>tHvN)#5^j~Q z=)8QJ>QX@);7SG3J{$U`@>~Y8w&AVE$C^SOIWTb5-ZC;o*apm#C?f(RUHRgXrSSA~C)77Qp%27<&qe7!QFIqFi8^KXO(PoJs)A`2Y zjDId~>4q3a+1HS6)ubX=TJ!q6Bq?eU8&3^Hf)Pza=qDogk>gagwXU@&E71=mQltJFgF@goALkT??({5c7AbQS&mGs{BKKp+vHT&O`W(dI-R~>c1FH-H%*^DO0lWgw9Vc3 z<$N9Y%+zZ5b&3 z*UK3nx^TsruiZ2ZSwX81iq3etw6(d-!8soeWf%QBAU*tUr}=kEJbeG^-i8{zY&a;s zXD!^*7>XDKgK9YM@xehs@irqk{$=bhf&m0D^ke4^Ofb$AfDgpWH4`TKN(vhq%vHG4 z<60^$N81;8>=^oD?uONr%jxFY{rG5H?yaxx#+=MGsd9P%Yz2>0F2050#1pptIucZn z!9Y;=_p=gwLD-Uny@*PvJg%mpYORuA&_^^eTLF!soE+Eqk ziKw9_tSr-8ky|)<#VV4a6*GmIz=Gw_oyN#qri*Inu4A}?gG@-Hh zG28~R+f#7h`K5R4+!UFC|4DxG&XIdT>4z6MbRk`pc1&-qi}4>%K5v3u=}&=!*7BBD zKxF=BuT$%AtHN}WPb=%Uy3A~e?FqYqfE0|!3<*(QuU$&yU)*7&N0cda12NzK)6Q8o z#lb+~71v!fxGcdfIKkbW;4JPQT*C%;cUTAz+}$lW1cGaD5ALuyefz0Dpq)p7Nm-nz`w z(io4q?t~${RK>mjhqePob?(Vry(RuOOpsGL|@N^r^!qz(qC`|xWs z{22B_k~^MpS(jfec-g zrMvl24Y8WUgIJ_wZn{W-;}TKUbkqHM-BBs>;Wm;e1OqX|X78~`KV<}4v;z;vFE2Y_ zQ-QW|!u&iss*~xUK7ylS*5+XnXg@&KhFJVDp775u{=DroZ_f5EZ;iE*bu}U;aqtqNIHb)AX9ASdf+=&Ay-^Aow zeocT7d5Uicnv2F#4zP#`BbIb+r0m#piD64;1->5`(Qf-Wo?FwBQI+d^sq9`2_ad#r zgG2anGok$2_x{CHk+2H_Mfe_Ns>EwlJdvJtS6EG;m5CXf{6B&03p)IZ?sgGf(v8-k zEXS)^FF87GnRXYC&pjVu4g9!x&uzYF(q+6vDr|Q^EKc;U*ZxmRJ!rat(=eR60iuZ=W7(HO8Q~dC$4JW) z6=ynyn296qQoLYd{%ze|zHKM)m3-VEZ7SH^F=M26hPFo(??7>4Yw=5Gb@JHduw`M~>Nm7C->aa-@Y5@8V7$i-mFh zZ{|DtsV`f_X}J56U%O2}zi{L_$nT2P5jKX7y*43k8+z7TGninTV+Vy(dim8zh5$0~ zm8OdLf`eUIOnb$O=b7~$%;@3ciZC3RLAomAh03c%Xp~!Z9;~xeKiZVVe zBjPg2&ryAcaDB8aLon@`W#gb!x9G7W z)6-d1Sj%8tJdQIcSBT!)OWVx)^PCB2ea@lxN}x7A#|VVWd8dN z7tXB&*O{3})MEg5pMI$Vp%oy>qkz*cJKsfdZDa8QN}zr4yL=fZK=`HcyOLeW9xh1j zS`n3atyZJ3b@0l+4X5^Zp;5mQA>zERKz(;FE1FGdVK=d%&eUn^qe{<2O;p$d@?6>UB=b;)@OKB&OWG1ClXv8Ma zu+|V*j8uR#uve3+T25To_wujK@)DMZ9;pUlQdA=-h9mY0s zTgBS&%EHN_TA%mQ(5=g_84p#p%QzEA)fcJkgsYhwtmlZ6X(Q3uU@be*fwD}^$s+(v z4B;Ra@rw1TyfFWycw0DPOsdrZ4j@qRv=_cIO2=Z@czWIi@z;*}Yb;V5qGRhmL*O^? zN8%-YlcPrayy6A zrf0OR}S2plSklW&v88plr4=^!o|@>T-F zwgJ4JWreq9==S$2 zCH^Hk)@(Lvj-dqFY$lubI3-&Bt1=q;uyKvTMo)K~5WwnB?e~Ny|RasL3!b$0QUpl1W z#t6U3&pi-ot@^*@v2p zp68&>lMdI%YP6JLkGNAW7=CelwHo4vBd%9;E*A#-nT4B%1EyH@3Mua1B*-lvQ%04B z$(?n+bxMoXDJBck=4(??5sC*g1*XyT)w&)}c4U7dxbj)T_m!s<)yXf2($}g8FbxeD zdV@jr>)<7-rh+?&+u!@7fRjprU-TFO7eK6|e8Y~9((VrAU&Oww4YS}dmP{|$t|BBLs zm5(u1y@u*g29sj<$+IOX@E*sV@Mh+P*s|0Z`Nogx|7lVSFcfZ?z4nO}78NB@DqDnn z9ebhAFP20y9LdwPF!9)0k|k%VAj?Hi1r6AD=4!BtzMF*T%U6FU{{T5?5*kO7K*On* zC5L6i__+mm43Y=baA&$*a-gZDO>SusFX}#S;m=i#YMFq=N9AcMfa4?P(oH+#hgf{X zYO3CL*&hcIoGpHV2nB7r@4Ov2X{ypxjp69?w@ED_Klx}zjec3mlRUazJ#E4k9vq=f=^+OkczeG%8AR|uRyzUf?f^o?yTY}{6;6OHROCuYMJ}) z3W*BuDr5|^Ha?+zBpv)wFe=+%h&^7{Ea2H>=X$26WvYD9Bhd+&KQIoX32ioYGMnb zBE18hnKECVmgb=Ymi5=@4eG06>>_VxrT^Bl=6`WKXSMccdLNSd0lLhYI?_PId;I(5 zwJA|lc>cNYag#wz7vzsOGtg>cRvX#5<79C8Nph+v0wR!>Z)P>$U$eoo^jdShX1T?( zBXfu{e^=FyKC=0rfb?R;2JkA78=6cU&N}6bsr>@d2r*F&)bO1t7~?Iu;^+qLp%?&p zx##)KV{quvi&+&h@5e$p3i2(qMJgSJUU`t8cdN4JfLErIky(bCD|*CJ8kOW(G$NIT ze>ar#{=v1nuCh`ddr%nA`-UbxTJmTG;EGCkb+ORA^>x?G2r{t-9+|@hX)o6!uACFf zJNjej(3|{gY<0j;=Q&cjQ;Yj#z_R<){zC-kRJ8=+{r8>;;%cgl5X~Q^uUybZmaD}k zOtTq-_c{Cq-6rc{<^0Pn++(My5WisEzLl!#^Bzl96dBGNYSQ$l&T5+ynU1vH5HDCuzGn z()V#1htGy;>@NW~S;a-bD93Hty733*#tpu$eG92;ufX5%w(+ zQSr=3GkU3vuQjta`V89GE$HQGD_zY^1Mi=ZBf5w855YPJ4H2#md;N-e-Y}Jw-#X!5 z6aopP=xsGd#3sDJy3_gK)~p2E;;!$rc^&V*nTe>&KjbAccZRk%A0n)nvQNBqppYY{ zpWj$CAJD?N^)UndDM$72=;3o7TNz7Qtr+AQ6@cxo@O!d{FU-o3U%MncS>)(hX3Idl zBpnzs)Axt>;*A?jj`P0)BsMPN9t8SLxru|r*T1O-6jMYz{wVY+Pdwt(o#JUfXyei| zMC-)d@1D4?A&=l7YB<2RgO~n|w%w8VY?qxH+EWoYUPZ%VpalW=FA%sA>hZI$uXpwS z(+zM!T@$+cVi<5#mB3^}al%0_K!6)e5Jr|KAJWO$l(hoRJb7Qar=qIKkw^dGjHVhW zxGdjfB5Wl+TJ@2#o&W;1+(}pb=lR<14GP}9ZE4skCF-)D-URa{H_n}&tZCH%Hu-f& zOW;iWR6?~z#dRcUJ7J{&oT|pM91SCCFAT~dK!`WW;HeqY419?S^v8tl{DJBIQ^1gR zkBY?$z$_BvYAMI;XC_i&f1NFmU7fj{p0S|+Y8*Q~nB50(r#`WTob+@Rkt*PXul&fZ zxA<$3-y70Gk#jSPYQA&shaLpRpFzsM%ooGjXFKKJ1W&=Vb_Yn1JL{@A_m5i~XaQ;E zMcLf8k`6uKxMa(t4wmowiSWEaxlUVM2W#(J{ogFah2km8@RKhnUN=O)O71+V|*=MMVVb#6OU%>@?TuZ^{2Il zVPq-F9Q=*)%mH_@U~GPk%davAxf&yiWya zUOLoj7DR9~Cb4+&NdAvF1~w0KA7EH!T@vQ2SO1gptZj={h)GoFnYz^07>-2xoq+U_ zsj@xxlW4L^@uzG7vz*v9hb$Sj(T6c#;#cD&w-T%_uUh1N>o3C!+qXO+Otbsvl~tVj z@aLi>!Hl44iW+3INWnfDc5N94^-A3$m z?eVGiN>#u>H4X<~jJr;m!yNrn; z)t|L)AD>6YOvrWDaaVmUA=7IJ2o)zU4>cGIoBF{q=&R6t99TVo6Ne|w_NAE})jw`EZje`EQeVLq1mva>5;6E-B4YuhE4xW^7fb|_ zqr(eXB7(-}Pj8yejSh7Vs46cP&iuo$z>3ji#Tmz}Qfe{iZ=-qH)IB3`Ms4`i?~7uq z_pI-KFhSs=Lj~9*96QK7`Ba(RQ3t-(5uTi8mGE`U@X2Wk&MU+sb&xPvr?NLO94MM| z62G__Nxg&~C}nzIx1vbyWwoYm(Z7kh@${um3=AE{8 z*Ur)&__;v2c6Ca0L)he_KTN*D^*Z$}VC?nM%7Ate(f-)m!s%b^ZN0ArL4tA$V}Ye> z4qeJRKG|b~3bsU2YQwf&x0yKzcGJG~e$nnbfxEggU)wH(F@@+@OGl%V>4m)z-9cM| zAFBfwEj5CtXBTFSl$A!w1{<6s$)BQ)y*Q-P3I%JczOM90h;F|b^?IcnG3_+`8RLNd z&0YMd)N0tYDL{d~^#KbQ`cuj1#jA-jp;NgM^SPDfJch^&$@5#M|H05hke{O@EHZ=g zgDcqikgUlrjdlGSb&G|!mP5(va<9$boWh0Ozm3VxQQst3ly7nIB`jmXxnQ$1IpE}y zPf73Z`0hWyhKPOO091SR^l&O2-aRE1VIGFtz4UnQHd;^ z9q3WVLI`CN#~H?mXG!MjYX_(c2@fLdMK9^AFveG7~aCVaTdg z&}>zmkFlpKIGrJRXj9HXZUydU{K?N`=0DRMYl;~dkn^D6iOw;93kYgaSktQbaiqGRocv|5YU*EDCe( zo0A<4{i`;Nef~_)f58Sf96t~s&%R_;kF10DOJn0y#9VyHXhgcP+u4p~d?&V-DEr>V zE}cSY;!a+n@GA8dz0TGUvB-UA^Iu?-_}GP(dGRRx+(Nq-z3Ya+x&9QryHY_)$oLBP z;0x!&O~i9^lRObJ9J9R6NjK(QB{+elMTjB zgq-a3hyNZ>>`QMZc}zPf-8fruCS|Lc#}!hOQQ&Ig`kA`JZA>lO_J{9*2sdjLR^q(U zm)_tPu*2$^6Xs!6fMN2))mPbg9Q?2pe&l11Ex1OwNIu|jU_$#YD)7bz-mOVL99>e+ zH3DT9P(s$(XVOaCed5!{cYiZVl%zNU7eR-w`ohmh(=tlxC1>!DY0_O%+hHof{@!Ai zenC^3`VWUB|NJ@xV_6cRa5T}`w33OL3_P4!i4@>roOO}nH+-#Fy7qd&-NLB(D`-|$z}`C%DJYB(@qFWTH-4MTXRpRw_QhOzTD~Y-bT1j3aZd^ zxQ*n*Vvu|QfdLXg$5BD!w);dt5R`oD&ueE&xW%w^*=N}j>r$uqg8u2hVro)+LwwEG zRCb3Cv+z-h+}cNz_oG#EB4>V+FFn*~!7lx4szsF&P1wYWj%?OmTD~>&dQkUVu9iD| zPR@Y_OT>jkIE(a+H_p!|cV`YngE0;b97@`Xg~X3czNd;+)FGe35v`?*1>34RT<68J z`mSj%Z6r;STt2fS*k;n<`1c)F&G#xaY=uFL8gvV~Ut^eaHvpmQd`}SB)@9@H~Ni6g68S(9) z)ruSb-FB&nl!iDghR`&W3By@n((7+F+phWY`1-ocRDW}H?N?@Y56!6u9|+DKzlX}` z)EEeJCMLeO!MTJ5_gF!h*MS?%%RTUq7k;IW_eoB2inpHfLKDC~aeU%xfKRPH*>%O{{=ysauBEG>{nQtgWklM;s&Cb+9 zM6t@vGWNdO-Nu(IAO~T6#If#M`Lw5F)&ZW}e&WoR7wJdjmCLGxXO#O+>BFK1#NtQ< zWL@(?Y=<`ekM);KdRYOvlj~JX;&a7(3!*&DjNeEcO&XhD@l`L zxu2qgngf66?NIWm)RCf{2njD_1$kO-;_LLIv=U$Rya#&hk8(xwdAKIu?Mx(;PUa84 z2BamqT3kq~n0YebZ2Yx&a&%;~tlb`L{=U$KZqBka_(SoarJgZf%KR(5l<+?fG9f%f zo_IJ9q*xs!tF6ABO)a4?)lKjopt95tvHR@Iq}*vi`<|XSl-t2K zlJL($LqmT_qL$9$jWQw#rBKY2R*EA@&lSm{*ZclBWpY;pf#%M(?Q4;v{KV$Ky^pl& z^CYvK(R5ClrC1bC>ew}1LFLHHGOaVuP@MCkViR}W(J`npHJF~Yu6e@;q|m31FMkS* z2hNq9qDzL=UWg7JOA`KCS!iiS1l>|k=4N~gu(O!bW&dplhY)D(E91=)>Oyt2M`lCO z;d{i)?1vmWUbAY93YE&raFL()l&m0>V91Pc(^BZ;*+Y<#uyU0zrcXNJn1Tniqf9hm z1+=TxXEmO_Kc<>*%NuJ@kpkaP|OCDl6LD3$1;&mrR84Z!s(3oz;D!x|=u3qW9mjo=9*r8qLtv zmIO|E{4q`Okbp1?d<%G`tbdM7H~uRu?{yH`h@T|7O$7{;Inn<{ z+J`2v8wF8*cj;L7~Tu}v6EiM0?PF6`s8{#sIRBb;@m=AfCX zx@qB(8}s{B+p1M;@qKK+Qm7&4c1|L5=^9Z?FzB{s!9Q@Jl55t7C7K~+C;?^+$!Z$( zw&JVk-zWGDJrx>0npj9p#5l-zBWQhPYQ9n{zOqVjt`*m<#R%4j+ngm>^MQP1vnZDo z|E`H2g?f$l+`mES8}&s-i8R!G$n|^R&ujV<*oF|&D7weS$SB0+E79)b8|oyM6>eK} zhw3+07J=rKgPF&S<4z@P3!i+9?v@&9aIVn7h>OTesD0^+=0u}|UBk~Dod|+I6zt+R z{u0xsp1q|28OlTMq(epZlR@(=(3(#z*a?=v0%K@fl$7oxGfPZT>cs+c~+V Date: Wed, 15 Nov 2023 08:57:22 -0600 Subject: [PATCH 06/28] add second deployment with manual judgment and screenshots --- .../en/get-started/lambda/deploy-details.webp | Bin 0 -> 52376 bytes content/en/get-started/lambda/index.md | 241 +++++++++++++++++- .../get-started/lambda/manual-constraint.webp | Bin 0 -> 66480 bytes 3 files changed, 229 insertions(+), 12 deletions(-) create mode 100644 content/en/get-started/lambda/deploy-details.webp create mode 100644 content/en/get-started/lambda/manual-constraint.webp diff --git a/content/en/get-started/lambda/deploy-details.webp b/content/en/get-started/lambda/deploy-details.webp new file mode 100644 index 0000000000000000000000000000000000000000..ab04676a65a0f41c5730ba81f20fcaee4cb90472 GIT binary patch literal 52376 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 G0001k=my*X literal 0 HcmV?d00001 diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 2d61cdb9..a63a2e81 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -2,25 +2,29 @@ title: Quickstart AWS Lambda Deployment linktitle: Quickstart AWS Lambda description: > - Quickly get started using Armory CD-as-a-Service to deploy to AWS Lambda. Install the CLI, connect to AWS Lambda with a single command, and deploy a sample app. Learn deployment file syntax. + Quickly get started using Armory CD-as-a-Service to deploy a function to AWS Lambda. Install the CLI, connect to AWS Lambda with a single command, and deploy a sample function. Learn deployment file syntax. weight: 2 -categories: ["Get Started", "Guides"] -tags: ["Deployment", "Quickstart"] --- +## {{% heading "prereq" %}} + +* You are familiar with CD-as-a-Service's [key components]({{< ref "architecture.md" >}}). +* You have read the {{< linkWithTitle "deployment/lambda/index.md" >}}. +* AWS requirements: + * You need an [AWS Account](https://aws.amazon.com/free/), and you must have authority to create an IAM Role. + * You should be familiar with [AWS Lambda](https://aws.amazon.com/lambda/). + * You need a [Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). + ## Learning objectives +In this guide, you deploy an AWS Lambda function to four regions in your AWS Lambda account. + 1. [Sign up for CD-as-a-Service](#sign-up-for-cd-as-a-service). 1. [Install the CD-as-as-Service CLI](#install-the-cd-as-as-service-cli) on your Mac, Linux, or Windows workstation. 1. -## {{% heading "prereq" %}} - -* You are familiar with CD-as-a-Service's [key components]({{< ref "architecture.md" >}}). -* You should be familiar with [AWS Lambda](https://aws.amazon.com/lambda/) and have a [Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). -* You have read the {{< linkWithTitle "deployment/lambda/index.md" >}}. ## Sign up for CD-as-a-Service @@ -110,8 +114,8 @@ const potatolessFacts = [ 1. Download the Lambda zip file -1. Upload the file to your `armory-demo-lambda-deploy` S3 bucket. -1. Make a note of each bucket's S3 path to the lambda function. They should be: +1. Upload the file to each of your `armory-demo-lambda-deploy` S3 buckets. +1. Make a note of each bucket's S3 path to the lambda function. The paths should be: * `s3://armory-demo-east-1/just-sweet-potatoes.zip` * `s3://armory-demo-east-2/just-sweet-potatoes.zip` @@ -122,16 +126,229 @@ const potatolessFacts = [ First create a file called `deploy.yaml` with the following contents: -{{< highlight yaml "linenos=table, hl_lines=2 3 4" >}} +{{< highlight yaml "linenos=table" >}} version: v1 kind: lambda application: just-sweet-potatoes -description: A demo function for deployment using CD-as-a-Service +description: A sample function for deployment using CD-as-a-Service {{< /highlight >}} * `kind`: `lambda` tells CD-as-a-Service the deployment type * `application`: This is the unique name of your deployment and appears in the **Deployments** list. * `description`: Brief description of your function (optional) +### Add a canary strategy + + +Add a basic [canary strategy]({{< ref "deployment/strategies/canary" >}}) with a single step that sets the weight to 100. + +{{< highlight yaml "linenos=table" >}} +strategies: + allAtOnce: + canary: + steps: + - setWeight: + weight: 100 +{{< /highlight >}} + ### Add targets +Add four targets, one in each region: + +{{< highlight yaml "linenos=table" >}} +targets: + dev: + account: + deployAsIamRole: + region: us-east-1 + strategy: allAtOnce + staging: + account: + deployAsIamRole: + region: us-east-2 + strategy: allAtOnce + constraints: + dependsOn: + - dev + prod-west-1: + account: + deployAsIamRole: + region: us-west-1 + strategy: allAtOnce + constraints: + dependsOn: + - staging + prod-west-2: + account: + deployAsIamRole: + region: us-west-2 + strategy: allAtOnce + constraints: + dependsOn: + - staging +{{< /highlight >}} + +Replace: + +* `` with the name of your AWS Account, such as `armory-docs-dev` +* `` with the ARN of the role you created in the [Create the Armory IAM role](#create-the-armory-iam-role) section + + +```mermaid +flowchart LR + A[dev] --> B[staging] + B --> C[prod-west-1] + B --> D[prod-west-2] +``` + +CD-as-a-Service deploys your Lambda function from your S3 bucket to the `dev` target first. You want a linear, success-dependent progression from `dev` to `prod`, so you add a `dependsOn` constraint to each target: `staging` depends on `dev` and the prod targets depend on `staging`. + +### Add lambda artifacts + +In this section, you declare your Lambda function artifacts. You have an entry for each deployment region. + +The function is named `just-sweet-potatoes` in each S3 bucket, but the `functionName` is unique each entry in the +`artifacts` collection. For this guide, the target name is appended to the function's name to create the +`functionName` value for each entry. + +{{< highlight yaml "linenos=table" >}} +artifacts: + - functionName: just-sweet-potatoes-dev + path: s3://armory-demo-east-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-staging + path: s3://armory-demo-east-2/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-prod-west-1 + path: s3://armory-demo-west-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-prod-west-2 + path: s3://armory-demo-west-2/just-sweet-potatoes.zip + type: zipFile +{{< /highlight >}} + +### Add provider options + +You need to populate provider options for each deployment target. + +{{< highlight yaml "linenos=table" >}} +providerOptions: + lambda: + - name: just-sweet-potatoes-dev + target: dev + runAsIamRole: + handler: index.handler + runtime: python3.10 + - name: just-sweet-potatoes-staging + target: staging + runAsIamRole: + handler: index.handler + runtime: python3.10 + - name: just-sweet-potatoes-prod-west-1 + target: prod-west-1 + runAsIamRole: + handler: index.handler + runtime: python3.10 + - name: just-sweet-potatoes-prod-west-2 + target: prod-west-2 + runAsIamRole: + handler: index.handler + runtime: python3.10 +{{< /highlight >}} + +* `name`: The `artifacts.functionName` for the target region +* `target`: The deployment target name +* `runAsIamRole`: Replace `` with the ARN of your Lambda execution role, which is **not** + the ArmoryRole ARN. +* `handler`: The function's handler method +* `runtime`: The function's runtime + +## Deploy the sample function + +### First deployment + +Start your deployment using the CLI: + +```bash +armory deploy start -f deploy.yaml +``` + +You can use the link provided by the CLI to observe your deployment's progression in the [CD-as-a-Service Console](https://console.cloud.armory.io/deployments). CD-as-a-Service deploys your resources to `dev`. Once those resources have deployed successfully, CD-as-a-Service deploys to `staging` and then `prod`. + +{{< figure src="deploy-details.webp" >}} + +### Second deployment + +CD-as-a-Service is designed to help you build safety into your app deployment process. It does so by giving you declarative levers to control the scope of your deployment. + +CD-as-a-Service has four kinds of constraints that you can use to control your deployment: + +- Manual Approvals +- Timed Pauses +- [External Automation (Webhooks)]({{< ref "webhooks/overview.md" >}}) +- [Automated Canary Analysis]({{< ref "deployment/strategies/canary" >}}) + +You can use these constraints between environments and within environments. During your next deployment, you need to issue a manual approval before deploying to to the prod targets. Add a `beforeDeployment` constraint for a manual judgment: + +{{< highlight yaml "linenos=table,hl_lines=23-25 34-36" >}} +targets: + dev: + account: + deployAsIamRole: + region: us-east-1 + strategy: allAtOnce + staging: + account: + deployAsIamRole: + region: us-east-2 + strategy: allAtOnce + constraints: + dependsOn: + - dev + prod-west-1: + account: + deployAsIamRole: + region: us-west-1 + strategy: allAtOnce + constraints: + dependsOn: + - staging + beforeDeployment: + - pause: + untilApproved: true + prod-west-2: + account: + deployAsIamRole: + region: us-west-2 + strategy: allAtOnce + constraints: + dependsOn: + - staging + beforeDeployment: + - pause: + untilApproved: true +{{< /highlight>}} + + +Start your second deployment using the CLI: + +```bash +armory deploy start -f deploy.yaml +``` + +Use the link provided by the CLI to observe your deployment's progression in the [CD-as-a-Service Console](https://console.cloud.armory.io/deployments). + +In this second deployment, you see that CD-as-a-Service paused deployment to prod. Click the **Approve** button in each prod node to continue deployment. + +{{< figure src="manual-constraint.webp" >}} + +## Test the deployed function + + + + + + + + +## {{% heading "nextSteps" %}} \ No newline at end of file diff --git a/content/en/get-started/lambda/manual-constraint.webp b/content/en/get-started/lambda/manual-constraint.webp new file mode 100644 index 0000000000000000000000000000000000000000..eaefdca5ffd35c71cffb953db1e87066a3bc2732 GIT binary patch literal 66480 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 Date: Wed, 15 Nov 2023 15:08:44 -0600 Subject: [PATCH 07/28] add screenshots for deployed function list and test function --- .../lambda/deployed-function-list.webp | Bin 0 -> 56474 bytes .../en/get-started/lambda/function-test.webp | Bin 0 -> 118296 bytes content/en/get-started/lambda/index.md | 47 +++++++++++------- 3 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 content/en/get-started/lambda/deployed-function-list.webp create mode 100644 content/en/get-started/lambda/function-test.webp diff --git a/content/en/get-started/lambda/deployed-function-list.webp b/content/en/get-started/lambda/deployed-function-list.webp new file mode 100644 index 0000000000000000000000000000000000000000..7c0bed1932882ab2bceaa793a2a26c873afea229 GIT binary patch literal 56474 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
Pk)Sn}T+=O^`V?}dS3w6L^)mk6%KzMi5`8}8 zY1=v}G;TVC*0jrQ9UUsndcmF!SwPpA7=PI1k&&fctTgdOAT=rHrG}v-=BMW;uT}En z9c6dAwLS-V%kb>Z(>ZYjWpiY$JC?qkLT6a#5*(3NrMGA0dzw8RrfEMm#XY#9K*`o@ z6_d&$J%&fqC~&P}en)RSv5}5lm$638@Qhq6f|26><^EkTN~>gv8nwG#W(U>^uiEy& z@?mMET`wrLdSY1MRCGQ5Vgg^oAXjUq)KI42v{8|m)N%P0qvW<^OU~YJ53hKMUhg6+e|6ZzsV_ zFY96Ecdb$bHI9-3mKWiMRqR|qXdXD_RW(}B`4uBoyqD)s@|XL`Z7f(hNn(|aF&@x9 z?_fSPCq)^%RlG8waOv+}^E@{oO<`}VyD!7^+x6Gfa>^rMbYew?W+2n4Hb>qQ6eK&H zD~^-dDE`M3#9C_b<=e|9H=oae1vAJ<>BQlVu@W}X_vTCWFUA~>yqZ`i&KM*Mce5JZ zjj>j0Te{RW132!we|_LrVf4+ro~3&%*1=_XXAdL*k34#pBHUXzPP_EhV?-vwpCRf- zMT9OUO&~(OPI~Pbv12S0(&b)W>D5x`#s53hm$(5K*8e{xh(J$>2~&++TJInIM(}_V zEoi`=`hxOLoKB58fB*mh0pazNy-?c8O$J{7PgairfiN3wqyZ!6e?;N!IleP$p6+YT zdt;px&@$XzG_uN;=9h@R826Rx3zopzW}EJX&Nunb{;S3++tux27GEWB`4-HXbLKK9 zI{3m}y`5p}LLU zZ9iX)f3vkD<^~7z?739UVMXWxcNh$&1jg4THbXyr?X)E#`^d0a?-?C(bBA5FUP zDZSBRkK4cc3Ktqi?<6;WxGWi&Dix?_U%N8JL?;uk+^e^&0H1N!ZdO9bNWTGd5IMx> z?v!3O(sEHN8R}p-p?T?CW&k zM51u;KO~f-wRTTYDTTRqK?z(lWH*u>Hw)44h4rb>1tuOw0-fPr(>@w9o zA&dep7zD`JKfPH_{{8g{Jx4#L1l#~Aj!3^JF8d@`nnh*QeKs4NPCEEsC*%b3;^RV) zg9flJ2Tx$<;3yM$(@Q6Nt8WW-N;uUf4hOK>$wQMG61;tHcpy`S0h|`bZF({P zuF7#<%Vlj%B!4vIUo@{IF1p2_)T2>9EuB1z@Ih!axq^NTytg<6?6H$KCe)>3p3J`d zrzThytrsT|u8C0CWz4;V1T2>E1P$KW$^I;;JvsFIud4`mTLC<{Hl6W~l@dXGF4b~LmF z>$T^oKd}H-KE_lC+u9UQv}`|8WL$!t#M;4HU*4{yS7d?xno+-kychM7k>D0@w_$&4 z@MY%nW_$MyA-)U6=Q*SeWqVkUTiY;KI@jgEZlvc7ee~!g9j0Mt^BhxQo851?d(Wme z;5EYe6n~lIW@HL*h^4nGjCGr5ib>k7NeuRFM#x;Mazy_HJIGRpCsHPlPgVp^HNp7j z+J9cKpwS4{VmXPSQ#3maF041q{2Bsi$2g3$QZ@tqwJEqBrBWY?70(}5lo-fV%8d@c zb_ioLm!t0dI1I&=KEou;dg#?VMQ+?R(4L?j#*zDbr2nbU$^z&w0!2jK~F6OM5?=$jLpA zGpO?EK^X;5sa#1*RA+e52A$K)$Ppyq1P_SaTcQpUis*<`A<5%HutuHr{LY}fx1-V9h4*_Ze2Y)(wW%X7iUwUQwnG4_!?q>&bmmXiSW( z7C)=dn5!a!d9w0xb4ys%#qejha=MuK>i~nvaeCn6lZvAz{ zqZx5ry;BNk@yxC_YAnNsXjd4o&FgLO^t3jWB(EJVN1?eq&auxaYxFqTR#5xKmZX$G zec{;0N+a>PlYT40qJlMeIPco)^?_vH!V|^q88c((o3hT8UKR`6MuPb~#YsK@00000 M00000000000I)>!%>V!Z literal 0 HcmV?d00001 diff --git a/content/en/get-started/lambda/function-test.webp b/content/en/get-started/lambda/function-test.webp new file mode 100644 index 0000000000000000000000000000000000000000..be52ccd3925f374b9b666ebbfe54063959724988 GIT binary patch literal 118296 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

#0F?~IkHp7 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 -1. Download the Lambda zip file +1. Download the Lambda zip file. 1. Upload the file to each of your `armory-demo-lambda-deploy` S3 buckets. 1. Make a note of each bucket's S3 path to the lambda function. The paths should be: @@ -153,7 +153,16 @@ strategies: ### Add targets -Add four targets, one in each region: +```mermaid +flowchart LR + A[dev] --> B[staging] + B --> C[prod-west-1] + B --> D[prod-west-2] +``` + +CD-as-a-Service deploys your Lambda function from your S3 bucket to the `dev` target first. You want a linear, success-dependent progression from `dev` to `prod`, so there is a `dependsOn` constraint for staging and prod targets. `staging` depends on `dev` and the prod targets depend on `staging`. + +Add the four targets, one in each region: {{< highlight yaml "linenos=table" >}} targets: @@ -194,15 +203,6 @@ Replace: * `` with the ARN of the role you created in the [Create the Armory IAM role](#create-the-armory-iam-role) section -```mermaid -flowchart LR - A[dev] --> B[staging] - B --> C[prod-west-1] - B --> D[prod-west-2] -``` - -CD-as-a-Service deploys your Lambda function from your S3 bucket to the `dev` target first. You want a linear, success-dependent progression from `dev` to `prod`, so you add a `dependsOn` constraint to each target: `staging` depends on `dev` and the prod targets depend on `staging`. - ### Add lambda artifacts In this section, you declare your Lambda function artifacts. You have an entry for each deployment region. @@ -256,12 +256,12 @@ providerOptions: runtime: python3.10 {{< /highlight >}} -* `name`: The `artifacts.functionName` for the target region +* `name`: This is the same value as `artifacts.functionName` for the target region. This function name appears in your AWS Lambda **Functions** list. * `target`: The deployment target name * `runAsIamRole`: Replace `` with the ARN of your Lambda execution role, which is **not** the ArmoryRole ARN. -* `handler`: The function's handler method -* `runtime`: The function's runtime +* `handler`: The function's handler method; this value is written to the **Runtime settings** section in the AWS Lambda function details page. +* `runtime`: The function's runtime; this value is written to the **Runtime settings** section in the AWS Lambda function details page. ## Deploy the sample function @@ -275,7 +275,7 @@ armory deploy start -f deploy.yaml You can use the link provided by the CLI to observe your deployment's progression in the [CD-as-a-Service Console](https://console.cloud.armory.io/deployments). CD-as-a-Service deploys your resources to `dev`. Once those resources have deployed successfully, CD-as-a-Service deploys to `staging` and then `prod`. -{{< figure src="deploy-details.webp" >}} +{{< figure src="deploy-details.webp" width="80%" height="80%" >}} ### Second deployment @@ -339,16 +339,25 @@ armory deploy start -f deploy.yaml Use the link provided by the CLI to observe your deployment's progression in the [CD-as-a-Service Console](https://console.cloud.armory.io/deployments). In this second deployment, you see that CD-as-a-Service paused deployment to prod. Click the **Approve** button in each prod node to continue deployment. - -{{< figure src="manual-constraint.webp" >}} -## Test the deployed function +{{< figure src="manual-constraint.webp" width="80%" height="80%" >}} +## Test the deployed function +Go to the `us-east-1` Lamba section of your AWS Account. You should see your deployed `just-sweet-potatoes-dev` function there. +{{< figure src="deployed-function-list.webp" width="80%" height="80%" >}} +1. Click `just-sweet-potatoes-dev` to open the function's details page. +1. Click the **Test** tab. +1. Click the **Test** button in the **Test event** section to test the function. +1. Expand the **Details** section to see the test results. + {{< figure src="function-test.webp" >}} +## {{% heading "nextSteps" %}} -## {{% heading "nextSteps" %}} \ No newline at end of file +* {{< linkWithTitle "integrations/ci-systems/gh-action.md" >}} +* {{< linkWithTitle "deployment/strategies/canary.md" >}} +* {{< linkWithTitle "webhooks/overview.md" >}} From 002ff34a9861025aea86042f89ae95d63d54f637 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 15 Nov 2023 16:01:48 -0600 Subject: [PATCH 08/28] bit more content to lambda quickstart --- content/en/get-started/lambda/index.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 34e6a858..a3c63930 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -139,6 +139,10 @@ description: A sample function for deployment using CD-as-a-Service ### Add a canary strategy +A strategy defines how CD-as-a-Service deploys your Lambda function to a target. + +A [canary strategy]({{< ref "deployment/strategies/canary.md" >}}) is a linear sequence of steps. The `setWeight` step defines the ratio of traffic between function versions. + Add a basic [canary strategy]({{< ref "deployment/strategies/canary" >}}) with a single step that sets the weight to 100. @@ -153,6 +157,8 @@ strategies: ### Add targets +In CD-as-a-Service, a `target` is an (AWS Account, region) pair. + ```mermaid flowchart LR A[dev] --> B[staging] @@ -160,7 +166,7 @@ flowchart LR B --> D[prod-west-2] ``` -CD-as-a-Service deploys your Lambda function from your S3 bucket to the `dev` target first. You want a linear, success-dependent progression from `dev` to `prod`, so there is a `dependsOn` constraint for staging and prod targets. `staging` depends on `dev` and the prod targets depend on `staging`. +When deploying to multiple targets, you can specify dependencies between targets using the `constraints.dependsOn` field. CD-as-a-Service deploys your Lambda function from your S3 bucket to the `dev` target first. You want a linear, success-dependent progression from `dev` to `prod`, so there is a `dependsOn` constraint for staging and prod targets. `staging` depends on `dev` and the prod targets depend on `staging`. Add the four targets, one in each region: @@ -356,6 +362,14 @@ Go to the `us-east-1` Lamba section of your AWS Account. You should see your de {{< figure src="function-test.webp" >}} + +## Clean up + +1. Delete the deployed Lambda functions from each region. +1. Delete the Lambda zip files from each S3 bucket. Delete each S3 bucket. +1. Delete the CloudFormation Stack. This also deletes the associated IAM Role. + + ## {{% heading "nextSteps" %}} * {{< linkWithTitle "integrations/ci-systems/gh-action.md" >}} From d6bac0cad759b3b35a3b8a3f335e9734b3c89052 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 15 Nov 2023 17:35:02 -0600 Subject: [PATCH 09/28] finish targets --- .../en/deployment/create-iam-role-lambda.md | 17 ++ content/en/deployment/lambda/index.md | 5 +- content/en/get-started/lambda/index.md | 50 ++-- .../dep-file/lambda-provider-options.md | 5 + content/en/includes/lambda/iam-role-steps.md | 12 + .../deployment/config-file/artifacts.md | 235 +++++++++++++++++- .../config-file/provider-options.md | 21 -- .../deployment/config-file/targets.md | 208 +++++++++++++++- content/en/troubleshooting/lambda.md | 63 ++++- 9 files changed, 535 insertions(+), 81 deletions(-) create mode 100644 content/en/deployment/create-iam-role-lambda.md create mode 100644 content/en/includes/dep-file/lambda-provider-options.md create mode 100644 content/en/includes/lambda/iam-role-steps.md diff --git a/content/en/deployment/create-iam-role-lambda.md b/content/en/deployment/create-iam-role-lambda.md new file mode 100644 index 00000000..d9926fed --- /dev/null +++ b/content/en/deployment/create-iam-role-lambda.md @@ -0,0 +1,17 @@ +--- +title: Create an Armory IAM Role for AWS Lambda Deployment +linkTitle: Create Armory IAM Role +weight: 2 +description: > + Create the Armory IAM Role that CD-as-a-Service assumes when it deploys your AWS Lambda function. +--- + +## {{% heading "prereq" %}} + +Make sure you have [installed the CD-as-a-Service CLI]({{< ref "cli" >}}), which you can use to generate a deployment template. + +## Create the Armory IAM role + +{{< include "lambda/iam-role.md" >}} + +{{< include "lambda/iam-role-steps.md" >}} diff --git a/content/en/deployment/lambda/index.md b/content/en/deployment/lambda/index.md index 9ecbad26..e7bfd111 100644 --- a/content/en/deployment/lambda/index.md +++ b/content/en/deployment/lambda/index.md @@ -320,4 +320,7 @@ strategies: weight: 100 ``` -## {{% heading "nextSteps" %}} \ No newline at end of file +## {{% heading "nextSteps" %}} + +* Work through the [AWS Lambda Quickstart]({{< ref "get-started/lambda" >}}) to deploy a sample function to your AWS Account. +* Learn how you can [monitor your deployment]({{< ref "deployment/monitor-deployment" >}}) using the UI or the CLI. diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index a3c63930..8adb251f 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -22,9 +22,13 @@ In this guide, you deploy an AWS Lambda function to four regions in your AWS Lam 1. [Sign up for CD-as-a-Service](#sign-up-for-cd-as-a-service). 1. [Install the CD-as-as-Service CLI](#install-the-cd-as-as-service-cli) on your Mac, Linux, or Windows workstation. -1. - - +1. Create AWS artifacts + 1. [Create the IAM Role](#create-the-armory-iam-role) that CD-as-a-Service assumes to deploy your function. + 1. [Create S3 buckets](#create-s3-buckets), one for each deployment region, to house your function's zip files. + 1. [Upload the sample function](#upload-the-lambda-function-to-your-buckets) to each S3 bucket. +1. [Create your CD-as-a-Service deployment config file](#create-your-deployment-config-file). +1. [Deploy the sample function](#deploy-the-sample-function). +1. [Test the deployed function](#test-the-deployed-function) in the AWS Lambda console. ## Sign up for CD-as-a-Service @@ -46,18 +50,7 @@ Confirm the device code in your browser when prompted. Then return to this guide {{< include "lambda/iam-role.md" >}} -1. In your default browser, log in to your AWS Account. You must have permissions to configure IAM roles. -1. In your terminal, execute the following: - - ```bash - armory aws create-role - ``` - - Type "Y" in the terminal to continue with Stack creation. This opens your browser to the CloudFormation page of your AWS Console. You complete the rest of this process in your browser. - -1. Review the resources that CD-as-a-Service is creating in your AWS account. The default IAM Role name is **ArmoryRole**. -1. Click **Create** on the AWS CloudFormation page and wait for Stack creation to finish. -1. After the CloudFormation Stack creation finishes, locate the created role ARN in the **Outputs** section. You can find it under the key **RoleArnOutput**. Make note of the ARN since you use it in your deployment config file. +{{< include "lambda/iam-role-steps.md" >}} ## Create S3 buckets @@ -213,7 +206,7 @@ Replace: In this section, you declare your Lambda function artifacts. You have an entry for each deployment region. -The function is named `just-sweet-potatoes` in each S3 bucket, but the `functionName` is unique each entry in the +The function is named `just-sweet-potatoes` in each S3 bucket, but the `functionName` is unique for each entry in the `artifacts` collection. For this guide, the target name is appended to the function's name to create the `functionName` value for each entry. @@ -235,39 +228,34 @@ artifacts: ### Add provider options -You need to populate provider options for each deployment target. +This section defines options specific to the cloud provider to which you are deploying. You need to populate provider options for each deployment target. {{< highlight yaml "linenos=table" >}} providerOptions: lambda: - - name: just-sweet-potatoes-dev - target: dev + - target: dev + name: just-sweet-potatoes-dev runAsIamRole: handler: index.handler runtime: python3.10 - - name: just-sweet-potatoes-staging - target: staging + - target: staging + name: just-sweet-potatoes-staging runAsIamRole: handler: index.handler runtime: python3.10 - - name: just-sweet-potatoes-prod-west-1 - target: prod-west-1 + - target: prod-west-1 + name: just-sweet-potatoes-prod-west-1 runAsIamRole: handler: index.handler runtime: python3.10 - - name: just-sweet-potatoes-prod-west-2 - target: prod-west-2 + - target: prod-west-2 + name: just-sweet-potatoes-prod-west-2 runAsIamRole: handler: index.handler runtime: python3.10 {{< /highlight >}} -* `name`: This is the same value as `artifacts.functionName` for the target region. This function name appears in your AWS Lambda **Functions** list. -* `target`: The deployment target name -* `runAsIamRole`: Replace `` with the ARN of your Lambda execution role, which is **not** - the ArmoryRole ARN. -* `handler`: The function's handler method; this value is written to the **Runtime settings** section in the AWS Lambda function details page. -* `runtime`: The function's runtime; this value is written to the **Runtime settings** section in the AWS Lambda function details page. +{{< include "dep-file/lambda-provider-options.md" >}} ## Deploy the sample function diff --git a/content/en/includes/dep-file/lambda-provider-options.md b/content/en/includes/dep-file/lambda-provider-options.md new file mode 100644 index 00000000..cafb3413 --- /dev/null +++ b/content/en/includes/dep-file/lambda-provider-options.md @@ -0,0 +1,5 @@ +* `target`: CD-as-a-Service deployment [target]({{< ref "reference/deployment/config-file/targets" >}}) name +* `name`: This is the same value as `artifacts.functionName` for the target region. This function name appears in your AWS Lambda **Functions** list. +* `runAsIamRole`: Replace `` with the ARN of your [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), which is **not** the ArmoryRole ARN. +* `handler`: The function's handler method, such as `index.handler`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. +* `runtime`: [runtime identifier](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html), such as `python3.22` or `nodejs18.x`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. diff --git a/content/en/includes/lambda/iam-role-steps.md b/content/en/includes/lambda/iam-role-steps.md new file mode 100644 index 00000000..ed8db523 --- /dev/null +++ b/content/en/includes/lambda/iam-role-steps.md @@ -0,0 +1,12 @@ +1. In your default browser, log in to your AWS Account. You must have permissions to configure IAM roles. +1. In your terminal, execute the following: + + ```bash + armory aws create-role + ``` + + Type "Y" in the terminal to continue with Stack creation. This opens your browser to the CloudFormation page of your AWS Console. You complete the rest of this process in your browser. + +1. Review the resources that CD-as-a-Service is creating in your AWS account. The default IAM Role name is **ArmoryRole**. +1. Click **Create** on the AWS CloudFormation page and wait for Stack creation to finish. +1. After the CloudFormation Stack creation finishes, locate the created role ARN in the **Outputs** section. You can find it under the key **RoleArnOutput**. Make note of the ARN since you use it in your deployment config file. \ No newline at end of file diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md index a5e25174..4bcb9132 100644 --- a/content/en/reference/deployment/config-file/artifacts.md +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -1,30 +1,249 @@ --- -title: Artifacts (AWS Lambda) +title: Artifacts and Provider Options (AWS Lambda) description: > - Declare your AWS Lambda artifacts (functionName, path, type). + Declare your AWS Lambda artifacts (functionName, path, type) and provider options. --- ## Artifacts -This section defines the artifacts you are deploying. By default, the artifacts reach all targets, but you can specify certain targets if needed. +This section defines the Lambda artifacts you are deploying. By default, the artifacts reach all targets, but you can specify certain targets if needed. ```yaml artifacts: - functionName: - path: # S3 bucket + path: type: zipFile ``` -- `functionName`: -- `path`: The S3 path to your function archive? +* `functionName`: A unique name for each entry in the `artifacts` collection +* `path`: The S3 path to your function's zip file +* `type`: This value is always `zipFile`. CD-as-a-Service does not support deploying Lambda containers. -does cdaas support lambda container images uploaded to amazon ecr? +If you want to deploy to multiple regions in the same AWS Account, your `functionName` should be unique for the region. -- `type`: ? AWS also supports +In this example, you deploy a function called `just-sweet-potatoes` to four regions in the same AWS Account: +```yaml +targets: + dev: + account: + deployAsIamRole: + region: us-east-1 + strategy: allAtOnce + staging: + account: + deployAsIamRole: + region: us-east-2 + strategy: allAtOnce + constraints: + dependsOn: + - dev + prod-west-1: + account: + deployAsIamRole: + region: us-west-1 + strategy: allAtOnce + constraints: + dependsOn: + - staging + prod-west-2: + account: + deployAsIamRole: + region: us-west-2 + strategy: allAtOnce + constraints: + dependsOn: + - staging +artifacts: + - functionName: just-sweet-potatoes-us-east-1 + path: s3://armory-demo-east-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-us-east-2 + path: s3://armory-demo-east-2/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-prod-west-1 + path: s3://armory-demo-west-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-prod-west-2 + path: s3://armory-demo-west-2/just-sweet-potatoes.zip + type: zipFile +``` + +## Provider options + +This section defines options specific to the cloud provider to which you are deploying. You need to populate provider options for each deployment target. + +```yaml +providerOptions: + lambda: + - name: + target: + runAsIamRole: + handler: + runtime: +``` +{{< include "dep-file/lambda-provider-options.md" >}} +```yaml +targets: + dev: + account: + deployAsIamRole: + region: us-east-1 + strategy: allAtOnce + staging: + account: + deployAsIamRole: + region: us-east-2 + strategy: allAtOnce + constraints: + dependsOn: + - dev + prod-west-1: + account: + deployAsIamRole: + region: us-west-1 + strategy: allAtOnce + constraints: + dependsOn: + - staging + prod-west-2: + account: + deployAsIamRole: + region: us-west-2 + strategy: allAtOnce + constraints: + dependsOn: + - staging +artifacts: + - functionName: just-sweet-potatoes-us-east-1 + path: s3://armory-demo-east-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-us-east-2 + path: s3://armory-demo-east-2/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-prod-west-1 + path: s3://armory-demo-west-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-prod-west-2 + path: s3://armory-demo-west-2/just-sweet-potatoes.zip + type: zipFile +providerOptions: + lambda: + - name: just-sweet-potatoes-us-east-1 + target: dev + runAsIamRole: + handler: index.handler + runtime: python3.10 + - name: just-sweet-potatoes-us-east-2 + target: staging + runAsIamRole: + handler: index.handler + runtime: python3.10 + - name: just-sweet-potatoes-prod-west-1 + target: prod-west-1 + runAsIamRole: + handler: index.handler + runtime: python3.10 + - name: just-sweet-potatoes-prod-west-2 + target: prod-west-2 + runAsIamRole: + handler: index.handler + runtime: python3.10 +``` + +## Multiple AWS Account example +This illustrates deploying a function to the same region in multiple AWS Accounts. +```yaml +targets: + Lab: + account: armory-lab + deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + Staging: + account: armory-core + deployAsIamRole: "arn:aws:iam::222222222222:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Integration-Tests + Audit: + account: armory-audit + deployAsIamRole: "arn:aws:iam::333333333333:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Audit-Analysis + ITSec: + account: armory-itsec + deployAsIamRole: "arn:aws:iam::444444444444:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Security-Scans + Prod-West-2: + account: armory-prod + deployAsIamRole: "arn:aws:iam::555555555555:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Staging + - Audit + - ITSec + beforeDeployment: + - runWebhook: + name: Send-Slack-Deployment-Approval-Required + - pause: + untilApproved: true +artifacts: + - functionName: hello-world-python + path: s3://armory-demos-us-west-2/hello-world-python.zip + type: zipFile +providerOptions: + lambda: + - target: Lab + name: hello-world-python + runAsIamRole: arn:aws:iam::111111111111:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: Staging + name: hello-world-python + runAsIamRole: arn:aws:iam::222222222222:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: Audit + name: hello-world-python + runAsIamRole: arn:aws:iam::333333333333:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: ITSec + name: hello-world-python + runAsIamRole: arn:aws:iam::444444444444:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 + - target: Prod-West-2 + name: hello-world-python + runAsIamRole: arn:aws:iam::555555555555:role/LambdaExecutionRole + handler: lambda_function.lambda_handler + runtime: python3.10 +``` +The S3 bucket has a policy that makes it accessible to multiple accounts in the same organization. diff --git a/content/en/reference/deployment/config-file/provider-options.md b/content/en/reference/deployment/config-file/provider-options.md index 7add9e15..8cd28f44 100644 --- a/content/en/reference/deployment/config-file/provider-options.md +++ b/content/en/reference/deployment/config-file/provider-options.md @@ -3,24 +3,3 @@ title: Provider Options (Lambda) description: > Declare your Lambda provider options. --- - -## Provider options - -This section defines options specific to the cloud provider to which you are deploying. - -```yaml -providerOptions: - lambda: - - handler: # typically index.handler - name: - runAsIamRole: - runtime: # nodejs18.x, Python, etc - target: -``` - - -- `handler`: Lambda function handler name, such as `index.handler` -- `name`: The name of your function; this is the same as `artifacts.functionName` -- `runAsIamRole`: The name of the [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) for your function -- `runtime`: Your function's [runtime identifier](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html), such as `python3.22` or `nodejs18.x` -- `target`: CD-as-a-Service [target]({{< ref "reference/deployment/config-file/targets" >}}) \ No newline at end of file diff --git a/content/en/reference/deployment/config-file/targets.md b/content/en/reference/deployment/config-file/targets.md index 9f17f6db..c8168f7a 100644 --- a/content/en/reference/deployment/config-file/targets.md +++ b/content/en/reference/deployment/config-file/targets.md @@ -20,10 +20,10 @@ targets: strategy: constraints: {{< /card >}} -{{< card code=true lang="yaml" header="Lambda" >}} +{{< card code=true lang="yaml" header="AWS Lambda" >}} targets: : - account: + account: deployAsIamRole: region: strategy: @@ -33,7 +33,7 @@ targets: ## Common fields -These fields are declared the same whether your target is AWS Lambda or a Kubernetes cluster. +These fields are the same whether your target is AWS Lambda or a Kubernetes cluster. ### Name @@ -96,7 +96,41 @@ targets: namespace: overflow ``` +## AWS Lambda fields +```yaml +: + account: + deployAsIamRole: + region: +``` + +### Account (AWS) + +`targets..account`: A descriptive name for your AWS Account. + +```yaml +Prod-West-1: + account: armory-docs-dev +``` + +### Deploy as IAM Role + +`targets..deployAsIamRole`: The ARN of the [ArmoryRole]({{< ref "deployment/create-iam-role-lambda" >}}) that CD-as-a-Service assumes to deploy your function. + +```yaml +Prod-West-1: + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole +``` + +### AWS Region + +`targets..region`: The AWS Region to deploy your function to. + +```yaml +Prod-West-1: + region: us-east-1 +``` ## Constraints @@ -108,6 +142,9 @@ Optional > Constraints are evaluated in parallel. +{{< tabpane text=true right=true >}} + {{% tab header="**Target**:" disabled=true /%}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: @@ -126,6 +163,30 @@ targets: - runWebhook: name: ``` + {{% /tab %}} + {{% tab header="AWS Lambda" %}} +```yaml +targets: + prod: + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-1 + strategy: canary-wait-til-approved + constraints: + dependsOn: [""] + beforeDeployment: + - pause: + untilApproved: true + - pause: + duration: + unit: + afterDeployment: + - runWebhook: + name: +``` + {{% /tab %}} +{{< /tabpane >}} + ### Depends on @@ -135,9 +196,12 @@ Optional The following example shows a deployment to `prod-west` that cannot start until the `dev-west` target finishes: +{{< tabpane text=true right=true >}} + {{% tab header="**Target**:" disabled=true /%}} + {{% tab header="Kubernetes" %}} ```yaml targets: - prod: + prod-west: account: prod-west namespace: overflow strategy: canary-wait-til-approved @@ -145,6 +209,23 @@ targets: dependsOn: ["dev-west"] ``` + {{% /tab %}} + {{% tab header="AWS Lambda" %}} +```yaml +targets: + prod-west: + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 + strategy: canary-wait-til-approved + constraints: + dependsOn: ["dev-west"] +``` + + {{% /tab %}} +{{< /tabpane >}} + + ### Before and after deployment Optional @@ -161,6 +242,9 @@ You can specify a pause that waits for a manual approval or a certain amount of **Pause until manual approval** +{{< tabpane text=true right=true >}} + {{% tab header="**Target**:" disabled=true /%}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: @@ -181,9 +265,37 @@ targets: - `pause.untilApproved`: Set to true - `pause.requiresRoles`: (Optional) List of RBAC roles that can issue a manual approval - `pause.approvalExpiration`: (Optional) Timeout configuration; when expired the ongoing deployment is cancelled + + {{% /tab %}} + {{% tab header="AWS Lambda" %}} +```yaml +targets: + prod: + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 + strategy: canary-wait-til-approved + constraints: + dependsOn: ["dev-west"] + beforeDeployment: + - pause: + untilApproved: true + approvalExpiration: + duration: 60 + unit: seconds +``` + +- `pause.untilApproved`: Set to true +- `pause.approvalExpiration`: (Optional) Timeout configuration; when expired the ongoing deployment is cancelled + + {{% /tab %}} +{{< /tabpane >}} **Pause for a certain amount of time** +{{< tabpane text=true right=true >}} + {{% tab header="**Target**:" disabled=true /%}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: @@ -197,14 +309,35 @@ targets: duration: 60 unit: seconds ``` + {{% /tab %}} + {{% tab header="AWS Lambda" %}} +```yaml +targets: + prod: + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 + strategy: canary-wait-til-approved + constraints: + dependsOn: ["dev-west"] + beforeDeployment: + - pause: + duration: 60 + unit: seconds +``` + {{% /tab %}} +{{< /tabpane >}} - `pause.duration` set to an integer value for the amount of time to wait before starting after the `dependsOn` condition is met. - `pause.unit` set to `seconds`, `minutes` or `hours` to indicate the unit of time to wait. #### Run a webhook -In the following example, before deploying to the `prod-cluster-west` target, CD-as-a-Service pauses deployment for manual approval by an Org Admin and also calls a webhook that sends a Slack notification. You declare the webhook in the [webhooks section] +In the following example, before deploying to the `prod-cluster-west` target, CD-as-a-Service pauses deployment for manual approval by an Org Admin and also calls a webhook that sends a Slack notification. You declare the webhook in the [webhooks section]({{< ref "reference/deployment/config-file/webhooks" >}}). +{{< tabpane text=true right=true >}} + {{% tab header="**Target**:" disabled=true /%}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: @@ -224,10 +357,36 @@ targets: - runWebhook: name: Send_Slack_Deployment_Approval_Required ``` + {{% /tab %}} + {{% tab header="AWS Lambda" %}} +```yaml +targets: + prod: + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 + strategy: canary-wait-til-approved + constraints: + dependsOn: ["staging"] + beforeDeployment: + - pause: + untilApproved: true + approvalExpiration: + duration: 24 + unit: hours + - runWebhook: + name: Send_Slack_Deployment_Approval_Required +``` + {{% /tab %}} +{{< /tabpane >}} + + #### Analysis -In this example, CD-as-a-Service performs a [canary analysis]({{< ref "reference/canary-analysis-query" >}}) after deploying to the target. You declare your query in the [analysis section]{{< ref "reference/deployment/config-file/analysis" >}} and then add the name to the `queries` list. +**Kubernetes Only** + +In this example, CD-as-a-Service performs a [canary analysis]({{< ref "reference/canary-analysis-query" >}}) after deploying to the target. You declare your query in the [analysis section]({{< ref "reference/deployment/config-file/analysis" >}}) and then add the name to the `queries` list. ```yaml targets: @@ -249,7 +408,7 @@ targets: - avgCPUUsage ``` -## Example +## Kubernetes example In this example, there are four targets: `dev`, `infosec`, `staging`, and `prod-west`. After you deploy code to `infosec` and `staging`, you want to run jobs against those targets. If either of those jobs fails, CD-as-a-Service does not deploy to `prod-west`. @@ -309,3 +468,38 @@ targets: strategy: mycanary ``` +## AWS Lambda example + +```yaml +targets: + Production-1: + account: arn:aws:iam::111111111111:role/ArmoryRole + constraints: + dependsOn: + - staging + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-2 + strategy: allAtOnce + Production-2: + account: arn:aws:iam::111111111111:role/ArmoryRole + constraints: + dependsOn: + - staging + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 + strategy: allAtOnce + staging: + account: arn:aws:iam::111111111111:role/ArmoryRole + constraints: + beforeDeployment: + - runWebhook: + name: Send_Slack_Deployment_Approval_Required + afterDeployment: + - runWebhook: + name: Integration_Tests + - pause: + untilApproved: true + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-1 + strategy: allAtOnce +``` \ No newline at end of file diff --git a/content/en/troubleshooting/lambda.md b/content/en/troubleshooting/lambda.md index 925f2b13..a63edf76 100644 --- a/content/en/troubleshooting/lambda.md +++ b/content/en/troubleshooting/lambda.md @@ -1,6 +1,6 @@ --- -title: Troubleshoot Lambda Deployment -linkTitle: Lambda +title: Troubleshoot AWS Lambda Deployment +linkTitle: AWS Lambda weight: 1 description: > Solutions for issues you might encounter while deploying AWS Lambda functions using the Armory CD-as-a-Service. @@ -24,26 +24,63 @@ Duplicate functionName in deploy config file You need to have an S3 bucket with your function archive in the region you want to deploy your function to. -For example: +For example (same AWS Account): | Function | Target and Region | S3 Bucket Region | Bucket Name | Function Path | |-----------------|-------------------|------------------|---------------|------------------------------------| | hello-world.zip | Dev: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | -| hello-world.zip | Staging: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | -| hello-world.zip | Infosec: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | -| hello-world.zip | Prod: us-east-1 | us-east-1 | lambda-us-east-1 | s3://lambda-us-east-1/hello-world.zip | -| hello-world.zip | Prod: us-east-2 | us-east-2 | lambda-us-east-2 | s3://lambda-us-east-2/hello-world.zip | -| hello-world.zip | Prod: us-west-1 | us-west-1 | lambda-us-west-1 | s3://lambda-us-west-1/hello-world.zip | -| hello-world.zip | Prod: us-west-2 | us-west-2 | lambda-us-west-2 | s3://lambda-us-west-2/hello-world.zip | +| hello-world.zip | Staging: us-east-2 | us-east-2 | lambda-us-east-1 | s3://lambda-us-east-2/hello-world.zip | +| hello-world.zip | Infosec: us-west-1 | us-west-1 | lambda-us-east-1 | s3://lambda-us-west-1/hello-world.zip | +| hello-world.zip | Prod: us-west-2 | us-west-2 | lambda-us-east-1 | s3://lambda-us-west-2/hello-world.zip | +| hello-world.zip | Prod: eu-central-1 | eu-central-1 | lambda-eu-central-1 | s3://lambda-eu-central-1/hello-world.zip | +## ResourceConflictException +```yaml +AWSUpdateLambdaError: operation error +Lambda: UpdateFunctionCode, https response error +StatusCode: 409, +RequestID: 8027c7ee-0762-4027-a238-2c636a716d48, +ResourceConflictException: Conflict due to concurrent requests on this function. Please try this request again. +``` -## ResourceConflictException -AWSUpdateLambdaError: operation error Lambda: UpdateFunctionCode, https response error StatusCode: 409, RequestID: 8027c7ee-0762-4027-a238-2c636a716d48, ResourceConflictException: Conflict due to concurrent requests on this function. Please try this request again. +You see this error when you have concurrent deployments to same region. - Concurrent deployments to same region +For example, deploying this config results in a `ResourceConflictException` error. The `staging` and `audit` targets both deploy to `us-east-2` and depend on `dev`, so CD-as-a-Service deploys them concurrently. +```yaml +version: v1 +kind: lambda +application: Sweet Potato Lambda +description: Sweet Potato facts from a Lambda function +deploymentConfig: + timeout: + unit: minutes + duration: 10 +targets: + dev: + account: armory-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-1 + strategy: allAtOnce + staging: + account: armory-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-2 + strategy: allAtOnce + constraints: + dependsOn: + - dev + audit: + account: armory-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-2 + strategy: allAtOnce + constraints: + dependsOn: + - dev +``` -2 concurrent targets in same region +The fix for this is to deploy `audit` to a different region or a different AWS Account. \ No newline at end of file From 8b098b0457b146ad52e67f2615be1995c8fedb10 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 15 Nov 2023 18:01:21 -0600 Subject: [PATCH 10/28] finish create lambda config part of create deploy config page --- content/en/get-started/lambda/index.md | 2 +- content/en/includes/create-lambda-config.md | 50 +++++++++++++++++-- .../dep-file/lambda-provider-options.md | 2 +- .../deployment/config-file/artifacts.md | 1 + .../deployment/config-file/manifests.md | 4 +- .../config-file/provider-options.md | 5 -- .../deployment/config-file/strategies.md | 2 +- .../config-file/traffic-management.md | 2 + 8 files changed, 54 insertions(+), 14 deletions(-) delete mode 100644 content/en/reference/deployment/config-file/provider-options.md diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 8adb251f..0d05a4cf 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -14,7 +14,7 @@ weight: 2 * AWS requirements: * You need an [AWS Account](https://aws.amazon.com/free/), and you must have authority to create an IAM Role. * You should be familiar with [AWS Lambda](https://aws.amazon.com/lambda/). - * You need a [Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). + * You need an [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). ## Learning objectives diff --git a/content/en/includes/create-lambda-config.md b/content/en/includes/create-lambda-config.md index 98d1150a..c4d0fa98 100644 --- a/content/en/includes/create-lambda-config.md +++ b/content/en/includes/create-lambda-config.md @@ -1,12 +1,52 @@ -1. Create a YAML file. +1. Create a YAML file with this basic content: + + ```yaml + version: v1 + kind: lambda + application: + strategies: + canary: + steps: + - setWeight: + weight: 100 + targets: + : + account: + deployAsIamRole: + region: + strategy: canary + artifacts: + - functionName: + path: + type: zipFile + providerOptions: + lambda: + - target: + name: + runAsIamRole: + handler: + runtime: + ``` + + These sections are the minimum you need to declare to deploy an AWS Lambda function. 1. Customize your deployment file by setting the following minimum set of parameters: - - `application`: The name of your app. - - `targets.`: A descriptive name for your deployment. Armory recommends using the environment name. - - `targets..account`: This is the name of your RNA. If you installed the RNA manually, it is the value that you assigned to the `agentIdentifier` parameter. + - `application`: The name of your function. This appears in the **Deployments** list page. + - `targets.`: A descriptive name for your deployment. + + * `account`: A descriptive name for the AWS Account this target resides in, such as `armory-docs-dev`. + * `deployAsIamRole`: The ARN of the [ArmoryRole]({{< ref "deployment/create-iam-role-lambda" >}}) that CD-as-a-Service assumes to deploy your function. + * `region`: The AWS Region to deploy your function to. - LAMBDA STUFF + * `artifacts` + + * `functionName`: A unique name for each entry in the `artifacts` collection. + * `path`: The S3 path to your function's zip file. + + * `providerOptions.lambda` + + {{< include "dep-file/lambda-provider-options.md" >}} 1. (Optional) Ensure there are no YAML issues with your deployment file. diff --git a/content/en/includes/dep-file/lambda-provider-options.md b/content/en/includes/dep-file/lambda-provider-options.md index cafb3413..5ebd3a75 100644 --- a/content/en/includes/dep-file/lambda-provider-options.md +++ b/content/en/includes/dep-file/lambda-provider-options.md @@ -1,5 +1,5 @@ * `target`: CD-as-a-Service deployment [target]({{< ref "reference/deployment/config-file/targets" >}}) name -* `name`: This is the same value as `artifacts.functionName` for the target region. This function name appears in your AWS Lambda **Functions** list. +* `name`: This is the same value as `artifacts.functionName` for the target region. This function name appears on your AWS Lambda **Functions** list page. * `runAsIamRole`: Replace `` with the ARN of your [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), which is **not** the ArmoryRole ARN. * `handler`: The function's handler method, such as `index.handler`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. * `runtime`: [runtime identifier](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html), such as `python3.22` or `nodejs18.x`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md index 4bcb9132..8ebaf535 100644 --- a/content/en/reference/deployment/config-file/artifacts.md +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -4,6 +4,7 @@ description: > Declare your AWS Lambda artifacts (functionName, path, type) and provider options. --- +**AWS Lambda Only** ## Artifacts diff --git a/content/en/reference/deployment/config-file/manifests.md b/content/en/reference/deployment/config-file/manifests.md index 3bb84af1..5960e4f0 100644 --- a/content/en/reference/deployment/config-file/manifests.md +++ b/content/en/reference/deployment/config-file/manifests.md @@ -1,9 +1,11 @@ --- -title: Manifests Config +title: Manifests Config (Kubernetes) description: > Declare the path to the Kubernetes manifests to use for your deployment. You can deploy a manifest to all targets or declare specific targets per manifest. --- +**Kubernetes Only** + ## Manifests section `manifests.` diff --git a/content/en/reference/deployment/config-file/provider-options.md b/content/en/reference/deployment/config-file/provider-options.md deleted file mode 100644 index 8cd28f44..00000000 --- a/content/en/reference/deployment/config-file/provider-options.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Provider Options (Lambda) -description: > - Declare your Lambda provider options. ---- diff --git a/content/en/reference/deployment/config-file/strategies.md b/content/en/reference/deployment/config-file/strategies.md index b33ab4dd..ff715b30 100644 --- a/content/en/reference/deployment/config-file/strategies.md +++ b/content/en/reference/deployment/config-file/strategies.md @@ -345,7 +345,7 @@ All the queries must pass for the step as a whole to be considered a success. ## Blue/green fields -**Kubernetes** +**Kubernetes Only** ```yaml strategies: diff --git a/content/en/reference/deployment/config-file/traffic-management.md b/content/en/reference/deployment/config-file/traffic-management.md index 85adb4b3..20394d5d 100644 --- a/content/en/reference/deployment/config-file/traffic-management.md +++ b/content/en/reference/deployment/config-file/traffic-management.md @@ -6,6 +6,8 @@ description: > ## Traffic management section +**Kubernetes Only** + `trafficManagement.` You configure your service mesh per target in this section. If you omit the `target` entry, CD-as-a-Service applies the config to all targets. From d56138c67301a39e0b229d819cd1ec6d756852f7 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 15 Nov 2023 18:07:37 -0600 Subject: [PATCH 11/28] add more **Kubernetes Only** --- content/en/deployment/strategies/blue-green.md | 2 ++ content/en/deployment/strategies/overview.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/content/en/deployment/strategies/blue-green.md b/content/en/deployment/strategies/blue-green.md index 18155c61..6359c5aa 100644 --- a/content/en/deployment/strategies/blue-green.md +++ b/content/en/deployment/strategies/blue-green.md @@ -8,6 +8,8 @@ categories: ["Deployment", "Guides"] tags: ["Deploy Strategy", "Blue/Green", "Kubernetes"] --- +**Kubernetes Only** + ## What a blue/green strategy does A blue/green strategy shifts traffic from the running version of your software (_blue_) to a new version of your software (_green_) based on conditions you set. You specify conditions that must be met prior to routing traffic to the new version and before shutting down the old version. See the [Strategies Overview]({{< ref "deployment/strategies/overview" >}}) for details on the advantages of using a blue/green deployment strategy. diff --git a/content/en/deployment/strategies/overview.md b/content/en/deployment/strategies/overview.md index 4995f823..62cd0f76 100644 --- a/content/en/deployment/strategies/overview.md +++ b/content/en/deployment/strategies/overview.md @@ -18,6 +18,8 @@ A deployment strategy is the procedure that CD-as-a-Service uses to deploy your ## Blue/Green deployment strategy +**Kubernetes Only** + In a blue/green deployment strategy, you deploy and maintain two identical production environments throughout the execution of the deployment. You maintain _blue_ and _green_ production environments. The _blue_ environment contains the latest known stable version of your app (usually the version you are replacing with the new version) while the _green_ environment contains the changes you are currently deploying. Once you deploy to the green environment, traffic continues to flow exclusively to the blue environment, allowing you to validate and test the changes in your green environment. You can do this via manual testing, automated testing, or any other validation method you may use. From 4fb3f4aa0a6dbe3cfb626608620fd26a1e316e67 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Thu, 16 Nov 2023 11:30:26 -0600 Subject: [PATCH 12/28] change quickstart manual approval to afterDeployment staging node --- content/en/get-started/lambda/index.md | 17 +++++++---------- .../get-started/lambda/manual-constraint.webp | Bin 66480 -> 58356 bytes 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 0d05a4cf..18841201 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -279,12 +279,12 @@ CD-as-a-Service has four kinds of constraints that you can use to control your d - Manual Approvals - Timed Pauses -- [External Automation (Webhooks)]({{< ref "webhooks/overview.md" >}}) +- [External Automation (Webhooks)]({{< ref "webhooks/overview.md" >}}) to run integration tests and security audits or send notifications - [Automated Canary Analysis]({{< ref "deployment/strategies/canary" >}}) -You can use these constraints between environments and within environments. During your next deployment, you need to issue a manual approval before deploying to to the prod targets. Add a `beforeDeployment` constraint for a manual judgment: +You can use these constraints between environments and within environments. During your next deployment, you need to issue a manual approval before deploying to to the prod targets. Add a `beforeDeployment` constraint for a manual judgment to your `staging` target: -{{< highlight yaml "linenos=table,hl_lines=23-25 34-36" >}} +{{< highlight yaml "linenos=table,hl_lines=15-17" >}} targets: dev: account: @@ -299,6 +299,9 @@ targets: constraints: dependsOn: - dev + afterDeployment: + - pause: + untilApproved: true prod-west-1: account: deployAsIamRole: @@ -307,9 +310,6 @@ targets: constraints: dependsOn: - staging - beforeDeployment: - - pause: - untilApproved: true prod-west-2: account: deployAsIamRole: @@ -318,9 +318,6 @@ targets: constraints: dependsOn: - staging - beforeDeployment: - - pause: - untilApproved: true {{< /highlight>}} @@ -332,7 +329,7 @@ armory deploy start -f deploy.yaml Use the link provided by the CLI to observe your deployment's progression in the [CD-as-a-Service Console](https://console.cloud.armory.io/deployments). -In this second deployment, you see that CD-as-a-Service paused deployment to prod. Click the **Approve** button in each prod node to continue deployment. +In this second deployment, you see that CD-as-a-Service paused deployment to prod. Click the **Approve** button in the `staging` node to continue deployment. {{< figure src="manual-constraint.webp" width="80%" height="80%" >}} diff --git a/content/en/get-started/lambda/manual-constraint.webp b/content/en/get-started/lambda/manual-constraint.webp index eaefdca5ffd35c71cffb953db1e87066a3bc2732..4374e02fbfe486e657c5052a8c6a3d76b98885dd 100644 GIT binary patch literal 58356 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

6Nxs~H-( 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 DoGl>y literal 66480 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 Date: Fri, 17 Nov 2023 14:07:54 -0600 Subject: [PATCH 13/28] address stephen's text feedback --- content/en/deployment/lambda/index.md | 18 +++++++----------- content/en/deployment/overview/index.md | 12 +----------- .../en/includes/overview-target-constraints.md | 7 +++++++ .../deployment/config-file/artifacts.md | 2 +- .../deployment/config-file/targets.md | 14 ++++++++++---- content/en/troubleshooting/lambda.md | 10 +++++----- 6 files changed, 31 insertions(+), 32 deletions(-) create mode 100644 content/en/includes/overview-target-constraints.md diff --git a/content/en/deployment/lambda/index.md b/content/en/deployment/lambda/index.md index e7bfd111..e74682aa 100644 --- a/content/en/deployment/lambda/index.md +++ b/content/en/deployment/lambda/index.md @@ -9,7 +9,7 @@ description: > ## What a deployment is -A _deployment_ encompasses the manifests, artifacts, configuration, and actions that deliver your code to remote environments. You can configure a deployment to deliver your [AWS Lambda](https://docs.aws.amazon.com/lambda) function to a single environment or multiple environments, either in sequence or in parallel depending on your [deployment configuration]({{}}). +A _deployment_ encompasses the artifacts, configuration, and actions that deliver your code to remote environments. You can configure a deployment to deliver your [AWS Lambda](https://docs.aws.amazon.com/lambda) function to a single environment or multiple environments, either in sequence or in parallel depending on your [deployment configuration]({{}}). You define your CD-as-a-Service deployment configuration in a YAML file, which you store within your source control, enabling code-like management. You trigger deployments using the Armory CLI, either from your CI system or your workstation. Although CD-as-a-Service requires a separate deployment configuration file for each app, you can deploy multiple Kubernetes Deployment objects together as part of a single app. @@ -28,6 +28,11 @@ CD-as-a-Service automatically rolls back when: * A user fails to issue a configured manual approval within a specified time frame * A deployment target constraint is not met +How CD-as-a-Service performs rollbacks: + +* If you have specified an [AWS Lambda alias](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) to use for routing traffic, CD-as-a-Service points the alias to the old version. +* If you have not specified an alias to use for routing traffic, CD-as-a-Service publishes a new version with the old configuration, so that the 'latest' version of your Lambda function has the same configuration as before the deployment started. + ## How CD-as-a-Service integrates with AWS {{< include "lambda/iam-role.md" >}} @@ -189,16 +194,7 @@ targets: #### Target constraints -You can also configure your deployment targets to use constraints that prevent a deployment from beginning or completing until certain conditions are met. For example, you can configure your deployment to wait for your code to be deployed to your staging environment before promoting that code to production. - -You can set `beforeDeployment` or `afterDeployment` constraints depending on your use case. - -CD-as-a-Service offers you multiple constraint options including: - -* `dependsOn` - Use `dependsOn` to specify a target deployment that must successfully complete prior to starting this target's deployment. -* `pause` - Use `pause` to pause a deployment for a set period of time or until an authorized user issues an approval. +{{< include "overview-target-constraints.md" >}} This example has multiple targets and illustrates `dependsOn`, `beforeDeployment`, and `afterDeployment` constraints. diff --git a/content/en/deployment/overview/index.md b/content/en/deployment/overview/index.md index a4d24026..493567f4 100644 --- a/content/en/deployment/overview/index.md +++ b/content/en/deployment/overview/index.md @@ -83,17 +83,7 @@ defines how to deploy your software and route traffic. #### Target constraints -You can also configure your deployment targets to use constraints that prevent a deployment from beginning or completing until certain conditions are met. For example, you can configure your deployment to wait for your code to be deployed to your staging environment before promoting that code to production. - -You can set `beforeDeployment` or `afterDeployment` constraints depending on your use case. - -CD-as-a-Service offers you multiple constraint options including: - -* `dependsOn` - Use `dependsOn` to specify a target deployment that must successfully complete prior to starting this target's deployment. -* `pause` - Use `pause` to pause a deployment for a set period of time or until an authorized user issues an approval. - +{{< include "overview-target-constraints.md" >}} **Example** diff --git a/content/en/includes/overview-target-constraints.md b/content/en/includes/overview-target-constraints.md new file mode 100644 index 00000000..41346601 --- /dev/null +++ b/content/en/includes/overview-target-constraints.md @@ -0,0 +1,7 @@ +You can also configure your deployment targets to use constraints that prevent a deployment from beginning or completing until certain conditions are met. For example, you can configure your deployment to wait for your code to be deployed to your staging environment before promoting that code to production. + +CD-as-a-Service offers you multiple constraint options including: + +* `dependsOn`: Use `dependsOn` to specify a target deployment that must successfully complete prior to starting this target's deployment. +* `beforeDeployment`: You can use this constraint to implement a checklist of things that need to happen before a target starts deploying. For example, you can use the `beforeDeployment` constraints with the [pause step]({{< ref "reference/deployment/config-file/targets#pause" >}}) to require a manual approval. +* `afterDeployment`: You can use this constraint to prevent downstream deployments from starting until some set of post deployment tasks finishes. For example, you can use this with the [runWebhook step]({{< ref "reference/deployment/config-file/targets#run-a-webhook" >}}) to execute a set of end-to-end tests in a staging environment before deploying to production. diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md index 8ebaf535..3180a86e 100644 --- a/content/en/reference/deployment/config-file/artifacts.md +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -8,7 +8,7 @@ description: > ## Artifacts -This section defines the Lambda artifacts you are deploying. By default, the artifacts reach all targets, but you can specify certain targets if needed. +This section defines the Lambda artifacts you are deploying. The artifacts reach all target for which there is a provider option block for that function name. ```yaml artifacts: diff --git a/content/en/reference/deployment/config-file/targets.md b/content/en/reference/deployment/config-file/targets.md index c8168f7a..2095402a 100644 --- a/content/en/reference/deployment/config-file/targets.md +++ b/content/en/reference/deployment/config-file/targets.md @@ -192,7 +192,7 @@ targets: Optional -`targets..constraints.dependsOn`: A comma-separated list of deployments that must finish before this deployment can start. You can use this option to sequence deployments. Deployments with the same `dependsOn` criteria execute in parallel. For example, you can make it so that a deployment to prod cannot happen until a staging deployment finishes successfully. +`targets..constraints.dependsOn`: A list of deployments that must finish before this deployment can start. You can use this option to sequence deployments. Deployments with the same `dependsOn` criteria execute in parallel. For example, you can make it so that a deployment to prod cannot happen until a staging deployment finishes successfully. The following example shows a deployment to `prod-west` that cannot start until the `dev-west` target finishes: @@ -206,7 +206,9 @@ targets: namespace: overflow strategy: canary-wait-til-approved constraints: - dependsOn: ["dev-west"] + dependsOn: + - ITSec + - Audit ``` {{% /tab %}} @@ -219,7 +221,9 @@ targets: region: us-west-1 strategy: canary-wait-til-approved constraints: - dependsOn: ["dev-west"] + dependsOn: + - ITSec + - Audit ``` {{% /tab %}} @@ -412,7 +416,9 @@ targets: In this example, there are four targets: `dev`, `infosec`, `staging`, and `prod-west`. After you deploy code to `infosec` and `staging`, you want to run jobs against those targets. If either of those jobs fails, CD-as-a-Service does not deploy to `prod-west`. -`prod-west`'s `afterDeployment` conditions perform an analysis and call a webhook that sends a "deployment complete" notification. If the `analysis` condition fails, CD-as-a-Service rolls back the target deployment. +`prod-west`'s `afterDeployment` conditions perform an analysis and call a webhook that sends a "deployment complete" notification. + +>If the `analysis` condition fails, CD-as-a-Service does **not** roll back the prod-west deployment because the analysis condition is in an `afterdeployment` constraint. However, if you include the `analysis` step in your strategy and that `analysis` step fails, CD-as-a-Service **does** roll back the deployment. ```yaml targets: diff --git a/content/en/troubleshooting/lambda.md b/content/en/troubleshooting/lambda.md index a63edf76..7f1ec133 100644 --- a/content/en/troubleshooting/lambda.md +++ b/content/en/troubleshooting/lambda.md @@ -6,9 +6,11 @@ description: > Solutions for issues you might encounter while deploying AWS Lambda functions using the Armory CD-as-a-Service. --- +## AWS Lamba Troubleshooting +CD-as-a-Service returns errors thrown by AWS Lambda. If you encounter an error, be sure to check the AWS Lambda docs' [troubleshooting section](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html). -## InvalidParameterValueException +## InvalidParameterValueException / PermanentRedirect ```yaml AWSCreateLambdaError: operation error @@ -20,9 +22,7 @@ S3 Error Code: PermanentRedirect. S3 Error Message: The bucket is in this region: us-east-2. Please use this region to retry the request ``` -Duplicate functionName in deploy config file - -You need to have an S3 bucket with your function archive in the region you want to deploy your function to. +You need to have an S3 bucket with your function archive in the region you want to deploy your function to. This is an AWS constraint. For example (same AWS Account): @@ -34,6 +34,7 @@ For example (same AWS Account): | hello-world.zip | Prod: us-west-2 | us-west-2 | lambda-us-east-1 | s3://lambda-us-west-2/hello-world.zip | | hello-world.zip | Prod: eu-central-1 | eu-central-1 | lambda-eu-central-1 | s3://lambda-eu-central-1/hello-world.zip | +For more details, see the AWS Lambda [InvalidParameterValueException](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-deployment.html#troubleshooting-deployment-InvalidParameterValueException1) and [PermanentRedirect](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-deployment.html#troubleshooting-deployment-PermanentRedirect) troubleshooting docs. ## ResourceConflictException @@ -45,7 +46,6 @@ RequestID: 8027c7ee-0762-4027-a238-2c636a716d48, ResourceConflictException: Conflict due to concurrent requests on this function. Please try this request again. ``` - You see this error when you have concurrent deployments to same region. For example, deploying this config results in a `ResourceConflictException` error. The `staging` and `audit` targets both deploy to `us-east-2` and depend on `dev`, so CD-as-a-Service deploys them concurrently. From 78456e5246642535c342f6cec8dafa53a3524696 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Fri, 17 Nov 2023 14:57:25 -0600 Subject: [PATCH 14/28] move k8s overview to k8s folder; move create iam role to lambda folder --- content/en/_index.md | 6 +- content/en/deployment/kubernetes/_index.md | 7 +- .../overview/deploy-overview.jpg | Bin .../{ => kubernetes}/overview/index.md | 4 +- content/en/deployment/lambda/_index.md | 8 +++ .../{ => lambda}/create-iam-role-lambda.md | 2 +- .../deployment/lambda/{ => overview}/index.md | 0 .../lambda/{ => overview}/lambda-deploy.webp | Bin .../en/deployment/strategies/blue-green.md | 3 +- content/en/deployment/strategies/canary.md | 63 +++++++++++++++--- content/en/deployment/strategies/overview.md | 7 +- content/en/get-started/lambda/index.md | 2 +- content/en/includes/create-lambda-config.md | 3 +- .../deployment/config-file/targets.md | 4 +- 14 files changed, 84 insertions(+), 25 deletions(-) rename content/en/deployment/{ => kubernetes}/overview/deploy-overview.jpg (100%) rename content/en/deployment/{ => kubernetes}/overview/index.md (98%) create mode 100644 content/en/deployment/lambda/_index.md rename content/en/deployment/{ => lambda}/create-iam-role-lambda.md (97%) rename content/en/deployment/lambda/{ => overview}/index.md (100%) rename content/en/deployment/lambda/{ => overview}/lambda-deploy.webp (100%) diff --git a/content/en/_index.md b/content/en/_index.md index fd8913ac..bde976ed 100755 --- a/content/en/_index.md +++ b/content/en/_index.md @@ -24,12 +24,14 @@ description: > Modern software delivery requires sophisticated control of delivery speed and traffic management, as well as integration with external tools and verification processes. Software is rarely deployed to a single environment. Most workflows require promotion from one environment or region to another after meeting constraints such as test executions, manual approvals, CI workflows, and canary analysis. **CD-as-a-Service is a centralized control plane that encapsulates those features and enables deployment to multiple Kubernetes clusters using a secure Kubernetes agent architecture.** CD-as-a-Service supports multi-environment, multi-region app deployments with promotion constraints and advanced deployment strategies, such as canary and blue/green. -## Why you should use CD-as-a-Service +## Why you should use CD-as-a-Service for your Kubernetes deployments * **Native Kubernetes resources:** You create your Kubernetes manifests how you want - manually or by using a tool like Helm or Kustomize. * **Logicless Kubernetes agents in your clusters:** CD-as-a-Service's _Remote Network Agents (RNAs)_ act as simple network relays and provide the CD-as-a-Service control plane with Kubernetes ServiceAccount-based credentials. You don't need to open any ports to grant CD-as-a-Service deployment access to your Kubernetes clusters. * **Centralized business logic:** Deployment logic is encapsulated in the control plane. You get new features immediately without having to worry about edge maintenance -- no Remote Network Agent upgrade campaigns within your organization, no need to manage [Custom Resource Definitions (CRDs)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions). -* **Declarative deployment:** You define your software delivery requirements, traffic shaping, canary analysis, webhooks, and manual approvals in a [declarative deployment configuration file]({{< ref "deployment/overview.md" >}}). +* **Declarative deployment:** You define your software delivery requirements, traffic shaping, canary analysis, + webhooks, and manual approvals in a [declarative deployment configuration file]({{< ref + "deployment/kubernetes/overview.md" >}}). * **Integration with your existing SDLC:** You build and publish your containers where and how you want, whether you use Docker Hub or a private registry that is only accessible in your network. {{< include "cdaas-explained-how.md" >}} diff --git a/content/en/deployment/kubernetes/_index.md b/content/en/deployment/kubernetes/_index.md index 5842e4e5..c9113c7c 100644 --- a/content/en/deployment/kubernetes/_index.md +++ b/content/en/deployment/kubernetes/_index.md @@ -1,9 +1,8 @@ --- -title: Kubernetes +title: Kubernetes Deployments Using Armory CD-as-a-Service linkTitle: Kubernetes -weight: 100 -no_list: false +weight: 1 exclude_search: true description: > - In this section, learn how to use Argo Rollouts with CD-as-a-Service. Also, learn how CD-as-a-Service implements Horizontal Pod Autoscaling when it's part of your deployment. + In this section, learn about Kubernetes deployments using CD-as-a-Service, how to use Argo Rollouts with CD-as-a-Service. Also, learn how CD-as-a-Service implements Horizontal Pod Autoscaling when it's part of your deployment. --- diff --git a/content/en/deployment/overview/deploy-overview.jpg b/content/en/deployment/kubernetes/overview/deploy-overview.jpg similarity index 100% rename from content/en/deployment/overview/deploy-overview.jpg rename to content/en/deployment/kubernetes/overview/deploy-overview.jpg diff --git a/content/en/deployment/overview/index.md b/content/en/deployment/kubernetes/overview/index.md similarity index 98% rename from content/en/deployment/overview/index.md rename to content/en/deployment/kubernetes/overview/index.md index 493567f4..7b84fa8c 100644 --- a/content/en/deployment/overview/index.md +++ b/content/en/deployment/kubernetes/overview/index.md @@ -4,8 +4,8 @@ linktitle: Kubernetes Overview weight: 1 description: > Learn what an Armory CD-as-a-Service deployment to Kubernetes is and how it works - strategies (blue/green, canary) and constraints for deploying your app to your target Kubernetes clusters. -categories: ["Canary Analysis", "Features", "Concepts"] -tags: ["Deploy Strategy", "Canary", "Blue/Green", "Kubernetes"] +aliases: + - /deployment/overview/ --- ## What a deployment is diff --git a/content/en/deployment/lambda/_index.md b/content/en/deployment/lambda/_index.md new file mode 100644 index 00000000..938170dc --- /dev/null +++ b/content/en/deployment/lambda/_index.md @@ -0,0 +1,8 @@ +--- +title: AWS Lambda Deployments Using Armory CD-as-a-Service +linkTitle: AWS Lambda +weight: 1 +exclude_search: true +description: > + In this section, learn about AWS Lambda deployments using CD-as-a-Service. +--- \ No newline at end of file diff --git a/content/en/deployment/create-iam-role-lambda.md b/content/en/deployment/lambda/create-iam-role-lambda.md similarity index 97% rename from content/en/deployment/create-iam-role-lambda.md rename to content/en/deployment/lambda/create-iam-role-lambda.md index d9926fed..1b1bdbc4 100644 --- a/content/en/deployment/create-iam-role-lambda.md +++ b/content/en/deployment/lambda/create-iam-role-lambda.md @@ -1,7 +1,7 @@ --- title: Create an Armory IAM Role for AWS Lambda Deployment linkTitle: Create Armory IAM Role -weight: 2 +weight: 5 description: > Create the Armory IAM Role that CD-as-a-Service assumes when it deploys your AWS Lambda function. --- diff --git a/content/en/deployment/lambda/index.md b/content/en/deployment/lambda/overview/index.md similarity index 100% rename from content/en/deployment/lambda/index.md rename to content/en/deployment/lambda/overview/index.md diff --git a/content/en/deployment/lambda/lambda-deploy.webp b/content/en/deployment/lambda/overview/lambda-deploy.webp similarity index 100% rename from content/en/deployment/lambda/lambda-deploy.webp rename to content/en/deployment/lambda/overview/lambda-deploy.webp diff --git a/content/en/deployment/strategies/blue-green.md b/content/en/deployment/strategies/blue-green.md index 6359c5aa..bbc4ef30 100644 --- a/content/en/deployment/strategies/blue-green.md +++ b/content/en/deployment/strategies/blue-green.md @@ -24,7 +24,8 @@ A blue/green strategy shifts traffic from the running version of your software ( ## {{% heading "prereq" %}} -Before configuring a blue/green strategy in your [deployment]({{< ref "deployment/overview" >}}), you should have the following: +Before configuring a blue/green strategy in your [Kubernetes deployment]({{< ref "deployment/kubernetes/overview" >}}), +you should have the following: * Kubernetes Deployment object diff --git a/content/en/deployment/strategies/canary.md b/content/en/deployment/strategies/canary.md index e856b974..c8d19701 100644 --- a/content/en/deployment/strategies/canary.md +++ b/content/en/deployment/strategies/canary.md @@ -33,7 +33,8 @@ When using a canary strategy with a service mesh such as Istio or Linkerd, CD-as ## {{% heading "prereq" %}} -Before configuring a canary strategy in your [deployment]({{< ref "deployment/overview" >}}), you should have the following: +Before configuring a canary strategy in your [Kubernetes deployment]({{< ref "deployment/kubernetes/overview" >}}), you +should have the following: * Kubernetes Deployment object @@ -88,7 +89,19 @@ targets: You can define different canary strategies for different deployment targets. -## Example deployment config file +## Using canary strategies with a service mesh + +Service meshes enable setting up accurate traffic splits between the new version and the old version of your app. If you are using a service mesh, you need to add a `trafficManagement` block to your deployment config. + +```yaml +trafficManagement: + - istio: + ... +``` +For more info on using service meshes, see the [Traffic Management Overview]({{< ref "traffic-management/overview.md" >}}), which explains how CD-as-a-Service implements progressive canary deployment using an SMI TrafficSplit. + + +## Example Kubernetes deployment config file In this basic example, you deploy an app called "sample-app" to two deployment targets. @@ -180,16 +193,48 @@ spec: ``` -## Using canary strategies with a service mesh - -Service meshes enable setting up accurate traffic splits between the new version and the old version of your app. If you are using a service mesh, you need to add a `trafficManagement` block to your deployment config. +## Example AWS Lambda deployment config ```yaml -trafficManagement: - - istio: - ... +version: v1 +kind: lambda +application: Sweet Potato Lambda +description: Sweet Potato facts from a Lambda function +deploymentConfig: + timeout: + unit: minutes + duration: 10 +targets: + dev: + account: armory-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-2 + strategy: trafficSplit + +strategies: + trafficSplit: + canary: + steps: + - setWeight: 10 + - pause: + untilApproved: true + - setWeight: 20 + - pause: + untilApproved: true + - setWeight: 100 +artifacts: + - functionName: just-sweet-potatoes + path: s3://armory-docs-dev-us-east-2/justsweetpotatoes.zip + type: zipFile + +providerOptions: + lambda: + - name: just-sweet-potatoes + target: dev + runAsIamRole: arn:aws:iam::111111111111:role/LamdaExecutionRole + handler: index.handler + runtime: nodejs18.x ``` -For more info on using service meshes, see the [Traffic Management Overview]({{< ref "traffic-management/overview.md" >}}), which explains how CD-as-a-Service implements progressive canary deployment using an SMI TrafficSplit. ## {{% heading "nextSteps" %}} diff --git a/content/en/deployment/strategies/overview.md b/content/en/deployment/strategies/overview.md index 62cd0f76..9f5b02a1 100644 --- a/content/en/deployment/strategies/overview.md +++ b/content/en/deployment/strategies/overview.md @@ -4,13 +4,14 @@ linktitle: Overview weight: 1 description: > Learn about blue/green and canary deployment strategies for deploying your apps to Kubernetes using Armory CD-as-a-Service. Compare features to decide which strategy fits your use case. -categories: ["Deployment Strategies", "Features", "Concepts"] -tags: ["Canary", "Blue/Green"] --- ## {{% heading "prereq" %}} -You are familiar with [what a deployment is]({{< ref "deployment/overview" >}}) and the elements of a deployment. +You are familiar with the following deployments and the elements that comprise each type: + +* [AWS Lambda deployment]({{< ref "deployment/lambda/overview" >}}) +* [Kubernetes deployment]({{< ref "deployment/kubernetes/overview" >}}) ## What is a deployment strategy? diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 18841201..6fea568e 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -10,7 +10,7 @@ weight: 2 ## {{% heading "prereq" %}} * You are familiar with CD-as-a-Service's [key components]({{< ref "architecture.md" >}}). -* You have read the {{< linkWithTitle "deployment/lambda/index.md" >}}. +* You have read the {{< linkWithTitle "deployment/lambda/overview/index.md" >}}. * AWS requirements: * You need an [AWS Account](https://aws.amazon.com/free/), and you must have authority to create an IAM Role. * You should be familiar with [AWS Lambda](https://aws.amazon.com/lambda/). diff --git a/content/en/includes/create-lambda-config.md b/content/en/includes/create-lambda-config.md index c4d0fa98..a322c93a 100644 --- a/content/en/includes/create-lambda-config.md +++ b/content/en/includes/create-lambda-config.md @@ -36,7 +36,8 @@ - `targets.`: A descriptive name for your deployment. * `account`: A descriptive name for the AWS Account this target resides in, such as `armory-docs-dev`. - * `deployAsIamRole`: The ARN of the [ArmoryRole]({{< ref "deployment/create-iam-role-lambda" >}}) that CD-as-a-Service assumes to deploy your function. + * `deployAsIamRole`: The ARN of the [ArmoryRole]({{< ref "deployment/lambda/create-iam-role-lambda" >}}) that + CD-as-a-Service assumes to deploy your function. * `region`: The AWS Region to deploy your function to. * `artifacts` diff --git a/content/en/reference/deployment/config-file/targets.md b/content/en/reference/deployment/config-file/targets.md index 2095402a..6fa8fed3 100644 --- a/content/en/reference/deployment/config-file/targets.md +++ b/content/en/reference/deployment/config-file/targets.md @@ -116,7 +116,9 @@ Prod-West-1: ### Deploy as IAM Role -`targets..deployAsIamRole`: The ARN of the [ArmoryRole]({{< ref "deployment/create-iam-role-lambda" >}}) that CD-as-a-Service assumes to deploy your function. +`targets..deployAsIamRole`: The ARN of the [ArmoryRole]({{< ref "deployment/lambda/create-iam-role-lambda" + >}}) +that CD-as-a-Service assumes to deploy your function. ```yaml Prod-West-1: From 1b19624110aebea0f951a0e9daf6197c8a29bbed Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Fri, 17 Nov 2023 15:10:48 -0600 Subject: [PATCH 15/28] nits --- content/en/deployment/create-deploy-config.md | 4 +--- content/en/deployment/kubernetes/overview/index.md | 2 +- content/en/deployment/lambda/overview/index.md | 2 +- content/en/deployment/strategies/_index.md | 2 +- content/en/get-started/lambda/index.md | 2 +- content/en/includes/lambda/iam-role-steps.md | 2 +- 6 files changed, 6 insertions(+), 8 deletions(-) diff --git a/content/en/deployment/create-deploy-config.md b/content/en/deployment/create-deploy-config.md index 5c2125e9..a60b172f 100644 --- a/content/en/deployment/create-deploy-config.md +++ b/content/en/deployment/create-deploy-config.md @@ -1,9 +1,7 @@ --- title: Create a Deployment Config File linkTitle: Create Deploy Config -weight: 2 -categories: ["Deployment", "Guides"] -tags: ["Deploy Config"] +weight: 3 description: > Create a config file to deploy your app to your Kubernetes cluster using CD-as-a-Service. --- diff --git a/content/en/deployment/kubernetes/overview/index.md b/content/en/deployment/kubernetes/overview/index.md index 7b84fa8c..df665d05 100644 --- a/content/en/deployment/kubernetes/overview/index.md +++ b/content/en/deployment/kubernetes/overview/index.md @@ -1,6 +1,6 @@ --- title: Kubernetes Deployment Overview -linktitle: Kubernetes Overview +linktitle: Overview weight: 1 description: > Learn what an Armory CD-as-a-Service deployment to Kubernetes is and how it works - strategies (blue/green, canary) and constraints for deploying your app to your target Kubernetes clusters. diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index e74682aa..029341ff 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -1,6 +1,6 @@ --- title: AWS Lambda Deployment Overview -linktitle: AWS Lambda Overview +linktitle: Overview weight: 1 description: > Learn what an Armory CD-as-a-Service deployment to AWS Lambda is, how CD-as-a-Service connects to your AWS Account, and how deployment works. diff --git a/content/en/deployment/strategies/_index.md b/content/en/deployment/strategies/_index.md index 81fd35aa..7f419097 100644 --- a/content/en/deployment/strategies/_index.md +++ b/content/en/deployment/strategies/_index.md @@ -1,7 +1,7 @@ --- title: Canary and Blue/Green Deployment Strategies linktitle: Strategies -weight: 3 +weight: 2 no_list: false exclude_search: true description: > diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 6fea568e..770143b9 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -202,7 +202,7 @@ Replace: * `` with the ARN of the role you created in the [Create the Armory IAM role](#create-the-armory-iam-role) section -### Add lambda artifacts +### Add Lambda artifacts In this section, you declare your Lambda function artifacts. You have an entry for each deployment region. diff --git a/content/en/includes/lambda/iam-role-steps.md b/content/en/includes/lambda/iam-role-steps.md index ed8db523..bb3e6c23 100644 --- a/content/en/includes/lambda/iam-role-steps.md +++ b/content/en/includes/lambda/iam-role-steps.md @@ -5,7 +5,7 @@ armory aws create-role ``` - Type "Y" in the terminal to continue with Stack creation. This opens your browser to the CloudFormation page of your AWS Console. You complete the rest of this process in your browser. + Type `Y` in the terminal to continue with Stack creation. This opens your browser to the CloudFormation page of your AWS Console. You complete the rest of this process in your browser. 1. Review the resources that CD-as-a-Service is creating in your AWS account. The default IAM Role name is **ArmoryRole**. 1. Click **Create** on the AWS CloudFormation page and wait for Stack creation to finish. From 81808f788fbfe5eb74bc3948aad2ee03a5776e03 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Tue, 21 Nov 2023 12:34:04 -0600 Subject: [PATCH 16/28] add traffic management for traffic split --- .../en/deployment/lambda/overview/index.md | 14 +++- .../k8s-skeleton.yaml} | 0 .../lambda-skeleton.yaml} | 5 ++ .../code/lambda-traffic-split-snippet.yaml | 49 +++++++++++++ .../includes/dep-file/k8s-skeleton-config.md | 2 +- .../dep-file/lambda-provider-options.md | 2 +- .../dep-file/lambda-skeleton-config.md | 2 +- .../deployment/config-file/artifacts.md | 2 +- .../deployment/config-file/targets.md | 71 ++++++++++--------- .../config-file/traffic-management.md | 23 ++++-- 10 files changed, 126 insertions(+), 44 deletions(-) rename content/en/includes/{dep-file/k8s-example.yaml => code/k8s-skeleton.yaml} (100%) rename content/en/includes/{dep-file/lambda-example.yaml => code/lambda-skeleton.yaml} (93%) create mode 100644 content/en/includes/code/lambda-traffic-split-snippet.yaml diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index 029341ff..9951c0a9 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -304,9 +304,11 @@ providerOptions: A deployment strategy is the method by which CD-as-a-Service deploys your changes to a target. Strategies can use different techniques to allow for rapid rollback should a problem be discovered, minimizing the impact of potential issues to a small subset of users. You could also use a strategy optimized for speed. -For Lambda, CD-as-a-Service supports a canary deployment strategy, which involves releasing a new software version to a small subset of users or systems while leaving the majority on the current version. This strategy allows for real-world testing and monitoring of the new version's performance and stability. +For AWS Lambda, CD-as-a-Service supports a canary deployment strategy, which involves releasing a new software version to a small subset of users or systems while leaving the majority on the current version. This strategy allows for real-world testing and monitoring of the new version's performance and stability. If the canary users experience positive results, the new version can be gradually rolled out to a wider audience. +This example deploys 100% to the target. You'd use this `allAtOnce` strategy to initially deploy your function to AWS Lambda when the function does not exist in the AWS Lambda console. + ```yaml strategies: allAtOnce: @@ -316,7 +318,17 @@ strategies: weight: 100 ``` +For subsequent deployments, you could use a canary strategy that splits traffic. CD-as-a-Service uses your function's AWS Lambda [alias](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) when splitting traffic between versions. + +>You must create the alias in the AWS Lambda console before using the alias in your CD-as-a-Service deployment. + +This example uses a canary strategy that splits traffic. You declare your function's alias in the `trafficManagement` section. There are two entries in the `trafficeManagement` section since both staging and prod targets use the traffic split strategy. + +{{< readfile file="/includes/code/lambda-traffic-split-snippet.yaml" code="true" lang="yaml" >}} + + ## {{% heading "nextSteps" %}} * Work through the [AWS Lambda Quickstart]({{< ref "get-started/lambda" >}}) to deploy a sample function to your AWS Account. * Learn how you can [monitor your deployment]({{< ref "deployment/monitor-deployment" >}}) using the UI or the CLI. +* View the deployment config file [reference]({{< ref "reference/deployment/config-file" >}}). diff --git a/content/en/includes/dep-file/k8s-example.yaml b/content/en/includes/code/k8s-skeleton.yaml similarity index 100% rename from content/en/includes/dep-file/k8s-example.yaml rename to content/en/includes/code/k8s-skeleton.yaml diff --git a/content/en/includes/dep-file/lambda-example.yaml b/content/en/includes/code/lambda-skeleton.yaml similarity index 93% rename from content/en/includes/dep-file/lambda-example.yaml rename to content/en/includes/code/lambda-skeleton.yaml index 12369049..e507f3ea 100644 --- a/content/en/includes/dep-file/lambda-example.yaml +++ b/content/en/includes/code/lambda-skeleton.yaml @@ -34,6 +34,11 @@ strategies: weight: 100 - runWebhook: name: +trafficManagement: + - alias: + - function: + aliasName: + targets: [""] analysis: defaultMetricProviderName: queries: diff --git a/content/en/includes/code/lambda-traffic-split-snippet.yaml b/content/en/includes/code/lambda-traffic-split-snippet.yaml new file mode 100644 index 00000000..09edc8c3 --- /dev/null +++ b/content/en/includes/code/lambda-traffic-split-snippet.yaml @@ -0,0 +1,49 @@ +targets: + prod-us-east-1: + account: armory-docs-dev + region: us-east-1 + deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" + strategy: trafficSplit + staging-us-east-2: + account: armory-docs-dev + region: us-east-2 + deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" + strategy: trafficSplit +artifacts: + - functionName: just-sweet-potatoes-us-east-1 + path: s3://armory-demo-east-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-us-east-2 + path: s3://armory-demo-east-2/just-sweet-potatoes.zip + type: zipFile +strategies: + trafficSplit: + canary: + steps: + - setWeight: + weight: 25 + - pause: + untilApproved: true + - setWeight: + weight: 100 +trafficManagement: + - targets: ['prod-us-east-1'] + alias: + - function: just-sweet-potatoes-us-east-1 + aliasName: latest-version + - targets: ['staging-us-east-2'] + alias: + - function: just-sweet-potatoes-us-east-2 + aliasName: latest-version +providerOptions: + lambda: + - name: just-sweet-potatoes-us-east-1 + target: prod-us-east-1 + runAsIamRole: "arn:aws:iam::111111111111:role/LambdaExecutionRole" + handler: index.handler + runtime: nodejs18.x + - name: just-sweet-potatoes-us-east-2 + target: staging-us-east-2 + runAsIamRole: "arn:aws:iam::111111111111:role/LambdaExecutionRole" + handler: index.handler + runtime: nodejs18.x diff --git a/content/en/includes/dep-file/k8s-skeleton-config.md b/content/en/includes/dep-file/k8s-skeleton-config.md index 8a8d8dcb..9c06338a 100644 --- a/content/en/includes/dep-file/k8s-skeleton-config.md +++ b/content/en/includes/dep-file/k8s-skeleton-config.md @@ -2,5 +2,5 @@ Expand to see a skeleton config file for a deployment to Kubernetes. All all con

Click to view a skeleton deployment config file
-{{< readfile file="/includes/dep-file/k8s-example.yaml" code="true" lang="yaml" >}} +{{< readfile file="/includes/code/k8s-skeleton.yaml" code="true" lang="yaml" >}}
\ No newline at end of file diff --git a/content/en/includes/dep-file/lambda-provider-options.md b/content/en/includes/dep-file/lambda-provider-options.md index 5ebd3a75..c71c983b 100644 --- a/content/en/includes/dep-file/lambda-provider-options.md +++ b/content/en/includes/dep-file/lambda-provider-options.md @@ -1,5 +1,5 @@ * `target`: CD-as-a-Service deployment [target]({{< ref "reference/deployment/config-file/targets" >}}) name -* `name`: This is the same value as `artifacts.functionName` for the target region. This function name appears on your AWS Lambda **Functions** list page. +* `name`: This is the same value as `artifacts.functionName` and `trafficManagement.alias.function` for the target region. This function name appears on your AWS Lambda **Functions** list page. * `runAsIamRole`: Replace `` with the ARN of your [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), which is **not** the ArmoryRole ARN. * `handler`: The function's handler method, such as `index.handler`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. * `runtime`: [runtime identifier](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html), such as `python3.22` or `nodejs18.x`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. diff --git a/content/en/includes/dep-file/lambda-skeleton-config.md b/content/en/includes/dep-file/lambda-skeleton-config.md index 4f0b684f..67761065 100644 --- a/content/en/includes/dep-file/lambda-skeleton-config.md +++ b/content/en/includes/dep-file/lambda-skeleton-config.md @@ -2,5 +2,5 @@ Expand to see a skeleton config file for a deployment to AWS Lambda. All all con
Click to view a skeleton deployment config file
-{{< readfile file="/includes/dep-file/lambda-example.yaml" code="true" lang="yaml" >}} +{{< readfile file="/includes/code/lambda-skeleton.yaml" code="true" lang="yaml" >}}
\ No newline at end of file diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md index 3180a86e..94d5bc0f 100644 --- a/content/en/reference/deployment/config-file/artifacts.md +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -17,7 +17,7 @@ artifacts: type: zipFile ``` -* `functionName`: A unique name for each entry in the `artifacts` collection +* `functionName`: A unique name for each entry in the `artifacts` collection. You also use this value for `providerOptions.lambda.name` and `trafficManagement.alias.function`. * `path`: The S3 path to your function's zip file * `type`: This value is always `zipFile`. CD-as-a-Service does not support deploying Lambda containers. diff --git a/content/en/reference/deployment/config-file/targets.md b/content/en/reference/deployment/config-file/targets.md index 6fa8fed3..e447385d 100644 --- a/content/en/reference/deployment/config-file/targets.md +++ b/content/en/reference/deployment/config-file/targets.md @@ -62,40 +62,6 @@ targets: Read more about how this config is defined and used in the [strategies]({{< ref "reference/deployment/config-file/strategies" >}}) section. -## Kubernetes fields - -### Account (cluster) - -`targets..account`: The account name that a target Kubernetes cluster got assigned when you installed the Remote Network Agent (RNA) on it. Specifically, it is the value for the `agentIdentifier` parameter. Note that older versions of the RNA used the `agent-k8s.accountName` parameter. - -This name must match an existing cluster because Armory CD-as-a-Service uses the identifier to determine which cluster to deploy to. - -For example, this snippet configures a deployment to an environment named `prod` that is hosted on a cluster named `prod-cluster-west`: - -```yaml -targets: - prod: - account: prod-cluster-west -... -``` - -### Namespace - -`targets..namespace` - -Optional but recommended - -The namespace on the target Kubernetes cluster that you want to deploy to. This field overrides any namespaces defined in your manifests. - -For example, this snippet overrides the namespace in your manifest and deploys the app to a namespace called `overflow`: - -```yaml -targets: - prod: - account: prod-cluster-west - namespace: overflow -``` - ## AWS Lambda fields ```yaml @@ -131,9 +97,44 @@ Prod-West-1: ```yaml Prod-West-1: - region: us-east-1 + region: us-west-1 ``` +## Kubernetes fields + +### Account (cluster) + +`targets..account`: The account name that a target Kubernetes cluster got assigned when you installed the Remote Network Agent (RNA) on it. Specifically, it is the value for the `agentIdentifier` parameter. Note that older versions of the RNA used the `agent-k8s.accountName` parameter. + +This name must match an existing cluster because Armory CD-as-a-Service uses the identifier to determine which cluster to deploy to. + +For example, this snippet configures a deployment to an environment named `prod` that is hosted on a cluster named `prod-cluster-west`: + +```yaml +targets: + prod: + account: prod-cluster-west +... +``` + +### Namespace + +`targets..namespace` + +Optional but recommended + +The namespace on the target Kubernetes cluster that you want to deploy to. This field overrides any namespaces defined in your manifests. + +For example, this snippet overrides the namespace in your manifest and deploys the app to a namespace called `overflow`: + +```yaml +targets: + prod: + account: prod-cluster-west + namespace: overflow +``` + + ## Constraints Optional diff --git a/content/en/reference/deployment/config-file/traffic-management.md b/content/en/reference/deployment/config-file/traffic-management.md index 20394d5d..bd0d508b 100644 --- a/content/en/reference/deployment/config-file/traffic-management.md +++ b/content/en/reference/deployment/config-file/traffic-management.md @@ -1,22 +1,37 @@ --- title: Traffic Management Config description: > - Declare Istio or Linkerd traffic management for all or specific Kubernetes targets. Configure Istio settings such as virtual service and destination rule. Configure Linkerd settings like root service, canary service, active service, and traffic split. + Declare AWS Lambda aliases. Declare Istio or Linkerd traffic management for all or specific Kubernetes targets. Configure Istio settings such as virtual service and destination rule. Configure Linkerd settings like root service, canary service, active service, and traffic split. --- ## Traffic management section -**Kubernetes Only** - `trafficManagement.` -You configure your service mesh per target in this section. If you omit the `target` entry, CD-as-a-Service applies the config to all targets. +## AWS Lambda + +You declare your AWS Lambda alias per target in this section. CD-as-a-Service uses [aliases](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) when routing traffic from the previous version to the latest version of your function. ```yaml trafficManagement: - targets: [""] + alias: + - function: + aliasName: ``` +* `targets`: the target name +* `function`: This is the same value as `artifacts.functionName` and `providerOptions.lambda.name`. See {{< linkWithTitle "reference/deployment/config-file/artifacts.md" >}} for details on those sections. +* `aliasName`: The alias name, such as "latest-version". Your function's alias must already exist in the AWS Lambda console. + +This example declares a traffic split canary strategy. You must declare your function's alias for each deployment target that uses the traffic split strategy. + +{{< readfile file="/includes/code/lambda-traffic-split-snippet.yaml" code="true" lang="yaml" >}} + +## Kubernetes + +You configure your service mesh per target in this section. + ### SMI targets `trafficManagement.targets.smi` From 24779bc9b5eb0607a0136c5b44f39cea5605ecd5 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Tue, 21 Nov 2023 15:33:11 -0600 Subject: [PATCH 17/28] fix typo --- content/en/get-started/lambda/index.md | 129 +++++++++++++++++++++---- 1 file changed, 110 insertions(+), 19 deletions(-) diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 770143b9..8ababd17 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -257,9 +257,7 @@ providerOptions: {{< include "dep-file/lambda-provider-options.md" >}} -## Deploy the sample function - -### First deployment +## Deploy your function Start your deployment using the CLI: @@ -271,7 +269,23 @@ You can use the link provided by the CLI to observe your deployment's progressio {{< figure src="deploy-details.webp" width="80%" height="80%" >}} -### Second deployment +## Test the deployed function + +Go to the `us-east-1` Lamba section of your AWS Account. You should see your deployed `just-sweet-potatoes-dev` function there. + +{{< figure src="deployed-function-list.webp" width="80%" height="80%" >}} + + +1. Click `just-sweet-potatoes-dev` to open the function's details page. +1. Click the **Test** tab. +1. Click the **Test** button in the **Test event** section to test the function. +1. Expand the **Details** section to see the test results. + + {{< figure src="function-test.webp" >}} + +## Update the deployment config file + +### Add target constraints CD-as-a-Service is designed to help you build safety into your app deployment process. It does so by giving you declarative levers to control the scope of your deployment. @@ -282,7 +296,7 @@ CD-as-a-Service has four kinds of constraints that you can use to control your d - [External Automation (Webhooks)]({{< ref "webhooks/overview.md" >}}) to run integration tests and security audits or send notifications - [Automated Canary Analysis]({{< ref "deployment/strategies/canary" >}}) -You can use these constraints between environments and within environments. During your next deployment, you need to issue a manual approval before deploying to to the prod targets. Add a `beforeDeployment` constraint for a manual judgment to your `staging` target: +You can use these constraints between environments and within environments. For your next deployment, you are going to add a manual approval before deploying to the prod targets. Add an `afterDeployment` constraint for a manual judgment to your `staging` target: {{< highlight yaml "linenos=table,hl_lines=15-17" >}} targets: @@ -306,7 +320,7 @@ targets: account: deployAsIamRole: region: us-west-1 - strategy: allAtOnce + strategy: trafficSplit constraints: dependsOn: - staging @@ -314,12 +328,101 @@ targets: account: deployAsIamRole: region: us-west-2 - strategy: allAtOnce + strategy: trafficSplit constraints: dependsOn: - staging {{< /highlight>}} +### Add a traffic split canary strategy + +In addition to a manual approval, you're going to add a traffic split strategy to use for the prod targets. The strategy deploys 25%, pauses for manual approval, and then deploys 100%. + +Add to the `strategies` section: + +{{< highlight yaml "linenos=table,hl_lines=7-15" >}} +strategies: + allAtOnce: + canary: + steps: + - setWeight: + weight: 100 + trafficSplit: + canary: + steps: + - setWeight: + weight: 25 + - pause: + untilApproved: true + - setWeight: + weight: 100 +{{< /highlight >}} + +Then update your `targets` section, replacing `allAtOnce` with `trafficSplit` for the prod targets. + +{{< highlight yaml "linenos=table,hl_lines=19 27" >}} +targets: + dev: + account: + deployAsIamRole: + region: us-east-1 + strategy: allAtOnce + staging: + account: + deployAsIamRole: + region: us-east-2 + strategy: allAtOnce + constraints: + dependsOn: + - dev + prod-west-1: + account: + deployAsIamRole: + region: us-west-1 + strategy: trafficSplit + constraints: + dependsOn: + - staging + prod-west-2: + account: + deployAsIamRole: + region: us-west-2 + strategy: trafficSplit + constraints: + dependsOn: + - staging +{{< /highlight >}} + + +#### Create an AWS Lambda alias + +CD-as-a-Service uses an AWS Lambda [alias](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) when routing traffic between old and new versions of your function. Before you can use use the `trafficSplit` strategy, create an AWS Lambda alias for the functions you deployed to `prod-west-1` and `prod-west-2`. + +In your AWS Lambda console, make sure you are in region `us-west-1`. Access the details page for `just-sweet-potatoes-prod-west-1`. Open the **Aliases** section, then create an alias with the following values: + +1. **Name**: `latest-version` +1. **Version**: `$LATEST` + +Repeat for the `just-sweet-potatoes-prod-west-2` function. + +#### Add traffic management info + +Now that you've created aliases, you need to declare those in a new `trafficManagement` section so CD-as-a-Service can perform the traffic split strategy. Add the following top-level section to your deployment config file: + +{{< highlight yaml "linenos=table,hl_lines=19 27" >}} +trafficManagement: + - targets: ['prod-west-1'] + alias: + - function: just-sweet-potatoes-us-west-1 + aliasName: latest-version + - targets: ['prod-west-2'] + alias: + - function: just-sweet-potatoes-us-west-2 + aliasName: latest-version +{{< /highlight >}} + + +## Deploy your function for a second time Start your second deployment using the CLI: @@ -333,19 +436,7 @@ In this second deployment, you see that CD-as-a-Service paused deployment to pro {{< figure src="manual-constraint.webp" width="80%" height="80%" >}} -## Test the deployed function - -Go to the `us-east-1` Lamba section of your AWS Account. You should see your deployed `just-sweet-potatoes-dev` function there. - -{{< figure src="deployed-function-list.webp" width="80%" height="80%" >}} - -1. Click `just-sweet-potatoes-dev` to open the function's details page. -1. Click the **Test** tab. -1. Click the **Test** button in the **Test event** section to test the function. -1. Expand the **Details** section to see the test results. - - {{< figure src="function-test.webp" >}} ## Clean up From 392f6b778e272d148d39259ad20b13cba7f64f98 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Tue, 21 Nov 2023 15:44:49 -0600 Subject: [PATCH 18/28] revert get started to before traffic split content --- .../en/deployment/lambda/overview/index.md | 2 +- content/en/get-started/lambda/index.md | 131 +++--------------- 2 files changed, 21 insertions(+), 112 deletions(-) diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index 9951c0a9..2f16429b 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -322,7 +322,7 @@ For subsequent deployments, you could use a canary strategy that splits traffic. >You must create the alias in the AWS Lambda console before using the alias in your CD-as-a-Service deployment. -This example uses a canary strategy that splits traffic. You declare your function's alias in the `trafficManagement` section. There are two entries in the `trafficeManagement` section since both staging and prod targets use the traffic split strategy. +This example uses a canary strategy that splits traffic. You declare your function's alias in the `trafficManagement` section. There are two entries in the `trafficManagement` section since both staging and prod targets use the traffic split strategy. {{< readfile file="/includes/code/lambda-traffic-split-snippet.yaml" code="true" lang="yaml" >}} diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 8ababd17..a88b8535 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -257,7 +257,9 @@ providerOptions: {{< include "dep-file/lambda-provider-options.md" >}} -## Deploy your function +## Deploy the sample function + +### First deployment Start your deployment using the CLI: @@ -269,23 +271,7 @@ You can use the link provided by the CLI to observe your deployment's progressio {{< figure src="deploy-details.webp" width="80%" height="80%" >}} -## Test the deployed function - -Go to the `us-east-1` Lamba section of your AWS Account. You should see your deployed `just-sweet-potatoes-dev` function there. - -{{< figure src="deployed-function-list.webp" width="80%" height="80%" >}} - - -1. Click `just-sweet-potatoes-dev` to open the function's details page. -1. Click the **Test** tab. -1. Click the **Test** button in the **Test event** section to test the function. -1. Expand the **Details** section to see the test results. - - {{< figure src="function-test.webp" >}} - -## Update the deployment config file - -### Add target constraints +### Second deployment CD-as-a-Service is designed to help you build safety into your app deployment process. It does so by giving you declarative levers to control the scope of your deployment. @@ -296,7 +282,7 @@ CD-as-a-Service has four kinds of constraints that you can use to control your d - [External Automation (Webhooks)]({{< ref "webhooks/overview.md" >}}) to run integration tests and security audits or send notifications - [Automated Canary Analysis]({{< ref "deployment/strategies/canary" >}}) -You can use these constraints between environments and within environments. For your next deployment, you are going to add a manual approval before deploying to the prod targets. Add an `afterDeployment` constraint for a manual judgment to your `staging` target: +You can use these constraints between environments and within environments. During your next deployment, you need to issue a manual approval before deploying to to the prod targets. Add a `beforeDeployment` constraint for a manual judgment to your `staging` target: {{< highlight yaml "linenos=table,hl_lines=15-17" >}} targets: @@ -320,66 +306,7 @@ targets: account: deployAsIamRole: region: us-west-1 - strategy: trafficSplit - constraints: - dependsOn: - - staging - prod-west-2: - account: - deployAsIamRole: - region: us-west-2 - strategy: trafficSplit - constraints: - dependsOn: - - staging -{{< /highlight>}} - -### Add a traffic split canary strategy - -In addition to a manual approval, you're going to add a traffic split strategy to use for the prod targets. The strategy deploys 25%, pauses for manual approval, and then deploys 100%. - -Add to the `strategies` section: - -{{< highlight yaml "linenos=table,hl_lines=7-15" >}} -strategies: - allAtOnce: - canary: - steps: - - setWeight: - weight: 100 - trafficSplit: - canary: - steps: - - setWeight: - weight: 25 - - pause: - untilApproved: true - - setWeight: - weight: 100 -{{< /highlight >}} - -Then update your `targets` section, replacing `allAtOnce` with `trafficSplit` for the prod targets. - -{{< highlight yaml "linenos=table,hl_lines=19 27" >}} -targets: - dev: - account: - deployAsIamRole: - region: us-east-1 - strategy: allAtOnce - staging: - account: - deployAsIamRole: - region: us-east-2 strategy: allAtOnce - constraints: - dependsOn: - - dev - prod-west-1: - account: - deployAsIamRole: - region: us-west-1 - strategy: trafficSplit constraints: dependsOn: - staging @@ -387,42 +314,12 @@ targets: account: deployAsIamRole: region: us-west-2 - strategy: trafficSplit + strategy: allAtOnce constraints: dependsOn: - staging -{{< /highlight >}} - - -#### Create an AWS Lambda alias - -CD-as-a-Service uses an AWS Lambda [alias](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) when routing traffic between old and new versions of your function. Before you can use use the `trafficSplit` strategy, create an AWS Lambda alias for the functions you deployed to `prod-west-1` and `prod-west-2`. - -In your AWS Lambda console, make sure you are in region `us-west-1`. Access the details page for `just-sweet-potatoes-prod-west-1`. Open the **Aliases** section, then create an alias with the following values: - -1. **Name**: `latest-version` -1. **Version**: `$LATEST` - -Repeat for the `just-sweet-potatoes-prod-west-2` function. - -#### Add traffic management info - -Now that you've created aliases, you need to declare those in a new `trafficManagement` section so CD-as-a-Service can perform the traffic split strategy. Add the following top-level section to your deployment config file: - -{{< highlight yaml "linenos=table,hl_lines=19 27" >}} -trafficManagement: - - targets: ['prod-west-1'] - alias: - - function: just-sweet-potatoes-us-west-1 - aliasName: latest-version - - targets: ['prod-west-2'] - alias: - - function: just-sweet-potatoes-us-west-2 - aliasName: latest-version -{{< /highlight >}} - +{{< /highlight>}} -## Deploy your function for a second time Start your second deployment using the CLI: @@ -436,7 +333,19 @@ In this second deployment, you see that CD-as-a-Service paused deployment to pro {{< figure src="manual-constraint.webp" width="80%" height="80%" >}} +## Test the deployed function + +Go to the `us-east-1` Lamba section of your AWS Account. You should see your deployed `just-sweet-potatoes-dev` function there. + +{{< figure src="deployed-function-list.webp" width="80%" height="80%" >}} + +1. Click `just-sweet-potatoes-dev` to open the function's details page. +1. Click the **Test** tab. +1. Click the **Test** button in the **Test event** section to test the function. +1. Expand the **Details** section to see the test results. + + {{< figure src="function-test.webp" >}} ## Clean up @@ -450,4 +359,4 @@ In this second deployment, you see that CD-as-a-Service paused deployment to pro * {{< linkWithTitle "integrations/ci-systems/gh-action.md" >}} * {{< linkWithTitle "deployment/strategies/canary.md" >}} -* {{< linkWithTitle "webhooks/overview.md" >}} +* {{< linkWithTitle "webhooks/overview.md" >}} \ No newline at end of file From b76be286b3c34714e27f585cb4e3eba1d26d8e3f Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Tue, 21 Nov 2023 15:53:32 -0600 Subject: [PATCH 19/28] stephen feedback --- content/en/deployment/lambda/overview/index.md | 2 +- .../en/reference/deployment/config-file/traffic-management.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index 2f16429b..4460b08b 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -307,7 +307,7 @@ A deployment strategy is the method by which CD-as-a-Service deploys your change For AWS Lambda, CD-as-a-Service supports a canary deployment strategy, which involves releasing a new software version to a small subset of users or systems while leaving the majority on the current version. This strategy allows for real-world testing and monitoring of the new version's performance and stability. If the canary users experience positive results, the new version can be gradually rolled out to a wider audience. -This example deploys 100% to the target. You'd use this `allAtOnce` strategy to initially deploy your function to AWS Lambda when the function does not exist in the AWS Lambda console. +This example **routes 100% of traffic** to the **new version**. You’d use this `allAtOnce`` strategy to initially deploy your function to AWS Lambda when the function does not exist in the AWS Lambda console. **This strategy is also useful in non-production environments such as staging.** ```yaml strategies: diff --git a/content/en/reference/deployment/config-file/traffic-management.md b/content/en/reference/deployment/config-file/traffic-management.md index bd0d508b..640f67c4 100644 --- a/content/en/reference/deployment/config-file/traffic-management.md +++ b/content/en/reference/deployment/config-file/traffic-management.md @@ -20,9 +20,9 @@ trafficManagement: aliasName: ``` -* `targets`: the target name +* `targets`: the list of targets using this alias * `function`: This is the same value as `artifacts.functionName` and `providerOptions.lambda.name`. See {{< linkWithTitle "reference/deployment/config-file/artifacts.md" >}} for details on those sections. -* `aliasName`: The alias name, such as "latest-version". Your function's alias must already exist in the AWS Lambda console. +* `aliasName`: The alias name, such as "live-version". Your function's alias must already exist in the AWS Lambda console. This example declares a traffic split canary strategy. You must declare your function's alias for each deployment target that uses the traffic split strategy. From 2d7ff36e9953a95c526138d391d0fffccf82dc87 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Tue, 21 Nov 2023 16:10:29 -0600 Subject: [PATCH 20/28] fixed a dangling sentence --- .../en/deployment/lambda/overview/index.md | 43 +------------------ 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index 4460b08b..fb23625d 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -17,7 +17,7 @@ You define your CD-as-a-Service deployment configuration in a YAML file, which y {{< figure src="lambda-deploy.webp" width=80%" height="80%" >}} -CD-as-a-Service starts a deployment with a target environment, which is a combination of AWS account and region. such as development, that does not depend on another environment. Then deployment progresses through the steps, conditions, and environments defined in your deployment process. +CD-as-a-Service starts a deployment with a target environment, which is a combination of AWS account and region. The first target in a deployment does not depend on other targets. Then deployment progresses through the steps, conditions, and targets defined in your deployment process. CD-as-a-Service automatically rolls back when: @@ -46,47 +46,6 @@ You need to store your function zip files in an S3 bucket, and the S3 bucket sho | 4 | 4 | 4 | 4 | | 2 | 2 | 6 | 6 | - - - For each Lambda function you want to deploy, CD-as-a-Service needs the following: 1. **ArmoryRole** ARN From c03918baeaf8ed10b480f0d179d961833f43a081 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 22 Nov 2023 09:56:58 -0600 Subject: [PATCH 21/28] remove k8s sentence in lambda overview; fix typos --- content/en/deployment/lambda/overview/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index fb23625d..936c5497 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -11,7 +11,7 @@ description: > A _deployment_ encompasses the artifacts, configuration, and actions that deliver your code to remote environments. You can configure a deployment to deliver your [AWS Lambda](https://docs.aws.amazon.com/lambda) function to a single environment or multiple environments, either in sequence or in parallel depending on your [deployment configuration]({{}}). -You define your CD-as-a-Service deployment configuration in a YAML file, which you store within your source control, enabling code-like management. You trigger deployments using the Armory CLI, either from your CI system or your workstation. Although CD-as-a-Service requires a separate deployment configuration file for each app, you can deploy multiple Kubernetes Deployment objects together as part of a single app. +You define your CD-as-a-Service deployment configuration in a YAML file, which you store within your source control, enabling code-like management. You trigger deployments using the Armory CLI, either from your CI system or your workstation. ## How deployment works @@ -94,7 +94,7 @@ providerOptions: ## Define your deployment -CD-as-a-Service enables you to declare your deployment configuration outcome in a YAML file. +With CD-as-a-Service, you declare your deployment configuration outcome in a YAML file. For an AWS Lambda deployment, you only need to provide the following pieces of information: @@ -266,7 +266,7 @@ A deployment strategy is the method by which CD-as-a-Service deploys your change For AWS Lambda, CD-as-a-Service supports a canary deployment strategy, which involves releasing a new software version to a small subset of users or systems while leaving the majority on the current version. This strategy allows for real-world testing and monitoring of the new version's performance and stability. If the canary users experience positive results, the new version can be gradually rolled out to a wider audience. -This example **routes 100% of traffic** to the **new version**. You’d use this `allAtOnce`` strategy to initially deploy your function to AWS Lambda when the function does not exist in the AWS Lambda console. **This strategy is also useful in non-production environments such as staging.** +This example **routes 100% of traffic** to the **new version**. You’d use this `allAtOnce` strategy to initially deploy your function to AWS Lambda when the function does not exist in the AWS Lambda console. **This strategy is also useful in non-production environments such as staging.** ```yaml strategies: From 3897a2b70289eed2923075ac4c24b00065c6502e Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 22 Nov 2023 10:23:05 -0600 Subject: [PATCH 22/28] change trafficManagement.alias.function to functionName --- content/en/includes/code/lambda-skeleton.yaml | 8 ++++---- .../includes/code/lambda-traffic-split-snippet.yaml | 12 ++++++------ .../en/includes/dep-file/lambda-provider-options.md | 2 +- .../en/reference/deployment/config-file/artifacts.md | 2 +- .../deployment/config-file/traffic-management.md | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/content/en/includes/code/lambda-skeleton.yaml b/content/en/includes/code/lambda-skeleton.yaml index e507f3ea..2f7a9a28 100644 --- a/content/en/includes/code/lambda-skeleton.yaml +++ b/content/en/includes/code/lambda-skeleton.yaml @@ -35,10 +35,10 @@ strategies: - runWebhook: name: trafficManagement: - - alias: - - function: - aliasName: - targets: [""] + - targets: [""] + alias: + - functionName: + aliasName: analysis: defaultMetricProviderName: queries: diff --git a/content/en/includes/code/lambda-traffic-split-snippet.yaml b/content/en/includes/code/lambda-traffic-split-snippet.yaml index 09edc8c3..e97a5b12 100644 --- a/content/en/includes/code/lambda-traffic-split-snippet.yaml +++ b/content/en/includes/code/lambda-traffic-split-snippet.yaml @@ -1,12 +1,12 @@ targets: prod-us-east-1: account: armory-docs-dev - region: us-east-1 + region: us-east-1 deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" strategy: trafficSplit staging-us-east-2: account: armory-docs-dev - region: us-east-2 + region: us-east-2 deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" strategy: trafficSplit artifacts: @@ -29,21 +29,21 @@ strategies: trafficManagement: - targets: ['prod-us-east-1'] alias: - - function: just-sweet-potatoes-us-east-1 + - functionName: just-sweet-potatoes-us-east-1 aliasName: latest-version - targets: ['staging-us-east-2'] alias: - - function: just-sweet-potatoes-us-east-2 + - functionName: just-sweet-potatoes-us-east-2 aliasName: latest-version providerOptions: lambda: - name: just-sweet-potatoes-us-east-1 target: prod-us-east-1 runAsIamRole: "arn:aws:iam::111111111111:role/LambdaExecutionRole" - handler: index.handler + handler: index.handler runtime: nodejs18.x - name: just-sweet-potatoes-us-east-2 target: staging-us-east-2 runAsIamRole: "arn:aws:iam::111111111111:role/LambdaExecutionRole" - handler: index.handler + handler: index.handler runtime: nodejs18.x diff --git a/content/en/includes/dep-file/lambda-provider-options.md b/content/en/includes/dep-file/lambda-provider-options.md index c71c983b..d967f338 100644 --- a/content/en/includes/dep-file/lambda-provider-options.md +++ b/content/en/includes/dep-file/lambda-provider-options.md @@ -1,5 +1,5 @@ * `target`: CD-as-a-Service deployment [target]({{< ref "reference/deployment/config-file/targets" >}}) name -* `name`: This is the same value as `artifacts.functionName` and `trafficManagement.alias.function` for the target region. This function name appears on your AWS Lambda **Functions** list page. +* `name`: This is the same value as `artifacts.functionName` and `trafficManagement.alias.functionName` for the target region. This function name appears on your AWS Lambda **Functions** list page. * `runAsIamRole`: Replace `` with the ARN of your [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), which is **not** the ArmoryRole ARN. * `handler`: The function's handler method, such as `index.handler`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. * `runtime`: [runtime identifier](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html), such as `python3.22` or `nodejs18.x`. This value is written to the **Runtime settings** section in the AWS Lambda function details page. diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md index 94d5bc0f..caebea42 100644 --- a/content/en/reference/deployment/config-file/artifacts.md +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -17,7 +17,7 @@ artifacts: type: zipFile ``` -* `functionName`: A unique name for each entry in the `artifacts` collection. You also use this value for `providerOptions.lambda.name` and `trafficManagement.alias.function`. +* `functionName`: A unique name for each entry in the `artifacts` collection. You also use this value for `providerOptions.lambda.name` and `trafficManagement.alias.functionName`. * `path`: The S3 path to your function's zip file * `type`: This value is always `zipFile`. CD-as-a-Service does not support deploying Lambda containers. diff --git a/content/en/reference/deployment/config-file/traffic-management.md b/content/en/reference/deployment/config-file/traffic-management.md index 640f67c4..6f47600a 100644 --- a/content/en/reference/deployment/config-file/traffic-management.md +++ b/content/en/reference/deployment/config-file/traffic-management.md @@ -16,12 +16,12 @@ You declare your AWS Lambda alias per target in this section. CD-as-a-Service us trafficManagement: - targets: [""] alias: - - function: + - functionName: aliasName: ``` * `targets`: the list of targets using this alias -* `function`: This is the same value as `artifacts.functionName` and `providerOptions.lambda.name`. See {{< linkWithTitle "reference/deployment/config-file/artifacts.md" >}} for details on those sections. +* `functionName`: This is the same value as `artifacts.functionName` and `providerOptions.lambda.name`. See {{< linkWithTitle "reference/deployment/config-file/artifacts.md" >}} for details on those sections. * `aliasName`: The alias name, such as "live-version". Your function's alias must already exist in the AWS Lambda console. This example declares a traffic split canary strategy. You must declare your function's alias for each deployment target that uses the traffic split strategy. From 6120d5fccd4f2ac6d238c4b394ce025952230b71 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Wed, 22 Nov 2023 10:31:58 -0600 Subject: [PATCH 23/28] fixed a few typos and expanded a bit on get started --- content/en/get-started/lambda/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index a88b8535..1fed646a 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -137,7 +137,7 @@ A strategy defines how CD-as-a-Service deploys your Lambda function to a target. A [canary strategy]({{< ref "deployment/strategies/canary.md" >}}) is a linear sequence of steps. The `setWeight` step defines the ratio of traffic between function versions. -Add a basic [canary strategy]({{< ref "deployment/strategies/canary" >}}) with a single step that sets the weight to 100. +Add a basic [canary strategy]({{< ref "deployment/strategies/canary" >}}) with a single step that sets the weight to 100. This routes 100% of traffic to the new version. You use this `allAtOnce` strategy to initially deploy your function to AWS Lambda when the function does not exist in the AWS Lambda console. This strategy is also useful in non-production environments such as staging. {{< highlight yaml "linenos=table" >}} strategies: @@ -282,7 +282,7 @@ CD-as-a-Service has four kinds of constraints that you can use to control your d - [External Automation (Webhooks)]({{< ref "webhooks/overview.md" >}}) to run integration tests and security audits or send notifications - [Automated Canary Analysis]({{< ref "deployment/strategies/canary" >}}) -You can use these constraints between environments and within environments. During your next deployment, you need to issue a manual approval before deploying to to the prod targets. Add a `beforeDeployment` constraint for a manual judgment to your `staging` target: +You can use these constraints between environments and within environments. During your next deployment, you want to issue a manual approval before deploying to to the prod targets. Add an `afterDeployment` constraint with a manual judgment to your `staging` target: {{< highlight yaml "linenos=table,hl_lines=15-17" >}} targets: From b19d2ce2b4c6557fc4658eaa2b36d428a04ac8f7 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 27 Nov 2023 14:37:51 -0600 Subject: [PATCH 24/28] reorder sections in sample yaml --- .../code/lambda-traffic-split-snippet.yaml | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/content/en/includes/code/lambda-traffic-split-snippet.yaml b/content/en/includes/code/lambda-traffic-split-snippet.yaml index e97a5b12..e8b18d51 100644 --- a/content/en/includes/code/lambda-traffic-split-snippet.yaml +++ b/content/en/includes/code/lambda-traffic-split-snippet.yaml @@ -4,18 +4,11 @@ targets: region: us-east-1 deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" strategy: trafficSplit - staging-us-east-2: + prod-us-east-2: account: armory-docs-dev region: us-east-2 deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" strategy: trafficSplit -artifacts: - - functionName: just-sweet-potatoes-us-east-1 - path: s3://armory-demo-east-1/just-sweet-potatoes.zip - type: zipFile - - functionName: just-sweet-potatoes-us-east-2 - path: s3://armory-demo-east-2/just-sweet-potatoes.zip - type: zipFile strategies: trafficSplit: canary: @@ -26,15 +19,13 @@ strategies: untilApproved: true - setWeight: weight: 100 -trafficManagement: - - targets: ['prod-us-east-1'] - alias: - - functionName: just-sweet-potatoes-us-east-1 - aliasName: latest-version - - targets: ['staging-us-east-2'] - alias: - - functionName: just-sweet-potatoes-us-east-2 - aliasName: latest-version +artifacts: + - functionName: just-sweet-potatoes-us-east-1 + path: s3://armory-demo-east-1/just-sweet-potatoes.zip + type: zipFile + - functionName: just-sweet-potatoes-us-east-2 + path: s3://armory-demo-east-2/just-sweet-potatoes.zip + type: zipFile providerOptions: lambda: - name: just-sweet-potatoes-us-east-1 @@ -43,7 +34,16 @@ providerOptions: handler: index.handler runtime: nodejs18.x - name: just-sweet-potatoes-us-east-2 - target: staging-us-east-2 + target: prod-us-east-2 runAsIamRole: "arn:aws:iam::111111111111:role/LambdaExecutionRole" handler: index.handler runtime: nodejs18.x +trafficManagement: + - targets: ['prod-us-east-1'] + alias: + - functionName: just-sweet-potatoes-us-east-1 + aliasName: live-version + - targets: ['prod-us-east-2'] + alias: + - functionName: just-sweet-potatoes-us-east-2 + aliasName: live-version From f200478584f2ee410a457396ac71ed8fa8c58d7c Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 27 Nov 2023 14:57:54 -0600 Subject: [PATCH 25/28] move aws lambda first in tab panes --- content/en/deployment/create-deploy-config.md | 13 +- .../en/deployment/lambda/overview/index.md | 8 +- content/en/deployment/strategies/canary.md | 2 - content/en/deployment/strategies/overview.md | 2 +- content/en/get-started/lambda/index.md | 20 +- content/en/get-started/overview.md | 4 +- content/en/includes/lambda/iam-role.md | 2 +- content/en/reference/deployment/_index.md | 6 +- .../deployment/config-file/_index.md | 18 +- .../deployment/config-file/artifacts.md | 4 +- .../deployment/config-file/targets.md | 249 +++++++++++------- 11 files changed, 191 insertions(+), 137 deletions(-) diff --git a/content/en/deployment/create-deploy-config.md b/content/en/deployment/create-deploy-config.md index a60b172f..a8ed8dcb 100644 --- a/content/en/deployment/create-deploy-config.md +++ b/content/en/deployment/create-deploy-config.md @@ -14,24 +14,23 @@ Make sure you have [installed the CD-as-a-Service CLI]({{< ref "cli" >}}), which {{< tabpane text=true right=true >}} {{% tab header="**Platform:**" disabled=true /%}} -{{% tab header="Kubernetes" %}} -{{< include "create-k8s-config.md" >}} -{{% /tab %}} {{% tab header="AWS Lambda" %}} {{< include "create-lambda-config.md" >}} {{% /tab %}} +{{% tab header="Kubernetes" %}} +{{< include "create-k8s-config.md" >}} +{{% /tab %}} {{< /tabpane >}} ## Deployment config file examples -### Kubernetes - -{{< include "dep-file/k8s-skeleton-config.md" >}} - ### AWS Lambda {{< include "dep-file/lambda-skeleton-config.md" >}} +### Kubernetes + +{{< include "dep-file/k8s-skeleton-config.md" >}} ## {{% heading "nextSteps" %}} diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index 936c5497..5a83b98b 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -51,7 +51,7 @@ For each Lambda function you want to deploy, CD-as-a-Service needs the following 1. **ArmoryRole** ARN 1. Region 1. S3 path to the function zip file -1. The ARN of your [Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) +1. The ARN of your [AWS Lambda execution role](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) 1. Your function's [runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) and handler method This basic example deploys one function to one region in one account: @@ -99,8 +99,8 @@ With CD-as-a-Service, you declare your deployment configuration outcome in a YAM For an AWS Lambda deployment, you only need to provide the following pieces of information: * The target you want to deploy to -* The Lambda function you want to deploy -* Provider options for that Lambda function +* The AWS Lambda function you want to deploy +* Provider options for that AWS Lambda function * The canary strategy you want to use for the deployment ## Elements of a deployment @@ -216,7 +216,7 @@ targets: ### Artifacts -An _artifact_ is your Lambda function name and the S3 path to the function's archive. +An _artifact_ is your AWS Lambda function name and the S3 path to the function's archive. ```yaml artifacts: diff --git a/content/en/deployment/strategies/canary.md b/content/en/deployment/strategies/canary.md index c8d19701..86ff4e70 100644 --- a/content/en/deployment/strategies/canary.md +++ b/content/en/deployment/strategies/canary.md @@ -4,8 +4,6 @@ linkTitle: Canary weight: 5 description: > Learn how to configure a canary deployment strategy in your Armory CD-as-a-Service deployment. -categories: ["Deployment", "Guides"] -tags: ["Kubernetes", "Deploy Strategy", "Canary"] --- ## What a canary strategy does diff --git a/content/en/deployment/strategies/overview.md b/content/en/deployment/strategies/overview.md index 9f5b02a1..c5f9ef29 100644 --- a/content/en/deployment/strategies/overview.md +++ b/content/en/deployment/strategies/overview.md @@ -3,7 +3,7 @@ title: Deployment Strategies Overview linktitle: Overview weight: 1 description: > - Learn about blue/green and canary deployment strategies for deploying your apps to Kubernetes using Armory CD-as-a-Service. Compare features to decide which strategy fits your use case. + Learn about blue/green and canary deployment strategies for deploying AWS Lambda functions or your apps to Kubernetes using Armory CD-as-a-Service. Compare features to decide which strategy fits your use case. --- ## {{% heading "prereq" %}} diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 1fed646a..0def89fd 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -54,7 +54,7 @@ Confirm the device code in your browser when prompted. Then return to this guide ## Create S3 buckets -You need to store your Lambda function as a zip file in an S3 bucket, and S3 bucket needs to be in the same region you deploy to. For this guide, you are going to deploy the Lambda function to four regions so you need to create four buckets: +You need to store your AWS Lambda function as a zip file in an S3 bucket, and S3 bucket needs to be in the same region you deploy to. For this guide, you are going to deploy the AWS Lambda function to four regions so you need to create four buckets: | Region | Bucket Name | @@ -70,9 +70,9 @@ After you have finished, you should have four buckets. {{< figure src="s3-buckets.webp" >}} -## Upload the Lambda function to your buckets +## Upload the AWS Lambda function to your buckets -Armory provides a basic Lambda function called `just-sweet-potatoes` for you to deploy. +Armory provides a basic AWS Lambda function called `just-sweet-potatoes` for you to deploy.
Expand to see the code @@ -106,7 +106,7 @@ const potatolessFacts = [
-1.
Download the Lambda zip file. +1. Download the function zip file. 1. Upload the file to each of your `armory-demo-lambda-deploy` S3 buckets. 1. Make a note of each bucket's S3 path to the lambda function. The paths should be: @@ -132,7 +132,7 @@ description: A sample function for deployment using CD-as-a-Service ### Add a canary strategy -A strategy defines how CD-as-a-Service deploys your Lambda function to a target. +A strategy defines how CD-as-a-Service deploys your AWS Lambda function to a target. A [canary strategy]({{< ref "deployment/strategies/canary.md" >}}) is a linear sequence of steps. The `setWeight` step defines the ratio of traffic between function versions. @@ -159,7 +159,7 @@ flowchart LR B --> D[prod-west-2] ``` -When deploying to multiple targets, you can specify dependencies between targets using the `constraints.dependsOn` field. CD-as-a-Service deploys your Lambda function from your S3 bucket to the `dev` target first. You want a linear, success-dependent progression from `dev` to `prod`, so there is a `dependsOn` constraint for staging and prod targets. `staging` depends on `dev` and the prod targets depend on `staging`. +When deploying to multiple targets, you can specify dependencies between targets using the `constraints.dependsOn` field. CD-as-a-Service deploys your AWS Lambda function from your S3 bucket to the `dev` target first. You want a linear, success-dependent progression from `dev` to `prod`, so there is a `dependsOn` constraint for staging and prod targets. `staging` depends on `dev` and the prod targets depend on `staging`. Add the four targets, one in each region: @@ -202,9 +202,9 @@ Replace: * `` with the ARN of the role you created in the [Create the Armory IAM role](#create-the-armory-iam-role) section -### Add Lambda artifacts +### Add AWS Lambda artifacts -In this section, you declare your Lambda function artifacts. You have an entry for each deployment region. +In this section, you declare your AWS Lambda function artifacts. You have an entry for each deployment region. The function is named `just-sweet-potatoes` in each S3 bucket, but the `functionName` is unique for each entry in the `artifacts` collection. For this guide, the target name is appended to the function's name to create the @@ -350,8 +350,8 @@ Go to the `us-east-1` Lamba section of your AWS Account. You should see your de ## Clean up -1. Delete the deployed Lambda functions from each region. -1. Delete the Lambda zip files from each S3 bucket. Delete each S3 bucket. +1. Delete the deployed AWS Lambda functions from each region. +1. Delete the AWS Lambda zip files from each S3 bucket. Delete each S3 bucket. 1. Delete the CloudFormation Stack. This also deletes the associated IAM Role. diff --git a/content/en/get-started/overview.md b/content/en/get-started/overview.md index b3becaec..dc2128c2 100644 --- a/content/en/get-started/overview.md +++ b/content/en/get-started/overview.md @@ -2,10 +2,8 @@ title: How to Get Started using Armory CD-as-a-Service linkTitle: Overview description: > - Learn what you need to get started deploying an app to Kubernetes using Armory Continuous Deployment-as-a-Service. + Learn what you need to get started deploying your AWS Lambda function or an app to Kubernetes. weight: 1 -categories: ["Get Started", "Concepts"] -tags: ["Quickstart", "Deployment"] --- ## What you need to use CD-as-a-Service diff --git a/content/en/includes/lambda/iam-role.md b/content/en/includes/lambda/iam-role.md index cc12c41b..8189db1e 100644 --- a/content/en/includes/lambda/iam-role.md +++ b/content/en/includes/lambda/iam-role.md @@ -1 +1 @@ -In order to deploy AWS resources, CD-as-a-Service needs to create a Trust Relationship in your AWS account by adding an IAM role. CD-as-a-Service assumes this role to execute deployments on your behalf. The Armory CLI provides a function that creates an [AWS CloudFormation Stack](https://docs.aws.amazon.com/cloudformation/) with an IAM Role, by default named **ArmoryRole**. You need to create a Stack in each AWS Account you want to deploy your Lambda functions to. \ No newline at end of file +In order to deploy AWS resources, CD-as-a-Service needs to create a Trust Relationship in your AWS account by adding an IAM role. CD-as-a-Service assumes this role to execute deployments on your behalf. The Armory CLI provides a function that creates an [AWS CloudFormation Stack](https://docs.aws.amazon.com/cloudformation/) with an IAM Role, by default named **ArmoryRole**. You need to create a Stack in each AWS Account you want to deploy your AWS Lambda functions to. \ No newline at end of file diff --git a/content/en/reference/deployment/_index.md b/content/en/reference/deployment/_index.md index af85f998..30450067 100644 --- a/content/en/reference/deployment/_index.md +++ b/content/en/reference/deployment/_index.md @@ -50,12 +50,12 @@ armory template kubernetes [template-type] > deployment-template.yaml {{< tabpane text=true right=true >}} {{% tab header="**Platform:**" disabled=true /%}} -{{% tab header="Kubernetes" %}} -{{< include "create-k8s-config.md" >}} -{{% /tab %}} {{% tab header="AWS Lambda" %}} {{< include "create-lambda-config.md" >}} {{% /tab %}} +{{% tab header="Kubernetes" %}} +{{< include "create-k8s-config.md" >}} +{{% /tab %}} {{< /tabpane >}} diff --git a/content/en/reference/deployment/config-file/_index.md b/content/en/reference/deployment/config-file/_index.md index 6627f1f1..800ea933 100644 --- a/content/en/reference/deployment/config-file/_index.md +++ b/content/en/reference/deployment/config-file/_index.md @@ -3,27 +3,15 @@ title: Deployment Config File Reference linkTitle: Deployment Config File weight: 1 description: > - The deployment config file is where you configure your app for deployment by Armory CD-as-a-Service. This config file includes application, deploymentConfig, targets, manifests, strategies, analysis, webhooks, and trafficManagement definitions. -categories: ["Reference"] -tags: ["Deployment", "Deploy Config"] + The deployment config file is where you configure your AWS Lambda function or Kubernetes app for deployment by Armory CD-as-a-Service. This config file includes application, artifacts, provider options, deploymentConfig, targets, manifests, strategies, analysis, webhooks, and trafficManagement definitions. --- ## Deployment config file examples -### Kubernetes - -{{< include "dep-file/k8s-skeleton-config.md" >}} - ### AWS Lambda {{< include "dep-file/lambda-skeleton-config.md" >}} +### Kubernetes - - - - - - - - +{{< include "dep-file/k8s-skeleton-config.md" >}} diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md index caebea42..69a8fe4e 100644 --- a/content/en/reference/deployment/config-file/artifacts.md +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -8,7 +8,7 @@ description: > ## Artifacts -This section defines the Lambda artifacts you are deploying. The artifacts reach all target for which there is a provider option block for that function name. +This section defines the AWS Lambda artifacts you are deploying. The artifacts reach all target for which there is a provider option block for that function name. ```yaml artifacts: @@ -19,7 +19,7 @@ artifacts: * `functionName`: A unique name for each entry in the `artifacts` collection. You also use this value for `providerOptions.lambda.name` and `trafficManagement.alias.functionName`. * `path`: The S3 path to your function's zip file -* `type`: This value is always `zipFile`. CD-as-a-Service does not support deploying Lambda containers. +* `type`: This value is always `zipFile`. CD-as-a-Service does not support deploying AWS Lambda containers. If you want to deploy to multiple regions in the same AWS Account, your `functionName` should be unique for the region. diff --git a/content/en/reference/deployment/config-file/targets.md b/content/en/reference/deployment/config-file/targets.md index e447385d..0e7f1b5c 100644 --- a/content/en/reference/deployment/config-file/targets.md +++ b/content/en/reference/deployment/config-file/targets.md @@ -1,31 +1,31 @@ --- title: Targets Config description: > - Declare your Kubernetes or Lambda deployment targets. + Declare your Kubernetes or AWS Lambda deployment targets. --- ## Targets config overview -In the `targets.` config block, you define where and how you want to deploy your Kubernetes app or Lambda function. +In the `targets.` config block, you define where and how you want to deploy your Kubernetes app or AWS Lambda function. You can specify multiple targets. Provide unique descriptive names for each target to which you are deploying. {{< cardpane >}} -{{< card code=true lang="yaml" header="Kubernetes" >}} +{{< card code=true lang="yaml" header="AWS Lambda" >}} targets: : - account: - namespace: + account: + deployAsIamRole: + region: strategy: constraints: {{< /card >}} -{{< card code=true lang="yaml" header="AWS Lambda" >}} +{{< card code=true lang="yaml" header="Kubernetes" >}} targets: : - account: - deployAsIamRole: - region: + account: + namespace: strategy: constraints: {{< /card >}} @@ -147,12 +147,13 @@ Optional {{< tabpane text=true right=true >}} {{% tab header="**Target**:" disabled=true /%}} - {{% tab header="Kubernetes" %}} + {{% tab header="AWS Lambda" %}} ```yaml targets: prod: - account: prod-cluster-west - namespace: overflow + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-1 strategy: canary-wait-til-approved constraints: dependsOn: [""] @@ -167,13 +168,12 @@ targets: name: ``` {{% /tab %}} - {{% tab header="AWS Lambda" %}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: - account: aws-docs-dev - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-east-1 + account: prod-cluster-west + namespace: overflow strategy: canary-wait-til-approved constraints: dependsOn: [""] @@ -188,6 +188,7 @@ targets: name: ``` {{% /tab %}} + {{< /tabpane >}} @@ -201,30 +202,29 @@ The following example shows a deployment to `prod-west` that cannot start until {{< tabpane text=true right=true >}} {{% tab header="**Target**:" disabled=true /%}} - {{% tab header="Kubernetes" %}} + {{% tab header="AWS Lambda" %}} ```yaml targets: prod-west: - account: prod-west - namespace: overflow + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 strategy: canary-wait-til-approved constraints: - dependsOn: + dependsOn: - ITSec - Audit ``` - {{% /tab %}} - {{% tab header="AWS Lambda" %}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod-west: - account: aws-docs-dev - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-west-1 + account: prod-west + namespace: overflow strategy: canary-wait-til-approved constraints: - dependsOn: + dependsOn: - ITSec - Audit ``` @@ -251,63 +251,65 @@ You can specify a pause that waits for a manual approval or a certain amount of {{< tabpane text=true right=true >}} {{% tab header="**Target**:" disabled=true /%}} - {{% tab header="Kubernetes" %}} + {{% tab header="AWS Lambda" %}} ```yaml targets: prod: - account: prod-cluster-west - namespace: overflow + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 strategy: canary-wait-til-approved constraints: dependsOn: ["dev-west"] beforeDeployment: - pause: untilApproved: true - requiresRoles: [] approvalExpiration: duration: 60 unit: seconds ``` - `pause.untilApproved`: Set to true -- `pause.requiresRoles`: (Optional) List of RBAC roles that can issue a manual approval - `pause.approvalExpiration`: (Optional) Timeout configuration; when expired the ongoing deployment is cancelled - + {{% /tab %}} - {{% tab header="AWS Lambda" %}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: - account: aws-docs-dev - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-west-1 + account: prod-cluster-west + namespace: overflow strategy: canary-wait-til-approved constraints: dependsOn: ["dev-west"] beforeDeployment: - pause: untilApproved: true + requiresRoles: [] approvalExpiration: duration: 60 unit: seconds ``` - `pause.untilApproved`: Set to true +- `pause.requiresRoles`: (Optional) List of RBAC roles that can issue a manual approval - `pause.approvalExpiration`: (Optional) Timeout configuration; when expired the ongoing deployment is cancelled - + {{% /tab %}} + {{< /tabpane >}} **Pause for a certain amount of time** {{< tabpane text=true right=true >}} {{% tab header="**Target**:" disabled=true /%}} - {{% tab header="Kubernetes" %}} + {{% tab header="AWS Lambda" %}} ```yaml targets: prod: - account: prod-cluster-west - namespace: overflow + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 strategy: canary-wait-til-approved constraints: dependsOn: ["dev-west"] @@ -317,13 +319,12 @@ targets: unit: seconds ``` {{% /tab %}} - {{% tab header="AWS Lambda" %}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: - account: aws-docs-dev - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-west-1 + account: prod-cluster-west + namespace: overflow strategy: canary-wait-til-approved constraints: dependsOn: ["dev-west"] @@ -333,6 +334,7 @@ targets: unit: seconds ``` {{% /tab %}} + {{< /tabpane >}} - `pause.duration` set to an integer value for the amount of time to wait before starting after the `dependsOn` condition is met. @@ -344,20 +346,19 @@ In the following example, before deploying to the `prod-cluster-west` target, CD {{< tabpane text=true right=true >}} {{% tab header="**Target**:" disabled=true /%}} - {{% tab header="Kubernetes" %}} + {{% tab header="AWS Lambda" %}} ```yaml targets: prod: - account: prod-cluster-west - namespace: overflow + account: aws-docs-dev + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 strategy: canary-wait-til-approved constraints: dependsOn: ["staging"] beforeDeployment: - pause: untilApproved: true - requiresRoles: - - Organization Admin approvalExpiration: duration: 24 unit: hours @@ -365,19 +366,20 @@ targets: name: Send_Slack_Deployment_Approval_Required ``` {{% /tab %}} - {{% tab header="AWS Lambda" %}} + {{% tab header="Kubernetes" %}} ```yaml targets: prod: - account: aws-docs-dev - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-west-1 + account: prod-cluster-west + namespace: overflow strategy: canary-wait-til-approved constraints: dependsOn: ["staging"] beforeDeployment: - pause: untilApproved: true + requiresRoles: + - Organization Admin approvalExpiration: duration: 24 unit: hours @@ -385,6 +387,7 @@ targets: name: Send_Slack_Deployment_Approval_Required ``` {{% /tab %}} + {{< /tabpane >}} @@ -415,6 +418,110 @@ targets: - avgCPUUsage ``` + +## AWS Lambda example + +{{< tabpane text=true right=true >}} + {{% tab header="**AWS Accounts**:" disabled=true /%}} + {{% tab header="Single" %}} +```yaml +targets: + Production-1: + account: arn:aws:iam::111111111111:role/ArmoryRole + constraints: + dependsOn: + - staging + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-2 + strategy: allAtOnce + Production-2: + account: arn:aws:iam::111111111111:role/ArmoryRole + constraints: + dependsOn: + - staging + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-west-1 + strategy: allAtOnce + staging: + account: arn:aws:iam::111111111111:role/ArmoryRole + constraints: + beforeDeployment: + - runWebhook: + name: Send_Slack_Deployment_Approval_Required + afterDeployment: + - runWebhook: + name: Integration_Tests + - pause: + untilApproved: true + deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole + region: us-east-1 + strategy: allAtOnce +``` + {{% /tab %}} + {{% tab header="Multiple" %}} + +```yaml +targets: + Lab: + account: armory-lab + deployAsIamRole: "arn:aws:iam::111111111111:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + Staging: + account: armory-core + deployAsIamRole: "arn:aws:iam::222222222222:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Integration-Tests + Audit: + account: armory-audit + deployAsIamRole: "arn:aws:iam::333333333333:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Audit-Analysis + ITSec: + account: armory-itsec + deployAsIamRole: "arn:aws:iam::444444444444:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Lab + afterDeployment: + - runWebhook: + name: Security-Scans + Prod-West-2: + account: armory-prod + deployAsIamRole: "arn:aws:iam::555555555555:role/ArmoryRole" + region: us-west-2 + strategy: rollingDeployment + constraints: + dependsOn: + - Staging + - Audit + - ITSec + beforeDeployment: + - runWebhook: + name: Send-Slack-Deployment-Approval-Required + - pause: + untilApproved: true +``` + {{% /tab %}} + +{{< /tabpane >}} + + + ## Kubernetes example In this example, there are four targets: `dev`, `infosec`, `staging`, and `prod-west`. After you deploy code to `infosec` and `staging`, you want to run jobs against those targets. If either of those jobs fails, CD-as-a-Service does not deploy to `prod-west`. @@ -476,39 +583,3 @@ targets: namespace: cdaas-prod strategy: mycanary ``` - -## AWS Lambda example - -```yaml -targets: - Production-1: - account: arn:aws:iam::111111111111:role/ArmoryRole - constraints: - dependsOn: - - staging - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-east-2 - strategy: allAtOnce - Production-2: - account: arn:aws:iam::111111111111:role/ArmoryRole - constraints: - dependsOn: - - staging - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-west-1 - strategy: allAtOnce - staging: - account: arn:aws:iam::111111111111:role/ArmoryRole - constraints: - beforeDeployment: - - runWebhook: - name: Send_Slack_Deployment_Approval_Required - afterDeployment: - - runWebhook: - name: Integration_Tests - - pause: - untilApproved: true - deployAsIamRole: arn:aws:iam::111111111111:role/ArmoryRole - region: us-east-1 - strategy: allAtOnce -``` \ No newline at end of file From ea2350dd17daa54555169fee975055e4ef7a4fdb Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 27 Nov 2023 15:02:28 -0600 Subject: [PATCH 26/28] fix internal link in lambda get started --- content/en/get-started/lambda/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 0def89fd..011a8bee 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -25,7 +25,7 @@ In this guide, you deploy an AWS Lambda function to four regions in your AWS Lam 1. Create AWS artifacts 1. [Create the IAM Role](#create-the-armory-iam-role) that CD-as-a-Service assumes to deploy your function. 1. [Create S3 buckets](#create-s3-buckets), one for each deployment region, to house your function's zip files. - 1. [Upload the sample function](#upload-the-lambda-function-to-your-buckets) to each S3 bucket. + 1. [Upload the sample function](#upload-the-aws-lambda-function-to-your-buckets) to each S3 bucket. 1. [Create your CD-as-a-Service deployment config file](#create-your-deployment-config-file). 1. [Deploy the sample function](#deploy-the-sample-function). 1. [Test the deployed function](#test-the-deployed-function) in the AWS Lambda console. From 35f68611eebf0e463894e50d4c6fdb1b9dc22f37 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 27 Nov 2023 15:40:02 -0600 Subject: [PATCH 27/28] make sure AWS Lambda is always first; added clarification --- .../deployment/lambda/create-iam-role-lambda.md | 2 +- content/en/deployment/lambda/overview/index.md | 16 +++++++++------- content/en/get-started/lambda/index.md | 2 +- content/en/reference/deployment/_index.md | 7 +++---- .../deployment/config-file/artifacts.md | 4 ++-- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/content/en/deployment/lambda/create-iam-role-lambda.md b/content/en/deployment/lambda/create-iam-role-lambda.md index 1b1bdbc4..da370e45 100644 --- a/content/en/deployment/lambda/create-iam-role-lambda.md +++ b/content/en/deployment/lambda/create-iam-role-lambda.md @@ -8,7 +8,7 @@ description: > ## {{% heading "prereq" %}} -Make sure you have [installed the CD-as-a-Service CLI]({{< ref "cli" >}}), which you can use to generate a deployment template. +Make sure you have [installed the CD-as-a-Service CLI]({{< ref "cli" >}}), which you use to load the AWS Cloud Formation template into your AWS Account. ## Create the Armory IAM role diff --git a/content/en/deployment/lambda/overview/index.md b/content/en/deployment/lambda/overview/index.md index 5a83b98b..1ec56317 100644 --- a/content/en/deployment/lambda/overview/index.md +++ b/content/en/deployment/lambda/overview/index.md @@ -21,7 +21,7 @@ CD-as-a-Service starts a deployment with a target environment, which is a combin CD-as-a-Service automatically rolls back when: - * There is an error deploying your Lambda function + * There is an error deploying your AWS Lambda function * Deployment fails to finish within 30 minutes * A webhook fails * You configured your retrospective analysis step to automatically rollback @@ -31,13 +31,13 @@ CD-as-a-Service automatically rolls back when: How CD-as-a-Service performs rollbacks: * If you have specified an [AWS Lambda alias](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) to use for routing traffic, CD-as-a-Service points the alias to the old version. -* If you have not specified an alias to use for routing traffic, CD-as-a-Service publishes a new version with the old configuration, so that the 'latest' version of your Lambda function has the same configuration as before the deployment started. +* If you have not specified an alias to use for routing traffic, CD-as-a-Service publishes a new version with the old configuration, so that the live version of your AWS Lambda function has the same configuration as before the deployment started. ## How CD-as-a-Service integrates with AWS {{< include "lambda/iam-role.md" >}} -You need to store your function zip files in an S3 bucket, and the S3 bucket should be in the same region you deploy to (this is an AWS limitation). For example, if you plan to deploy to three regions, you need three S3 buckets, one for each region. CD-as-a-Service deploys your Lambda function's archive from your S3 bucket. +You need to store your function zip files in an S3 bucket, and the S3 bucket should be in the same region you deploy to (this is an AWS limitation). For example, if you plan to deploy to three regions, you need three S3 buckets, one for each region. CD-as-a-Service deploys your AWS Lambda function's archive from your S3 bucket. | AWS Accounts | ArmoryRole | Regions | S3 Buckets | |--------------|-----------|---------|------------| @@ -46,7 +46,7 @@ You need to store your function zip files in an S3 bucket, and the S3 bucket sho | 4 | 4 | 4 | 4 | | 2 | 2 | 6 | 6 | -For each Lambda function you want to deploy, CD-as-a-Service needs the following: +For each AWS Lambda function you want to deploy, CD-as-a-Service needs the following: 1. **ArmoryRole** ARN 1. Region @@ -216,7 +216,7 @@ targets: ### Artifacts -An _artifact_ is your AWS Lambda function name and the S3 path to the function's archive. +An _artifact_ is your AWS Lambda function name and the S3 path to the function's archive. You should have an entry for each deployment target region. The `functionName` is unique for each entry in the `artifacts` collection. ```yaml artifacts: @@ -259,11 +259,13 @@ providerOptions: runtime: python3.10 ``` +Be sure to view the [AWS Lambda Quickstart]({{< ref "get-started/lambda" >}}) and [config file reference]({{< ref "reference/deployment/config-file/artifacts" >}}) for additional examples. + ### Strategies A deployment strategy is the method by which CD-as-a-Service deploys your changes to a target. Strategies can use different techniques to allow for rapid rollback should a problem be discovered, minimizing the impact of potential issues to a small subset of users. You could also use a strategy optimized for speed. -For AWS Lambda, CD-as-a-Service supports a canary deployment strategy, which involves releasing a new software version to a small subset of users or systems while leaving the majority on the current version. This strategy allows for real-world testing and monitoring of the new version's performance and stability. +For AWS Lambda deployments, CD-as-a-Service supports a canary deployment strategy, which involves releasing a new software version to a small subset of users or systems while leaving the majority on the current version. This strategy allows for real-world testing and monitoring of the new version's performance and stability. If the canary users experience positive results, the new version can be gradually rolled out to a wider audience. This example **routes 100% of traffic** to the **new version**. You’d use this `allAtOnce` strategy to initially deploy your function to AWS Lambda when the function does not exist in the AWS Lambda console. **This strategy is also useful in non-production environments such as staging.** @@ -281,7 +283,7 @@ For subsequent deployments, you could use a canary strategy that splits traffic. >You must create the alias in the AWS Lambda console before using the alias in your CD-as-a-Service deployment. -This example uses a canary strategy that splits traffic. You declare your function's alias in the `trafficManagement` section. There are two entries in the `trafficManagement` section since both staging and prod targets use the traffic split strategy. +This example is for deployment to multiple regions in a single AWS Account. The canary strategy splits traffic. You declare your function's alias in the `trafficManagement` section. There are two entries in the `trafficManagement` section since both staging and prod targets use the traffic split strategy. {{< readfile file="/includes/code/lambda-traffic-split-snippet.yaml" code="true" lang="yaml" >}} diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index 011a8bee..df4732a3 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -282,7 +282,7 @@ CD-as-a-Service has four kinds of constraints that you can use to control your d - [External Automation (Webhooks)]({{< ref "webhooks/overview.md" >}}) to run integration tests and security audits or send notifications - [Automated Canary Analysis]({{< ref "deployment/strategies/canary" >}}) -You can use these constraints between environments and within environments. During your next deployment, you want to issue a manual approval before deploying to to the prod targets. Add an `afterDeployment` constraint with a manual judgment to your `staging` target: +You can use these constraints between environments and within environments. During your next deployment, you want to issue a manual approval before deploying to to the prod targets. Add to your `staging` target an `afterDeployment` constraint with a manual judgment: {{< highlight yaml "linenos=table,hl_lines=15-17" >}} targets: diff --git a/content/en/reference/deployment/_index.md b/content/en/reference/deployment/_index.md index 30450067..b4f6961c 100644 --- a/content/en/reference/deployment/_index.md +++ b/content/en/reference/deployment/_index.md @@ -62,14 +62,13 @@ armory template kubernetes [template-type] > deployment-template.yaml ## Deployment config file examples -### Kubernetes - -{{< include "dep-file/k8s-skeleton-config.md" >}} - ### AWS Lambda {{< include "dep-file/lambda-skeleton-config.md" >}} +### Kubernetes + +{{< include "dep-file/k8s-skeleton-config.md" >}} ## {{% heading "nextSteps" %}} diff --git a/content/en/reference/deployment/config-file/artifacts.md b/content/en/reference/deployment/config-file/artifacts.md index 69a8fe4e..6d448854 100644 --- a/content/en/reference/deployment/config-file/artifacts.md +++ b/content/en/reference/deployment/config-file/artifacts.md @@ -21,7 +21,7 @@ artifacts: * `path`: The S3 path to your function's zip file * `type`: This value is always `zipFile`. CD-as-a-Service does not support deploying AWS Lambda containers. -If you want to deploy to multiple regions in the same AWS Account, your `functionName` should be unique for the region. +>If you want to deploy to multiple regions in the same AWS Account, your `functionName` should be unique for each region. In this example, you deploy a function called `just-sweet-potatoes` to four regions in the same AWS Account: @@ -155,7 +155,7 @@ providerOptions: runtime: python3.10 ``` -## Multiple AWS Account example +## Multiple AWS Accounts example This illustrates deploying a function to the same region in multiple AWS Accounts. From 31f5f9156b32570f3e1d5c964d0dd7a88cfd2b89 Mon Sep 17 00:00:00 2001 From: Aimee Ukasick Date: Mon, 27 Nov 2023 15:44:29 -0600 Subject: [PATCH 28/28] remove architecture link from lambda get started architeture page is all k8s --- content/en/get-started/lambda/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/get-started/lambda/index.md b/content/en/get-started/lambda/index.md index df4732a3..26ac48bd 100644 --- a/content/en/get-started/lambda/index.md +++ b/content/en/get-started/lambda/index.md @@ -9,7 +9,6 @@ weight: 2 ## {{% heading "prereq" %}} -* You are familiar with CD-as-a-Service's [key components]({{< ref "architecture.md" >}}). * You have read the {{< linkWithTitle "deployment/lambda/overview/index.md" >}}. * AWS requirements: * You need an [AWS Account](https://aws.amazon.com/free/), and you must have authority to create an IAM Role.