mirror of
https://github.com/gomods/athens
synced 2026-02-03 12:10:32 +00:00
docs: AWS Fargate (ECS) details (#1708)
This commit is contained in:
@@ -0,0 +1,131 @@
|
|||||||
|
---
|
||||||
|
title: "Install on AWS Fargate (ECS)"
|
||||||
|
date: 2021-03-27T21:53:51-07:00
|
||||||
|
draft: false
|
||||||
|
weight: 3
|
||||||
|
---
|
||||||
|
|
||||||
|
In this document, we'll show how to use [AWS Fargate (ECS)](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) to run the Athens proxy.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Selecting a Storage Provider
|
||||||
|
|
||||||
|
There is documentation about how to use environment variables to configure the various storage providers. However, for
|
||||||
|
this particular example we will use [Amazon S3 Storage](https://aws.amazon.com/s3/) (s3).
|
||||||
|
|
||||||
|
## Before You Begin
|
||||||
|
|
||||||
|
This guide assumes you already have an AWS account as well as the necessary authentication and permissions to create
|
||||||
|
resources in the account.
|
||||||
|
|
||||||
|
Whether you choose to create your resources using the [awscli](https://aws.amazon.com/cli/) or use something like
|
||||||
|
[Terraform](https://www.terraform.io/), the resources required are the same.
|
||||||
|
|
||||||
|
## S3 Bucket
|
||||||
|
|
||||||
|
In order to persist modules, we will create a s3 bucket for storage.
|
||||||
|
|
||||||
|
Below are two examples of creating the s3 bucket using the [awscli](https://aws.amazon.com/cli/) and [Terraform](https://www.terraform.io/).
|
||||||
|
|
||||||
|
`awscli`:
|
||||||
|
```shell
|
||||||
|
$ aws s3api create-bucket --bucket athens-proxy-us-east-1-123456789012 --region us-east-1
|
||||||
|
```
|
||||||
|
|
||||||
|
`terraform`:
|
||||||
|
```terraform
|
||||||
|
resource "aws_s3_bucket" "cache" {
|
||||||
|
bucket = "athens-proxy-us-east-1-123456789012"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
_note: it is a good idea to use environment, region, and/or account ID as components to the bucket name due to their
|
||||||
|
[globally unique naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)._
|
||||||
|
|
||||||
|
## ECS Task IAM Role
|
||||||
|
|
||||||
|
In order for the ECS container instances to use the s3 bucket, we will need to configure the task IAM role to
|
||||||
|
include the proper `allow` rules.
|
||||||
|
|
||||||
|
Below is a least-privileged policy document in both JSON and Terraform to enable ECS containers s3 bucket access to
|
||||||
|
store and retrieve cache assets.
|
||||||
|
|
||||||
|
`json`:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Version": "2012-10-17",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Action": [
|
||||||
|
"s3:ListBucket",
|
||||||
|
"s3:GetBucketLocation"
|
||||||
|
],
|
||||||
|
"Resource": "arn:aws:s3:::athens-proxy-us-east-1-123456789012"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Action": [
|
||||||
|
"s3:PutObject",
|
||||||
|
"s3:GetObject",
|
||||||
|
"s3:DeleteObject"
|
||||||
|
],
|
||||||
|
"Resource": "arn:aws:s3:::athens-proxy-us-east-1-123456789012/*"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`terraform`:
|
||||||
|
```terraform
|
||||||
|
resource "aws_iam_policy" "task_role" {
|
||||||
|
name = "athens-proxy-task-role"
|
||||||
|
path = "/"
|
||||||
|
policy = data.aws_iam_policy_document.task_role_policy.json
|
||||||
|
}
|
||||||
|
|
||||||
|
data "aws_iam_policy_document" "task_role_policy" {
|
||||||
|
statement {
|
||||||
|
effect = "Allow"
|
||||||
|
actions = [
|
||||||
|
"s3:ListBucket",
|
||||||
|
"s3:GetBucketLocation"
|
||||||
|
]
|
||||||
|
resources = [aws_s3_bucket.cache.arn]
|
||||||
|
}
|
||||||
|
statement {
|
||||||
|
effect = "Allow"
|
||||||
|
actions = [
|
||||||
|
"s3:PutObject",
|
||||||
|
"s3:GetObject",
|
||||||
|
"s3:DeleteObject"
|
||||||
|
]
|
||||||
|
resources = ["${aws_s3_bucket.cache.arn}/*"]
|
||||||
|
}
|
||||||
|
statement {
|
||||||
|
effect = "Allow"
|
||||||
|
actions = [
|
||||||
|
"sts:AssumeRole",
|
||||||
|
"sts:TagSession"
|
||||||
|
]
|
||||||
|
resources = ["*"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## ECS Task Definition
|
||||||
|
|
||||||
|
In order for Athens to be able to authenticate to the s3 bucket, we will need to configure the storage variables
|
||||||
|
associated with s3.
|
||||||
|
|
||||||
|
Below is an excerpt from a task definition that shows the minimum environment variables needed.
|
||||||
|
|
||||||
|
```json
|
||||||
|
"environment": [
|
||||||
|
{"name": "AWS_REGION", "value": "us-east-1"},
|
||||||
|
{"name": "AWS_USE_DEFAULT_CONFIGURATION", "value": "true"},
|
||||||
|
{"name": "ATHENS_STORAGE_TYPE", "value": "s3"},
|
||||||
|
{"name": "ATHENS_S3_BUCKET_NAME", "value": "athens-proxy-us-east-1-123456789012"},
|
||||||
|
]
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user