diff --git a/src/how-tos/zilla-plus-aws-ecs-fargate.md b/src/how-tos/zilla-plus-aws-ecs-fargate.md index 70c1a7cb..1b017157 100644 --- a/src/how-tos/zilla-plus-aws-ecs-fargate.md +++ b/src/how-tos/zilla-plus-aws-ecs-fargate.md @@ -38,85 +38,90 @@ This Guide will walk you through deploying your first service on AW - Create the below `Dockerfile` with the container image using the version tag you got from the previous steps. Use the `COPY` instruction to add the `zilla.yaml` below to your container image. -::: code-tabs -@tab Dockerfile + ::: code-tabs + + @tab Dockerfile + + ```Dockerfile + FROM 709825985650.dkr.ecr.us-east-1.amazonaws.com/aklivity/zilla-plus-ecr:-alpine + + COPY ./zilla.yaml /etc/zilla/zilla.yaml + ``` + + @tab zilla.yaml + + ```yaml + --- + name: http-echo + bindings: + north_tcp_server: + type: tcp + kind: server + options: + host: 0.0.0.0 + port: + - 7114 + routes: + - when: + - port: 7114 + exit: north_http_server + north_http_server: + type: http + kind: server + routes: + - when: + - headers: + :scheme: http + exit: north_echo_server + north_echo_server: + type: echo + kind: server + telemetry: + exporters: + stdout_logs_exporter: + type: stdout + ``` + + ::: + +- Optionally add files, any other files used in your `zilla.yaml` can be added to the container in the same directory as the `zilla.yaml` config. + + ```Dockerfile + COPY ./zilla.yaml /etc/zilla/zilla.yaml + COPY ./tls /etc/zilla/tls + COPY ./specs /etc/zilla/specs + ``` -```Dockerfile -FROM 709825985650.dkr.ecr.us-east-1.amazonaws.com/aklivity/zilla-plus-ecr:-alpine - -COPY ./zilla.yaml /etc/zilla/zilla.yaml -``` - -@tab zilla.yaml - -```yaml ---- -name: http-echo -bindings: - north_tcp_server: - type: tcp - kind: server - options: - host: 0.0.0.0 - port: - - 7114 - routes: - - when: - - port: 7114 - exit: north_http_server - north_http_server: - type: http - kind: server - routes: - - when: - - headers: - :scheme: http - exit: north_echo_server - north_echo_server: - type: echo - kind: server -telemetry: - exporters: - stdout_logs_exporter: - type: stdout -``` +- Build your image to be pushed to [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) or another registry. -::: + ::: important Before you build -::: note Adding other files + - Make sure you are logged in to the `Zilla Plus` registry to pull the base image. This is a separate log in action from any other registries (ex. If you are pushing the built image to Amazon ECR). -Any other files used in your `zilla.yaml` can be added to the container in the same directory as the `zilla.yaml` config. + ```bash + aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 709825985650.dkr.ecr.us-east-1.amazonaws.com + ``` -```Dockerfile -COPY ./zilla.yaml /etc/zilla/zilla.yaml -COPY ./tls /etc/zilla/tls -COPY ./specs /etc/zilla/specs -``` + - Confirm the CPU Architecture you need. Use the `docker build --platform` option to match the desired [cpuArchitecture](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RuntimePlatform.html#API_RuntimePlatform_Contents) that you can configure in your ECS task. -::: + ::: -- Build your image to be pushed to [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) or another registry. - -```bash -docker build -t zp-example/http-echo:v1 . -``` - -::: important Build with the correct Architecture -Use the `docker build --platform` option to match the desired [cpuArchitecture](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RuntimePlatform.html#API_RuntimePlatform_Contents) that you can configure in your ECS task. -::: + ```bash + docker build -t zp-example/http-echo:v1 . + ``` - Tag your image with the remote repository name and tag. -```bash -docker tag zp-example/http-echo:v1 [your-registry-url]/zp-example/http-echo:v1 -``` + ```bash + docker tag zp-example/http-echo:v1 [your-registry-url]/zp-example/http-echo:v1 + ``` - Push your image to your remote repository. -```bash -docker push [your-registry-url]/zp-example/http-echo:v1 -``` + ```bash + docker push [your-registry-url]/zp-example/http-echo:v1 + ``` ## Create an AWS ECS Fargate Task for your service @@ -124,93 +129,93 @@ docker push [your-registry-url]/zp-example/http-echo:v1 - Create an IAM role for the Task. This role will be used by the running container. -::: tabs + ::: tabs -@tab Task role + @tab Task role -Name: + Name: -```text -ecsTaskRole_ZillaPlus -``` + ```text + ecsTaskRole_ZillaPlus + ``` -Policies: + Policies: -```text -AWSMarketplaceMeteringFullAccess -AWSMarketplaceMeteringRegisterUsage -``` + ```text + AWSMarketplaceMeteringFullAccess + AWSMarketplaceMeteringRegisterUsage + ``` -::: + ::: - If you used the Amazon ECR as your image repository, create a role with the `AmazonECSTaskExecutionRolePolicy` permission and use it as the `Task execution role` when creating the Task. -::: tabs + ::: tabs -@tab Task execution role + @tab Task execution role -Name: + Name: -```text -ecsTaskExecutionRole -``` + ```text + ecsTaskExecutionRole + ``` -Policies: + Policies: -```text -AmazonECSTaskExecutionRolePolicy -``` + ```text + AmazonECSTaskExecutionRolePolicy + ``` -::: + ::: - [Create a new Task Definition](https://us-east-1.console.aws.amazon.com/ecs/v2/create-task-definition-with-json) from JSON - Substitute ``, ``, and `` for their respective values. -::: code-tabs - -@tab Task Definition JSON - -```json -{ - "family": "zilla-plus-http-echo-fargate", - "networkMode": "awsvpc", - "containerDefinitions": [ - { - "name": "zp-http-echo", - "image": "/zp-example/http-echo:v1", - "portMappings": [ - { - "name": "http", - "containerPort": 7114, - "hostPort": 7114, - "protocol": "tcp", - "appProtocol": "http" - } - ], - "essential": true, - "command": ["start", "-v", "-e"], - "logConfiguration": { - "logDriver": "awslogs", - "options": { - "awslogs-group": "/ecs/", - "mode": "non-blocking", - "awslogs-create-group": "true", - "max-buffer-size": "25m", - "awslogs-region": "us-east-1", - "awslogs-stream-prefix": "ecs" + ::: code-tabs + + @tab Task Definition JSON + + ```json + { + "family": "zilla-plus-http-echo-fargate", + "networkMode": "awsvpc", + "containerDefinitions": [ + { + "name": "zp-http-echo", + "image": "/zp-example/http-echo:v1", + "portMappings": [ + { + "name": "http", + "containerPort": 7114, + "hostPort": 7114, + "protocol": "tcp", + "appProtocol": "http" + } + ], + "essential": true, + "command": ["start", "-v", "-e"], + "logConfiguration": { + "logDriver": "awslogs", + "options": { + "awslogs-group": "/ecs/", + "mode": "non-blocking", + "awslogs-create-group": "true", + "max-buffer-size": "25m", + "awslogs-region": "us-east-1", + "awslogs-stream-prefix": "ecs" + } } } - } - ], - "requiresCompatibilities": ["FARGATE"], - "taskRoleArn": "", - "executionRoleArn": "", - "cpu": "1 vCPU", - "memory": "3 GB" -} -``` + ], + "requiresCompatibilities": ["FARGATE"], + "taskRoleArn": "", + "executionRoleArn": "", + "cpu": "1 vCPU", + "memory": "3 GB" + } + ``` -::: + ::: ## Create a Service from your AWS ECS Fargate Task @@ -219,12 +224,14 @@ AmazonECSTaskExecutionRolePolicy - [Create a Service](https://us-east-1.console.aws.amazon.com/ecs/v2/clusters/my-ecs-cluster/create-service) from your new task. - Deployment configuration: - Family: `zilla-plus-http-echo-fargate` - - Service name: `Your Zilla Plus HTTP Echo service` + - Service name: `my_zilla_plus_service` - Network configuration: - Set the VPC to be the Same as your ECS Cluster. - - Make sure the security group allows traffic over the ports defined `portMappings` of the service. - Select the Public subnets. - Make sure the `Public IP` flag to true. + ::: important Open Service Ports + Make sure the security group allows traffic over the ports defined in the `portMappings` of the service. + ::: - `Create` the Service. ## Verify your service is running @@ -236,13 +243,13 @@ Once the service has started with all tasks succeeding, you will see the