Pulumi에서 AWS Application Load Balancer 구축

17352 단어 TypeScriptAWSPulumi
Pulumi는 인프라 시설 as코드를 실현하는 도구이다.Microsoft Azure GCP, AWS 등 클라우드 서비스의 경우 TypeScript 또는 Python이 작성한 코드로 클라우드 자원을 배치할 수 있다.
예를 들어, 다음 코드를 사용하여 AWS VPC를 구축할 수 있습니다.
const vpc = new aws.ec2.Vpc("my-vpc", {
  cidrBlock: "10.0.0.0/16",
  tags: { Name: "my-vpc" }
});

환경

  • Windows 10 Pro 1809
  • Windows Subsystem for Linux (Bash on windows) Ubuntu 16.04.4 LTS
  • 풀루미를 써보도록 하겠습니다.


    Download and Install - Pulumi에 기재된 대로 설치할 수 있습니다.이번에는 WSL에서 실행되기 때문에 Linux 버전을 사용합니다.
    wsl
    $ curl -fsSL https://get.pulumi.com | sh
    
    항목을 설정합니다.
    이번 사용aws-typescript.
    wsl
    $ pulumi login --local
    $ pulumi new aws-typescript --dir my-project-name
    $ cd my-project-name
    

    구성할 구성


    AWS 애플리케이션 로드 밸런싱(ALB)을 구축합니다.
    이 중 /first/target/path 경로로 접근하고 /second/target/path 경로로 접근하는 경우 전송할 대상 그룹을 전환합니다.

    실제로 제작된 물건은 다음과 같다.
  • VPC
  • 인터넷 게이트웨이
  • 2개의 서브넷
  • 어플리케이션 로드 밸런서
  • 두 개의 타겟 그룹
  • 감청 프로그램
  • 2개의 감청 프로그램 규칙
  • 실제 절차


    index.ts
    import * as aws from "@pulumi/aws";
    
    // ネットワークの作成
    const vpc = new aws.ec2.Vpc("my-vpc", {
      cidrBlock: "10.0.0.0/16",
      tags: { Name: "my-vpc" }
    });
    
    const igw = new aws.ec2.InternetGateway("my-igw", {
      vpcId: vpc.id,
      tags: { Name: "my-igw" }
    }, vpc);
    
    const generateSubnet = (name: string, cidr: string, vpc: aws.ec2.Vpc) => {
      return new aws.ec2.Subnet(name, {
        cidrBlock: cidr,
        vpcId: vpc.id
      });
    };
    
    const subnet1 = generateSubnet("my-subnet1", "10.0.1.0/24", vpc);
    const subnet2 = generateSubnet("my-subnet2", "10.0.2.0/24", vpc);
    
    // ロードバランサーの作成
    const alb = new aws.applicationloadbalancing.LoadBalancer("my-lb", {
      subnets: [subnet1.id, subnet2.id],
    });
    
    const tgParams: aws.applicationloadbalancing.TargetGroupArgs = {
      port: 80,
      protocol: "HTTP",
      vpcId: vpc.id
    };
    
    const tg1 = new aws.applicationloadbalancing.TargetGroup("my-tg1", tgParams);
    const tg2 = new aws.applicationloadbalancing.TargetGroup("my-tg2", tgParams);
    
    // リスナールールの作成
    const listener = new aws.elasticloadbalancingv2.Listener("my-listener", {
        defaultActions: [{
          targetGroupArn: tg1.arn,
          type: "forward",
        }],
        loadBalancerArn: alb.arn,
        port: 443
    });
    
    const generateListenerRule = (
      name: string,
      path: string,
      tg: aws.applicationloadbalancing.TargetGroup,
      listener: aws.applicationloadbalancing.Listener
    ) => {
      return new aws.elasticloadbalancingv2.ListenerRule(name, {
        actions: [{
          targetGroupArn: tg.arn,
          type: "forward"
        }],
        conditions: [{
          field: "path-pattern",
          values: path,
        }],
        listenerArn: listener.arn,
      });
    };
    
    const listenerRule1 = generateListenerRule("my-listener1", "/first/target/path", tg1, listener);
    const listenerRule2 = generateListenerRule("my-listener2", "/second/target/path", tg2, listener);
    
    // Export
    export const ALB_ID = alb.id;
    

    배치

    preview 명령, 실제 응용 내용을 확인할 수 있습니다.
    wsl
    $ pulumi preview
    
    up 배포를 명령합니다.--yes를 뜯으면 확인 입력 대기가 발생합니다.
    wsl
    $ pulumi up --yes
    

    치우다


    다음 명령을 사용하여 AWS의 리소스와 Pulumi의 stack을 제거할 수 있습니다.
    $ pulumi destroy
    $ pulumi stack rm
    
    또한 내 경우 네트워크 게이트웨이와 VPC의 삭제가 원활하지 않기 때문에 수동으로 진행해야 한다.

    총결산


    프로그램으로 클라우드 서비스 설정을 작성할 수 있다면, 유사한 설정을 구축할 때 함수화하거나, 변수와 파라미터로 다음 서비스 간의 의존 관계를 나타낼 수 있다는 장점이 있습니다.
    const alb = new aws.applicationloadbalancing.LoadBalancer("my-lb", {
      subnets: [subnet1.id, subnet2.id],
    });
    
    푸루미는 식단과 경험 기술이 유행하면 사용하기 쉬워지지 않을까 싶어요.

    Tips


    CLI 강제 종료


    CLI 등을 중간에 중지하고 처리를 중단하면 다음과 같은 오류가 발생합니다.
    These resources are in an unknown state because the Pulumi CLI was interrupted while
    waiting for changes to these resources to complete. You should confirm whether or not the
    operations listed completed successfully by checking the state of the appropriate provider.
    For example, if you are using AWS, you can confirm using the AWS Console.
    
    Once you have confirmed the status of the interrupted operations, you can repair your stack
    using 'pulumi stack export' to export your stack to a file. For each operation that succeeded,
    remove that operation from the "pending_operations" section of the file. Once this is complete,
    use 'pulumi stack import' to import the repaired stack. 
    
    stack의 상태를 내보내고 편집해야 합니다.내보내기 컨텐트에 대한 자세한 정보가 없으므로 편집용 명령만 표시됩니다.
    wsl
    $ pulumi stack export --file exported.json
    $ code exported.json # 適当に編集
    $ pulumi stack import --file exported.json
    

    참고 자료

  • https://pulumi.io/reference/pkg/python/pulumi_aws/applicationloadbalancing/
  • https://github.com/pulumi/pulumi-aws/blob/master/sdk/nodejs/applicationloadbalancing/targetGroup.ts
  • https://github.com/jen20/pulumi-aws-vpc/blob/master/src/index.ts
  • 좋은 웹페이지 즐겨찾기