GitHub Actionsでソースコードを管理しAWSへデプロイするケースはよくあると思います。しかし、適切に認証情報を管理しないと思わぬ事故が発生してしまいます。 今回はAWS CDKによるAWS環境をGitHib Actionsを使用して自動でデプロイする環境を対象に、ベストプラクティスに沿った権限設定の方法をご紹介します。
本コラムでは準備編として、開発環境の準備から手動でデプロイを行う手順までを解説します。自動化編はこちら
事前準備
以下の手順で作業を行います。
- デプロイするWebアプリケーションの作成
- AWS CDKのセットアップ
- AWS IAM(Identity and Access Management)の準備
- AWS CDKプロジェクトの作成
本コラムで使用した動作環境は以下の通りです。
$ node -v
v16.19.1
$ npm -v
8.19.3
$ cdk --version
1.122.0 (build ae09c16)
$ aws --version
aws-cli/1.25.89 Python/3.8.10 Linux/5.4.72-microsoft-standard-WSL2 botocore/1.27.88
1.デプロイするWebアプリケーションの作成
AWSにデプロイするアプリケーションを作成します。今回はユーザーインターフェィス構築のための JavaScript ライブラリであるReactというフレームワークを利用して、お手軽にWebアプリケーションを準備します。アプリケーションはmy-appディレクトリに作成します。
$ npx create-react-app my-app --template typescript
Need to install the following packages:
create-react-app@5.0.1
Ok to proceed? (y) y
npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.
Creating a new React app in /home/mikmatsu/my-app.
Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts with cra-template-typescript...
added 1416 packages in 51s
231 packages are looking for funding
run `npm fund` for details
Initialized a git repository.
Installing template dependencies using npm...
added 40 packages, and changed 1 package in 9s
231 packages are looking for funding
run `npm fund` for details
We detected TypeScript in your project (src/App.test.tsx) and created a tsconfig.json file for you.
Your tsconfig.json has been populated with default values.
Removing template package using npm...
removed 1 package, and audited 1456 packages in 2s
231 packages are looking for funding
run `npm fund` for details
6 high severity vulnerabilities
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
Created git commit.
Success! Created my-app at /home/mikmatsu/my-app
Inside that directory, you can run several commands:
npm start
Starts the development server.
npm run build
Bundles the app into static files for production.
npm test
Starts the test runner.
npm run eject
Removes this tool and copies build dependencies, configuration files
and scripts into the app directory. If you do this, you can’t go back!
We suggest that you begin by typing:
cd my-app
npm start
Happy hacking!
npm notice
npm notice New patch version of npm available! 9.5.0 -> 9.5.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.5.1
npm notice Run npm install -g npm@9.5.1 to update!
npm notice
作成したアプリケーションをローカル環境で起動させて、問題なく動作するか確認します。
$ cd my-app
$ npm start
Compiled successfully!
You can now view my-app in the browser.
Local: http://localhost:3000
On Your Network: http://172.22.201.197:3000
Note that the development build is not optimized.
To create a production build, use npm run build.
webpack compiled successfully
No issues found.
npm startコマンドを実行すると、自動的にブラウザが起動してhttp://localhost:3000/にアクセスし、以下のような画面が表示されます。
このWebアプリケーションをAWS環境へデプロイするためにビルド(静的ファイルにバンドル)しておきます。
$ npm run build
> my-app@0.1.0 build
> react-scripts build
Creating an optimized production build...
Compiled successfully.
File sizes after gzip:
46.62 kB build/static/js/main.64df0c98.js
1.78 kB build/static/js/787.28cb0dcd.chunk.js
541 B build/static/css/main.073c9b0a.css
The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.
The build folder is ready to be deployed.
You may serve it with a static server:
npm install -g serve
serve -s build
Find out more about deployment here:
https://cra.link/deployment
これでWebアプリケーションの準備は完了です。
2.AWS CDKのセットアップ
AWS CDKを使用してデプロイするため、まずはAWS CDKをAWS環境で利用するための準備を行います。
注意: AWS CDKのセットアップには、AdministratorAccess相当の権限が必要です。権限を持つユーザーでマネジメントコンソールにログインし、AWS CloudShellで実行します。
AWS CDKの初回セットアップ(ブートストラップ実行)
ブートストラップとは、AWS特定の環境 (アカウントとリージョン))にAWS CloudFormationのテンプレートをデプロイすることを指します。 AWSより提供されているAWS CDK向けの初回セットアップ用ブートストラップを活用します。ブートストラップを実行する前に、まずはディレクトリを作成し、AWS CDKを初期化します。
$ mkdir cdk
$ cd cdk/
$ npx -y cdk init --language typescript
Applying project template app for typescript
# Welcome to your CDK TypeScript project
This is a blank project for CDK development with TypeScript.
The `cdk.json` file tells the CDK Toolkit how to execute your app.
## Useful commands
* `npm run build` compile typescript to js
* `npm run watch` watch for changes and compile
* `npm run test` perform the jest unit tests
* `cdk deploy` deploy this stack to your default AWS account/region
* `cdk diff` compare deployed stack with current state
* `cdk synth` emits the synthesized CloudFormation template
Initializing a new git repository...
Executing npm install...
✅ All done!
****************************************************
*** Newer version of CDK is available [2.66.0] ***
*** Upgrade recommended (npm install -g aws-cdk) ***
****************************************************
AWS CDKのブートストラップを実行します。
$ npx cdk bootstrap
⏳ Bootstrapping environment aws://{aws_account_id}/ap-northeast-1...
Trusted accounts for deployment: (none)
Trusted accounts for lookup: (none)
Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.
Switching from to undefined as permissions boundary
CDKToolkit: creating CloudFormation changeset...
✅ Environment aws://{aws_account_id}/ap-northeast-1 bootstrapped.
AWS CDKのブートストラップを実行すると、CDKToolkitというAWS CloudFormationのスタックが作成され、AWS CDKを実行するために必要な11個のリソースができます。
以下はAWS コマンドラインインターフェイス(AWS CLI)で論理ID、物理ID、リソースタイプを取得しています。
$ aws cloudformation describe-stack-resources --stack-name CDKToolkit | jq -r '.StackResources[]| [.LogicalResourceId, .PhysicalResourceId, .ResourceType] | @tsv'
CdkBootstrapVersion /cdk-bootstrap/hnb659fds/version AWS::SSM::Parameter
CloudFormationExecutionRole cdk-hnb659fds-cfn-exec-role-{aws_account_id}-ap-northeast-1 AWS::IAM::Role
ContainerAssetsRepository cdk-hnb659fds-container-assets-{aws_account_id}-ap-northeast-1 AWS::ECR::Repository
DeploymentActionRole cdk-hnb659fds-deploy-role-{aws_account_id}-ap-northeast-1 AWS::IAM::Role
FilePublishingRole cdk-hnb659fds-file-publishing-role-{aws_account_id}-ap-northeast-1 AWS::IAM::Role
FilePublishingRoleDefaultPolicy CDKTo-File-19ZSO9QOT0RZ9 AWS::IAM::Policy
ImagePublishingRole cdk-hnb659fds-image-publishing-role-{aws_account_id}-ap-northeast-1 AWS::IAM::Role
ImagePublishingRoleDefaultPolicy CDKTo-Imag-1JHICXM6MD5ZQ AWS::IAM::Policy
LookupRole cdk-hnb659fds-lookup-role-{aws_account_id}-ap-northeast-1 AWS::IAM::Role
StagingBucket cdk-hnb659fds-assets-{aws_account_id}-ap-northeast-1 AWS::S3::Bucket
StagingBucketPolicy CDKToolkit-StagingBucketPolicy-QYDTUAMJZGQW AWS::S3::BucketPolicy
論理ID | 物理ID | リソースタイプ |
CdkBootstrapVersion | /cdk-bootstrap/hnb659fds/version | AWS::SSM::Parameter |
CloudFormationExecutionRole | cdk-hnb659fds-cfn-exec-role-{aws_account_id}-ap-northeast-1 | AWS::IAM::Role |
ContainerAssetsRepository | cdk-hnb659fds-container-assets-{aws_account_id}-ap-northeast-1 | AWS::ECR::Repository |
DeploymentActionRole | cdk-hnb659fds-deploy-role-{aws_account_id}-ap-northeast-1 | AWS::IAM::Role |
FilePublishingRole | cdk-hnb659fds-file-publishing-role-{aws_account_id}-ap-northeast-1 | AWS::IAM::Role |
FilePublishingRoleDefaultPolicy | CDKTo-File-19ZSO9QOT0RZ9 | AWS::IAM::Policy |
ImagePublishingRole | cdk-hnb659fds-image-publishing-role-{aws_account_id}-ap-northeast-1 | AWS::IAM::Role |
ImagePublishingRoleDefaultPolicy | CDKTo-Imag-1JHICXM6MD5ZQ | AWS::IAM::Policy |
LookupRole | cdk-hnb659fds-lookup-role-{aws_account_id}-ap-northeast-1 | AWS::IAM::Role |
StagingBucket | cdk-hnb659fds-assets-{aws_account_id}-ap-northeast-1 | AWS::S3::Bucket |
StagingBucketPolicy | CDKToolkit-StagingBucketPolicy-QYDTUAMJZGQW | AWS::S3::BucketPolicy |
作成されるIAMロールは、それぞれ以下の用途で使用されます。
- CloudFormationExecutionRole: AWS CDKのデプロイを行うAWS CloudFormationに渡されるロール。
- DeploymentActionRole: デプロイに使用するロール。AWS CloudFormationを実行する権限などが付与されている。
- FilePublishingRole: Amazon S3バケットにファイルを公開するためのロール。Amazon S3へのアクセス権限が付与されている。
- ImagePublishingRole: コンテナイメージを公開するためのロール。Amazon ECRへのアクセス権限が付与されている。
- LookupRole: AWS CDKのデプロイ時に既存リソースの情報を取得するために使用するロール。リードオンリーアクセス権限が付与されている。
3.AWS IAM(Identity and Access Management)の準備
ローカル環境のIAMユーザーを使用してAWSへデプロイを行うため、ローカル環境向けのIAMユーザーを作成します。 ベストプラクティスに従い、IAMユーザーへはブートストラップで作成されたIAMロールにスイッチロールする権限のみを付与することにします。これによりIAMユーザーに付与する権限を最小限に抑えることができます。また、今回はAWS CDKだけでなく、AWS CloudFormationによるリソース作成も一部含まれているため、そちらも行えるように設定します。
参考:20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AWS IAM) Part2
以下の作業をAWS CloudShellで実行します。
- スイッチロールのみが可能なポリシードキュメントを作成
以下のJSONファイルを作成します。ブートストラップで作成されたIAMロール(先頭がcdkの名前で始まるロール群)にスイッチロールする権限のみを付与するような内容が含まれています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::*:role/cdk-*",
"arn:aws:iam::*:role/deploy-user-costom-role"
]
}
]
}
参考:
https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_prerequisites
- IAMポリシーを作成
$ aws iam create-policy \ --policy-name deploy_policy \ --policy-document file://deploy_policy.json { "Policy": { "PolicyName": "deploy_policy", "PolicyId": "ANPAQCFYCUBCLXFYTWUGA", "Arn": "arn:aws:iam::{aws_account_id}:policy/deploy_policy", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2023-MM-DDThh:mm:ssZ", "UpdateDate": "2023-MM-DDThh:mm:ssZ" } }
- IAMユーザーを作成
$ aws iam create-user \
--user-name deploy_user
{
"User": {
"Path": "/",
"UserName": "deploy_user",
"UserId": "AIDAQCFYCUBCATWXYZVHQ",
"Arn": "arn:aws:iam::{aws_account_id}:user/deploy_user",
"CreateDate": "2023-MM-DDThh:mm:ss+00:00"
}
}
- IAMユーザーに権限を付与
$ aws iam attach-user-policy \ --user-name deploy_user \ --policy-arn arn:aws:iam::{aws_account_id}:policy/deploy_policy
- スイッチロールを許可するロールポリシードキュメントを作成(AWS CloudFormation実行用)
以下のJSONファイルを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{aws_account_id}:user/deploy_user"
},
"Action": "sts:AssumeRole"
}
]
}
- IAMロールを作成(AWS CloudFormation実行用)
$ aws iam create-role \ --role-name deploy-user-costom-role \ --assume-role-policy-document file://deploy-user-costom-role.json { "Role": { "Path": "/", "RoleName": "deploy-user-costom-role", "RoleId": "AROAQCFYCUBCJZQPIIBHG", "Arn": "arn:aws:iam::{aws_account_id}:role/deploy-user-costom-role", "CreateDate": "2023-02-24T08:54:48+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{aws_account_id}:user/deploy_user" }, "Action": "sts:AssumeRole" } ] } } }
- IAMロールに必要な権限を付与
$ aws iam attach-role-policy \ --role-name deploy-user-costom-role \ --policy-arn arn:aws:iam::aws:policy/IAMFullAccess $ aws iam attach-role-policy \ --role-name deploy-user-costom-role \ --policy-arn arn:aws:iam::aws:policy/AWSCloudFormationFullAccess
権限が付与できたら、ローカル環境で使用するためのアクセスキーを発行します。
- IAMユーザーのアクセスキーを作成
$ aws iam create-access-key \
--user-name deploy_user
{
"AccessKey": {
"UserName": "deploy_user",
"AccessKeyId": "AKXXXXXXXXXXXXXXXXXX",
"Status": "Active",
"SecretAccessKey": "SAKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"CreateDate": "2023-MM-DDThh:mm:ss+00:00"
}
}
AWS CloudShellでの作業は一旦ここまでです。
次はローカル環境で以下の作業を実行します。作成したアクセスキーを、aws configureを使用してローカル環境に設定します。
$ aws configure --profile deploy_user
AWS Access Key ID [None]: AKXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: SAKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json
AWS CLIのスイッチロール用に、~/.aws/configに以下の内容を追加します。
※ここで定義するプロファイル名“deploy_role”は、自動化編 OIDCプロバイダーとIAMロールを作成で使用します。
[profile deploy_role]
role_arn = arn:aws:iam::{aws_account_id}:role/deploy-user-costom-role
source_profile = deploy_user
4.AWS CDKプロジェクトの作成
注意: この章からはローカル環境で実行します。
AWS CDKプロジェクトを作成します。 Webアプリケーションを作成したmy-appディレクトリ内で実行します。
$ npx -y cdk init --language typescript
Applying project template app for typescript
# Welcome to your CDK TypeScript project
This is a blank project for CDK development with TypeScript.
The `cdk.json` file tells the CDK Toolkit how to execute your app.
## Useful commands
* `npm run build` compile typescript to js
* `npm run watch` watch for changes and compile
* `npm run test` perform the jest unit tests
* `cdk deploy` deploy this stack to your default AWS account/region
* `cdk diff` compare deployed stack with current state
* `cdk synth` emits the synthesized CloudFormation template
Initializing a new git repository...
Executing npm install...
✅ All done!
AWS CDKのコーディング
AWS CDKを利用してAWSの環境(Amazon S3とAmazon CloudFront)を構築し、Webサイトを公開します。 まずは、cdk/lib/cdk-stack.tsにコーディングを行います。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class CdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const bucket = new cdk.aws_s3.Bucket(this, 'bucket')
const distribution = new cdk.aws_cloudfront.Distribution(this, 'distribution', {
defaultBehavior: {
origin: new cdk.aws_cloudfront_origins.S3Origin(bucket)
}, defaultRootObject: 'index.html'
})
new cdk.aws_s3_deployment.BucketDeployment(this, 'deploy', {
sources: [cdk.aws_s3_deployment.Source.asset('../build')],
destinationBucket: bucket,
distribution: distribution,
distributionPaths: ['/']
})
new cdk.CfnOutput(this, 'bucket_bucketName', {
value: bucket.bucketName
})
new cdk.CfnOutput(this, 'distribution_domainName', {
value: distribution.domainName
})
}
}
ローカル環境からデプロイ
Webサイトをローカル環境からAWSへデプロイします。
$ npx cdk deploy --profile deploy_user
✨ Synthesis time: 3.95s
CdkStack: building assets...
[0%] start: Building c9455aefa243f3cd7a810b3f6df8ed37e457d3e1d046353da27c4aa13551d4dc:current_account-current_region
[0%] start: Building 2bc265c5e0569aeb24a6349c15bd54e76e845892376515e036627ab0cc70bb64:current_account-current_region
[0%] start: Building 9cfc230c97a272787b94b77378cfd0c3b0881262116f6fe906f85147f3896c06:current_account-current_region
[0%] start: Building adb2a8b2535bde64c49ccd08e410406757de1acf50f0e7510a3459b70c4b2281:current_account-current_region
[25%] success: Built c9455aefa243f3cd7a810b3f6df8ed37e457d3e1d046353da27c4aa13551d4dc:current_account-current_region
[50%] success: Built 2bc265c5e0569aeb24a6349c15bd54e76e845892376515e036627ab0cc70bb64:current_account-current_region
[75%] success: Built 9cfc230c97a272787b94b77378cfd0c3b0881262116f6fe906f85147f3896c06:current_account-current_region
[100%] success: Built adb2a8b2535bde64c49ccd08e410406757de1acf50f0e7510a3459b70c4b2281:current_account-current_region
CdkStack: assets built
This deployment will make potentially sensitive changes according to your current security approval level (--require-approval broadening).
Please confirm you intend to make the following modifications:
IAM Statement Changes
┌───┬──────────────────────────────┬────────┬──────────────────────────────┬──────────────────────────────┬───────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${Custom::CDKBucketDeploymen │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │
│ │ t8693BB64968944B69AAFB0CC9EB │ │ │ │ │
│ │ 8756C/ServiceRole.Arn} │ │ │ │ │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${bucket.Arn} │ Allow │ s3:Abort* │ AWS:${Custom::CDKBucketDeplo │ │
│ │ ${bucket.Arn}/* │ │ s3:DeleteObject* │ yment8693BB64968944B69AAFB0C │ │
│ │ │ │ s3:GetBucket* │ C9EB8756C/ServiceRole} │ │
│ │ │ │ s3:GetObject* │ │ │
│ │ │ │ s3:List* │ │ │
│ │ │ │ s3:PutObject │ │ │
│ │ │ │ s3:PutObjectLegalHold │ │ │
│ │ │ │ s3:PutObjectRetention │ │ │
│ │ │ │ s3:PutObjectTagging │ │ │
│ │ │ │ s3:PutObjectVersionTagging │ │ │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${bucket.Arn}/* │ Allow │ s3:GetObject │ CanonicalUser:${distribution │ │
│ │ │ │ │ /Origin1/S3Origin.S3Canonica │ │
│ │ │ │ │ lUserId} │ │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ * │ Allow │ cloudfront:CreateInvalidatio │ AWS:${Custom::CDKBucketDeplo │ │
│ │ │ │ n │ yment8693BB64968944B69AAFB0C │ │
│ │ │ │ cloudfront:GetInvalidation │ C9EB8756C/ServiceRole} │ │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ arn:${AWS::Partition}:s3:::{ │ Allow │ s3:GetBucket* │ AWS:${Custom::CDKBucketDeplo │ │
│ │ "Fn::Sub":"cdk-hnb659fds-ass │ │ s3:GetObject* │ yment8693BB64968944B69AAFB0C │ │
│ │ ets-${AWS::AccountId}-${AWS: │ │ s3:List* │ C9EB8756C/ServiceRole} │ │
│ │ :Region}"} │ │ │ │ │
│ │ arn:${AWS::Partition}:s3:::{ │ │ │ │ │
│ │ "Fn::Sub":"cdk-hnb659fds-ass │ │ │ │ │
│ │ ets-${AWS::AccountId}-${AWS: │ │ │ │ │
│ │ :Region}"}/* │ │ │ │ │
└───┴──────────────────────────────┴────────┴──────────────────────────────┴──────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│ │ Resource │ Managed Policy ARN │
├───┼────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ + │ ${Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9 │ arn:${AWS::Partition}:iam::aws:policy/service-role/AWS │
│ │ EB8756C/ServiceRole} │ LambdaBasicExecutionRole │
└───┴────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)
Do you wish to deploy these changes (y/n)? y
CdkStack: deploying... [1/1]
[0%] start: Publishing c9455aefa243f3cd7a810b3f6df8ed37e457d3e1d046353da27c4aa13551d4dc:current_account-current_region
[0%] start: Publishing 2bc265c5e0569aeb24a6349c15bd54e76e845892376515e036627ab0cc70bb64:current_account-current_region
[0%] start: Publishing 9cfc230c97a272787b94b77378cfd0c3b0881262116f6fe906f85147f3896c06:current_account-current_region
[0%] start: Publishing adb2a8b2535bde64c49ccd08e410406757de1acf50f0e7510a3459b70c4b2281:current_account-current_region
[25%] success: Published 2bc265c5e0569aeb24a6349c15bd54e76e845892376515e036627ab0cc70bb64:current_account-current_region
[50%] success: Published adb2a8b2535bde64c49ccd08e410406757de1acf50f0e7510a3459b70c4b2281:current_account-current_region
[75%] success: Published 9cfc230c97a272787b94b77378cfd0c3b0881262116f6fe906f85147f3896c06:current_account-current_region
[100%] success: Published c9455aefa243f3cd7a810b3f6df8ed37e457d3e1d046353da27c4aa13551d4dc:current_account-current_region
CdkStack: creating CloudFormation changeset...
✅ CdkStack
✨ Deployment time: 772.57s
Outputs:
CdkStack.bucketbucketName = cdkstack-bucket43879c71-4z3237jd6po5
CdkStack.distributiondomainName = d1clpkp255qtzc.cloudfront.net
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:{aws_account_id}:stack/CdkStack/12e3ffe0-b40d-11ed-8a66-0656cf12c26d
✨ Total time: 776.51s
Outputsに出力されるCdkStack.distributiondDomainNameにプラウザからアクセスするとReactの初期画面が表示されます。
無事にローカル環境からデプロイが成功しました。
手動でデプロイを行う環境の準備が整いました。手動でのデプロイでは、手順のミスやデプロイ作業が属人化してしまう懸念がありますので、富士ソフトでは、開発が進んでからではなく、プロジェクトが開始した直後に自動化を導入することを推奨しています。
自動化編ではGitHub Actionsを使用したデプロイの自動化を実現する手順を解説します。
富士ソフトのAWS関連サービスについて、詳しくはこちら
アマゾンウェブサービス(AWS)
富士ソフトのIoT プラットフォーム on AWSはこちら
IoTプラットフォーム on AWS