CDK를 사용하여 Fargate의 with Type Script 구축

18912 단어 TypeScriptAWS CDKtech
최근에 AWS를 배우기 시작했어요.처음엔 콘솔으로 툭툭 하고 했지만 자기가 한 일을 뒤돌아보기 쉬워 CDK를 사용하게 됐다.
이번에는 CDK Fargate를 사용하여 샘플 애플리케이션을 조작해 보았습니다.언어는 Type Script입니다.
이번에 쓴 코드는 아래에 놓아라.
https://github.com/hirokisakabe/fargate-cdk-sample

AWS CDK 설정


다음 내용을 참고하여 진행하시오.
https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html
다음 내용을 참고하여 AWS 계정을 만드십시오.
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-prereqs.html
로컬 시스템에 AWS CLI 및 CDK를 설치합니다.
$ brew install awscli aws-cdk
아래 내용을 참조하여 AWS 계정을 AWS CLI에 연결합니다.
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
$ aws configure
CDK를 초기화합니다.
$ cdk bootstrap aws://<AWSアカウントID>/<リージョン>
CDK 프로젝트를 초기화합니다.이번에는 Type Script를 사용합니다.
$ cdk init app --language typescript
$ ls
bin/
lib/
node_modules/
test/
README.md
cdk.json
jest.config.js
package-lock.json
package.json
tsconfig.json
에 필요한 파일이 모두 생성되었습니다.

Docker 이미지 준비


실행할 Docker 이미지를 준비합니다.
이번에는 다음 노드입니다.js의 샘플 페이지에 따라 진행합니다.
https://nodejs.org/ja/docs/guides/nodejs-docker-webapp/
포트와 견본 페이지만 달리 80이 되었다.
잠시 후 패키지-lock.json을 생성해야 하기 때문에 Node입니다.js를 설치합니다.
$ brew install node@14
이번에는 CDK 창고에서 앱/카탈로그를 만들고 거기에 코드를 배치한다.
$ mkdir app
$ cd app
샘플 페이지를 따라 파일을 준비합니다.
package.json
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
server.js
"use strict";

const express = require("express");

const PORT = 80;
const HOST = "0.0.0.0";

const app = express();
app.get("/", (req, res) => {
  res.send("Hello World");
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
Dockerfile
FROM node:12

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 80
CMD [ "node", "server.js" ]
dockerignore
node_modules
npm-debug.log
package-lock.json을 생성합니다.
$ npm install
Docker 이미지를 구성합니다.
$ docker build . -t node-web-app
운전해 보세요.
$ docker run -p 80:80 -d node-web-app

로컬 실행 확인🎉

ECR에 Docker 이미지push


다음 내용을 참고하여 진행하시오.
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/docker-push-ecr-image.html
ECR 인증 Docker 클라이언트
$ aws ecr get-login-password --region <リージョン> | docker login --username AWS --password-stdin <AWSアカウントID>.dkr.ecr.<リージョン>.amazonaws.com
ECR 창고를 제작한다.
이번에는 Sample-node-web-app라는 이름으로 제작되었습니다.
$ aws ecr create-repository \
    --repository-name sample-node-web-app \
    --image-scanning-configuration scanOnPush=true \
    --region <リージョン>
IMAGE ID를 확인합니다.
$ docker image ls
REPOSITORY          TAG             IMAGE ID       CREATED          SIZE
node-web-app        latest          75ed3927be19   7 minutes ago    920MB
이미지에 ECR용 레이블을 추가합니다.
$ docker tag 75ed3927be19 <AWSアカウントID>.dkr.ecr.<リージョン>.amazonaws.com/sample-node-web-app:latest
그림을push합니다.
$ docker push <AWSアカウントID>.dkr.ecr.region.amazonaws.com/sample-node-web-app:latest

CDK를 사용한 Fargate 구축


드디어 본론에 들어섰다.
lib/fargate-cdk-sample-stack.개작
아래 내용을 참고하시오.
https://github.com/aws-samples/aws-cdk-examples/tree/master/typescript/ecs/fargate-application-load-balanced-service
lib/fargate-cdk-sample-stack.ts
import { Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as ecr from "aws-cdk-lib/aws-ecr";
import * as ecs from "aws-cdk-lib/aws-ecs";
import * as ecs_patterns from "aws-cdk-lib/aws-ecs-patterns";

export class FargateCdkSampleStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const vpc = new ec2.Vpc(this, "MyVpc", { maxAzs: 2 });
    const cluster = new ecs.Cluster(this, "Cluster", { vpc });

    const repository = ecr.Repository.fromRepositoryName(
      this,
      "SampleRepository",
      "sample-node-web-app"  // 先ほど作ったリポジトリ名
    );

    new ecs_patterns.ApplicationLoadBalancedFargateService(
      this,
      "FargateService",
      {
        cluster,
        taskImageOptions: {
          image: ecs.ContainerImage.fromEcrRepository(repository),
        },
      }
    );
  }
}
설계를 진행하다.
$ cdk synth
$ cdk deploy
cdk deploy에서 콘솔에 마지막으로 액세스한 URL입니다.

순조롭게 프로그램 설계를 진행하였다🎉

후기


웹 콘솔로 찰칵찰칵 할 때보다 훨씬 즐거워요.
이 근처를 생각하면 즐거울 거예요.
  • 대개 Type Script의 코드를 씁니다
  • .
  • 디버깅할 때 술집이 전진하는 느낌이 자꾸 멋있어
  • 즐거움은 매우 중요하다.

    좋은 웹페이지 즐겨찾기