medusa-s3-cloudfront
v1.0.1
Published
AWS S3 file connector for Medusa utilising Cloudfront or Route53
Downloads
7
Maintainers
Readme
medusajs-s3-cloudfront-with-terraform
Medusajs S3 file assets with Cloudfront support and terraform for Infra support
Store uploaded files to your Medusa backend on S3 and use Domain Name or Cloudfront
Plugin Documentation | Medusa Website | Medusa Repository
Features
- Store product images on S3
- Support for importing and exporting data through CSV files, such as Products or Prices.
- Support for Bucket Policies and User Permissions.
Infra
- Infra repo can be used to apply terraform to create the asset s3 bucket
- It requires domain to be already present in Route 53 and ACM has a certificate for that domain
- Also needs a user to be already present in IAM who is going to access from medusa backend server after it is deployed. So create some user like
medusa-backend
and add the user arn- Make sure the user has Access Key and Secret key downloaded so you can use them when configuring Medusa
- Change variables inside
development.tfvars
orproduction.tfvars
and runMake sure to fill in state variables if you are using another S3 bucket to store Terraform state
Don't confuse the below access key and secret key, they should have devops admin privileges so infra can be provisioned ``` cd infra
terraform init --backend-config="bucket=${state_bucket}" \ --backend-config="key=${state_file}" --backend-config="access_key=${access_key}" --backend-config="secret_key=${secret_key}" -backend-config="region=${region}" -reconfigure terraform plan -var state_bucket="${state_bucket}" \ -var state_file=${state_file} -var-file=vars/${environment}.tfvars \ -var access_key=${access_key} -var secret_key=${secret_key} terraform apply -var state_bucket="${state_bucket}" \ -var state_file=${state_file} -var-file=vars/${environment}.tfvars \ -var access_key=${access_key} -var secret_key=${secret_key} ```
- This will create a bucket called
assets
and serve the contents using cloudfront, pointed to by your domain name
Prerequisites
How to Install
1. Run the following command in the directory of the Medusa backend:
npm install medusa-cloudfront-s3
2. Set the following environment variables in .env
:
S3_URL=<YOUR_BUCKET_URL>
S3_BUCKET=<YOUR_BUCKET_NAME>
S3_REGION=<YOUR_BUCKET_REGION>
S3_ACCESS_KEY_ID=<YOUR_ACCESS_KEY_ID>
S3_SECRET_ACCESS_KEY=<YOUR_SECRET_ACCESS_KEY>
S3_PREFIX=<YOUR_BUCKET_PREFIX> (optional)
S3_CLOUDFRONT_DISTRIBUTION_ID=<YOUR_CLOUDFRONT_DISTRIBUTION_ID> (optional)
S3_DOMAIN_URL=<YOUR_ASSETS_DOMAIN_URL> (optional) // if domain url is present, cloudfront distribution and s3 url is ignored
3. In medusa-config.js
add the following at the end of the plugins
array:
const plugins = [
// ...
{
resolve: `medusa-cloudfront-s3`,
options: {
s3_url: process.env.S3_URL,
bucket: process.env.S3_BUCKET,
prefix: process.env.S3_PREFIX, // optional
region: process.env.S3_REGION,
access_key_id: process.env.S3_ACCESS_KEY_ID,
secret_access_key: process.env.S3_SECRET_ACCESS_KEY,
cloudfront_distribution_id: process.env.S3_CLOUDFRONT_DISTRIBUTION_ID,
domain_url: process.env.S3_DOMAIN_URL,
aws_config_object: {},
},
},
]
Test the Plugin
1. Run the following command in the directory of the Medusa backend to run the backend:
npm run start
2. Upload an image for a product using the admin dashboard or using the Admin APIs.