joppot

コピペで絶対動く。説明を妥協しない

プログラミング

Deploy React to s3 with aws command

投稿日:


Abstract

Hello veryone it’s me candle. In this time I will show you how to deploy a react project created by create-react-app to S3. A good thing about React web app is that you can publish the products created by building them as long as you upload them such as html and js files and images to storage.

In this article I don’t write these three items.

  1. How to get a IAM that can access to S3
  2. Allocate your own domain using Route53
  3. SSL connection of React web app

Condition

  1. You have aws command

Please install the aws command in Mac beforehand. Recommendation is to install awscli with brew.

Preparation

This post really deploys the react web app to the world. From the viewpoint of security and privacy and so on, it is recommended to create a sample project if it is bad to publish the service you are making now.

Create the project wit this command.

create-react-app react-deploy-sample
cd react-deploy-sample

We don’t edit the files. We will deploy it with plain file structure.

Create a S3 bucket of the deployment destination

Go to the S3 management console of aws and push the “Create bucket”.


Note If you want to allocate your own domain of Route53 to the bucket, make sure that the S3 bucket name and domain name acquired by Route53 are the same.

For example, if domain name is “hogehoge.com”, S3 bucket name should be “hogehoge.com”.


In the first “Name and region” section, make it an arbitrary bucket name and the region will be ”Asia Pacific (Tokyo)” in Japan. Push the “Next” button.

In the “Configure options” section, do not do anything and push the “next”.

In the “Set permissions”, since it is a bucket to be released, all checks are to be removed. Push the “Next”, and on the last confirmation screen, push the “Create bucket” button to create the bucket.

Static page publishing settings

Next, choose the created bucket from buckets list, select the “Static website hosting” from the “property” tab.

Choose “Use this bucket to host a website”, and fill in”index document” with index.html.

The above end point is the URL where the React web app will be released. Of course it is also possible to allocate another domain later in Route53. Please copy that end point URL.

Push the “Save” button.

Now the react project is uploaded here, index.html can be used as a web page.

Bucket policy to publish

Write a bucket policy for publishing this bucket externally. Select “Bucket Policy” on “Permissions” tab.

Write this in the editor. Please write your S3 bucket name in “bucket_name”.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket_name/*"
        }
    ]
}

Push the “Save” button after writing.

Get IAM for deploying to S3

The way to acquire IAM that has access authority to S3 is not directly related to this article, so I will not introduce it here. If you already have it, you would use it. However if you don’t have it yet, please get IAM’s access_key and secret_key.

In any case, you should prepare access_key and secret_key that can access S3.

Register Access Key and Secret Key

Let’s register acquired IAM to aws command config. When registering IAM, decide the profile name. In this article we name it test, but in many cases we will use the service name.

Open the ~/.aws/credentials with favorite editor.

We will write the contents like this.

[test]
aws_access_key_id = 12345678987654321
aws_secret_access_key = qwerty987654321

If [default] has already been written, write [test] below it. [test] is the profile name.

I think that it is well known thing, please never release access_key and secret_key. the keys of the below image is dummy.

After saving, next open the ~/.aws/config. Write this (I’m japanese, so i set up ap-northeast-1).

[profile test]
region = ap-northeast-1

Then aws configuration is over. When uploading to s3 with the aws command, you can upload the files by specifying the test profile.

Deploy the react project

Back to the React sample project again. There are not build foler yet.
Build the production code before uploading to S3.

Let’s build.

GENERATE_SOURCEMAP=false yarn run build

My React version is 16.6.x, so the structure of the file is a little new.

When the build folder is completed, we will upload this to S3.

This is the general upload command.

aws s3 sync /build s3://{Bucket name} --exclude '*.DS_Store' --acl public-read --profile {Profile name}

In my case, like this.

aws s3 sync build/ s3://the_name_of_bucket --exclude '*.DS_Store' --acl public-read --profile test

OK we deployed it successfully.

Cheking

Open the endpoint URL at the time of creation of the bucket in the browser.

(In addition, perhaps your region is different from this URL)

http://buchekt_name.s3-website-ap-northeast-1.amazonaws.com

React web app is running.

Conclusion

It is really useful to be able to deploy reat’s production environment rapidly and run it without a server.

スポンサードリンク

If you think this article is good, share it please

-プログラミング
-, , ,

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

How to change the language form “en-US” to “en” by wordpres bogo

English 日本語 Abstract Hello everyone, It’s me candle. In this time, I will show you to customize bogo plugins. The bogo is wonderful plugin which can adapt the wordpress site to many languages as a simple. but, there is a problem that you can’t choose general English. When writing English articles, you may not always have to write it limited to country. However, you can choose ‘en-UK’, ‘en-CA’ and ‘en-US’, but ‘en’ can not be chosen in bogo. I checked the source code. The bogo got a language list from wordpress function, and there is no general English in it. …

React Native slows down when debugging on Google Chrome

English 日本語 Abstract Hello everybody, It’s candle. This time, we will solve the problem that using simulator is going to slow down when debugging on the Google Chrome Anyway, It is solved in a simple way. we use Chromium instead of Google Chrome. Premise React development environment has been established

Remove or allow the html tag with javascript + React and take measures against XSS

Abstract Hello everyone it’s me candle. In this time, we will write a program which displays only the permitted html tags by React and delete other tags. Notice, displaying originally html contents, it may has a security risk such as XSS. First of all, I am not a security expert, so there is a possibility of a bug in the code. Of course, I check it and test it as long as I do. If you find any vulnerabilities in the code, it would be helpful if you point out it in the post comment form. Condition Nothing Preparation of …

Lazy load image with react-lazyload

Abstract Hello everyoen it’s me candle. This time let’s make a delayed loading of images with react-lazyload. The problem of SPA is the delay at the time of initial loading. Among them, we feel that the site with many images is even late. Let’s try it. Condition Nothing Prepare If you have already developing react project, use it. But you don’t have yet or try to test. Generate it with this command. create-react-app imageloader-sample cd imageloader-sample We will prepare images for samples with Faker.js, so install it. yarn add faker Ready to develop. Make a sample code Open the src/App.js …

Use react-simple-format in React web

Abstract Hello everyone it’s me candle. In this article we will use simple-format in react. Simple format is famous for Ruby on Rails and is commonly used. React has a legacy react-simple-format and 16g’s made. The legacy lib is not useful, so I choose 16g’s made. https://github.com/16g/react-simple-format Condition Nothing Create project If you already have a React project please use it. If not, use the following command to create it. create-react-app simple_format_sample cd simple_format_sample How to use react-simple-format First install it. yarn add @16g/react-simple-format Open a appropriate component file. I write it in src/App.js. import React, { Component } from …


I work in the venture company as a CTO. I start to write program in University, first I learned java, C++ and PHP. In the company, I'm developing web services by Rails. I do like to automation.