CDK의 AWS Batch 환경 제작 준비 편

18199 단어 AWSaws-cdk

개요


CDK를 사용하여 AWS 환경을 만들 때의 방법을 요약하고 싶습니다.
이번에는 준비편이니 살살 하세요
(잘 돌아가지 않는 곳이 있어서...)

차리다


  • 봐. AWS Summit CDK 피규어 준비해.
  • 여기도 간단하게 준비 절차를 밟았습니다.
  • AWS CLI 설치
  • AWS Configure 설정
  • 계정은 CDK에서 만든 리소스에 액세스할 수 있는 권한을 부여합니다.(시도할 경우 Administrator 권한이 더 좋을 수 있음)
  • node.js의 설치
  • npm install -g aws-cdk 명령을 사용하여 cdk 설치
  • 프로젝트 준비

  • Type Script의 예.
  • 빈 목록을 준비합니다.
  • 디렉터리로 이동하여 다음 명령을 실행합니다
  • cdk init sample-app --language typescript
  • 초기 디렉터리 생성 등을 기다립니다.
  • 완성 후 아래와 같다.

  • 라이브러리 설치

  • 필요에 따라 npm 명령을 사용하여 프로그램 라이브러리를 설치한다.다음 명령:.
  • npm install @aws-cdk/aws-ecs
  • npm install @aws-cdk/aws-batch
  • npm install @aws-cdk/aws-ec2
  • npm install @aws-cdk/aws-iam
  • npm install @aws-cdk/aws-ecr
  • 컴파일 준비

  • 프로그램 라이브러리를 설치한 후 프로젝트를 만드는 디렉터리로 이동하여 다음 명령을 실행합니다.윈도우즈를 설치할 때 프로그램 라이브러리를 정지해야 합니다. 주의하십시오
  • npm run watch
  • 소스별 설명

  • ./lib/cdk-stack.ts
  • 정의된 각 위치를 생성합니다.기본적으로 이 파일을 수정합니다
  • ./bin/cdk.ts
  • 기본적으로 편집할 필요는 없지만 VPC를 사용할 때 ID를 지정할 때는 다음과 같은 설명이 필요합니다.원래의 것을 개작하다new CdkStack(app, 'CdkStack');.
  • XXXXXXXX는 아이디입니다.본격적인 공연은 환경 변수부터 시작하는 것이 좋다.
  •     new CdkStack(app, 'CdkStack', {
        env: {
            region: 'ap-northeast-1',
            account: 'XXXXXXXXX',
        }
    
  • ./package.json
  • 에 설치된 프로그램 라이브러리가 기재되어 있습니다.버전 등이 오래되었는지 확인하세요.
  • 현재 생성된 CDK 정의

  • VPC 등의 일부 지정 ID를 지정합니다.
  • 디버깅을 마쳤지만 실례적인 역할 설정 등이 잘 안 돼...
  • 길어서 접어놨어요.
    import * as cdk from '@aws-cdk/core';
    import * as batch from '@aws-cdk/aws-batch';
    import * as dynamodb from '@aws-cdk/aws-dynamodb';
    import * as rds from '@aws-cdk/aws-rds';
    import * as s3 from '@aws-cdk/aws-s3';
    import * as ec2 from '@aws-cdk/aws-ec2';
    import * as iam from '@aws-cdk/aws-iam';
    import * as ecs from '@aws-cdk/aws-ecs';
    import * as ecr from '@aws-cdk/aws-ecr';
    import { ContainerImage, EcrImage } from '@aws-cdk/aws-ecs';
    import { Repository } from '@aws-cdk/aws-ecr';
    
    
    export class CdkStack extends cdk.Stack {
    
      constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    
        super(scope, id, props);
    
        // 既存のVPCを取得
        const vpc: ec2.IVpc = ec2.Vpc.fromLookup(this, 'VPC', {
          vpcId: 'vpc-xxxxxxxxxxx',
        });
        // 既存のサブネットを取得
        const selectSubnets: ec2.SelectedSubnets = vpc.selectSubnets({
          subnets: [
            ec2.Subnet.fromSubnetAttributes(this, 'Subnet', {
              subnetId: 'subnet-xxxxxxxxxx',
              availabilityZone: 'ap-northeast-1a',
              routeTableId: 'rtb-xxxxxxxxxx',
            }),
          ]
        });
    
        // 既存のセキュリティーグループを取得
        const securityGroup: ec2.ISecurityGroup = ec2.SecurityGroup.fromSecurityGroupId(
          this, 'SecurityGroup', 'sg-xxxxxxxxx',
        );
    
    
    
        // バッチのロール
        const batchRole: iam.IRole = new iam.Role(this, 'BatchRole', {
          roleName: 'TestBatchRole',
          assumedBy: new iam.CompositePrincipal(
            new iam.ServicePrincipal('batch.amazonaws.com'),
          ),
          managedPolicies: [
            iam.ManagedPolicy.fromManagedPolicyArn(
              this,
              'AWSBatchServiceRole',
              'arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole',
            ),
          ],
        });
    
    
        // Job用ロールを作成
        const jobRole: iam.IRole = new iam.Role(this, 'JobRole', {
          roleName: 'TestJobRole',
          assumedBy: new iam.CompositePrincipal(
            new iam.ServicePrincipal('ecs-tasks.amazonaws.com'),
          ),
          managedPolicies: [
            iam.ManagedPolicy.fromManagedPolicyArn(
              this,
              'AmazonECSTaskExecutionRolePolicy',
              'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy',
            ),
          ],
        });
    
    
        // コンピューティング環境を作成 TODO ロールの設定ができていない
        const computeEnvironment: batch.ComputeEnvironment = new batch.ComputeEnvironment(this, 'BatchCompute', {
          computeEnvironmentName: 'TestComputeEnvironment',
          computeResources: {
            type: batch.ComputeResourceType.ON_DEMAND,
            vpc: vpc,
            vpcSubnets: selectSubnets,
            securityGroups: [securityGroup],
          },
          serviceRole:batchRole
        });
    
    // 既存のリポジトリを指定
        const repository = Repository.fromRepositoryName(this,'pandastestRepo','pandastest2')
    
        const ecscontainerImage =  ecs.ContainerImage.fromEcrRepository( repository,'latest')
    
    // 引数と環境変数を適当に設定 
        const jobDefinec = new batch.JobDefinition(this, 'JobDefinition', {
          jobDefinitionName: 'pandasTest',
          container: {
            command: ['1','3','A'],  
            environment: {'RDS_PASS': 'password','TEST':'ABC'},
            image: ecscontainerImage,
            jobRole: jobRole,
            vcpus: 1,
            memoryLimitMiB: 32,
          },
        });
    
      }
    }
    
    
    
    
    

    좋은 웹페이지 즐겨찾기