medusa-s3-cloudfront

1.0.1 • Public • Published

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 or production.tfvars and run
    • Make 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.


Additional Resources

/medusa-s3-cloudfront/

    Package Sidebar

    Install

    npm i medusa-s3-cloudfront

    Weekly Downloads

    1

    Version

    1.0.1

    License

    none

    Unpacked Size

    24.7 kB

    Total Files

    5

    Last publish

    Collaborators

    • naadodi