AWSネイティブビルド

Screwdriverは、Code BuildまたはEKSで実行されるAWSネイティブビルドのオーケストレーションに使用することができます。

アーキテクチャ図 diagram.

この統合では、AWS MSKを使用して、ユーザー自身のAWSアカウントでユーザーのビルドをスケジュールするものです。これにより、Screwdriverクラスターの管理者は、異なるユーザーのビルドをそれぞれのAWSアカウントに送信し、互いに影響を及ぼさないマルチテナントのビルド環境を構築することができます。 また、ユーザーはScrewdriverにアカウントやネットワークアクセスを提供することなくScrewdriverと統合し、IAMロールIDに支えられたセキュアなAWSデプロイメントを実行することが可能です。

設定

この機能を利用するには、Screwdriverクラスターの管理者は、aws-producer-scriptsを使用してAWS MSKインフラを構築し、queue-serviceで有効化する必要があります。

統合を希望するユーザーは、Screwdriverクラスターの管理者と協力して、ビルドをスケジューリングするためにAWSアカウントを登録する必要があります。

登録が完了したら、ユーザーはスクリプトを実行して、ビルドインフラを構築する必要があります。

イメージ

imageの設定は、hub.docker.comのコンテナや、公開されているAWS ECRのイメージのコンテナなどのDockerイメージを参照します。

自身のAWSアカウントのリージョンでサポートされているイメージの一覧を確認する方法:

aws codebuild list-curated-environment-images

イメージのURL全体を指定することで、カスタムレジストリや自身のAWS ECR上のイメージを指定できます。 インフラ構築時に、必要な権限を持ったECRを作成したい場合は、aws-consumer-scriptscreate_ecrフラグを設定すれば可能です。

jobs:
    main:
        requires: [~pr, ~commit]
        image: 123456789012.dkr.ecr.us-west-2.amazonaws.com/screwdriver-hub:example_image
        provider:
          ...mandatory_params
        steps:
            - step1: echo hello

プロバイダーの設定

クラウドプロバイダーに関する設定を識別するために、プロバイダー設定が必要です。AWSネイティブビルドの場合、Virtual Private Cloud(VPC)、インバウンド・アウトバウンドの通信を定義するサブネットとセキュリティグループ、権限に基づいて様々なAWSサービスにアクセスするためのIAMロールのそれぞれの識別子が含まれます。

プロパティ 説明
name aws 対応クラウドプロバイダー名
region us-east-1 / us-west-2 / all AWS regions デフォルトは us-west-2。 必要なインフラを構築し、ビルドを実行するリージョンを定義します。
accountId 有効なAWSアカウントID ビルドを構築するAWSアカウントIDを定義します。
vpcId 有効なAWS VPC ID AWS VPC IDを定義します。
securityGroupIds 有効なセキュリティグループのIDのリスト AWS Security Group IDを定義します。
subnetIds 有効なサブネットIDのリスト AWS Subnet IDを定義します。
role 有効なAWS IAM RoleのARN 権限とポリシーが紐づいたAWS IAM RoleのARNを定義します。
executor sls / eks ネイティブビルドの2つのエグゼキューターモードを定義します。: sls (AWS CodeBuild), eks (AWS EKS)
launcherImage 有効なScrewdriver launcherのDockerイメージ ビルドを開始するために必要なScrewdriver launcherイメージを定義します。例: screwdrivercd/launcher:v6.0.149
launcherVersion 例: v6.0.149 Screwdriver launcherイメージのバージョン
buildRegion us-east-1 / us-west-2 ビルドを実行するリージョンがサービスリージョンと異なる場合に設定します。デフォルトはregionと同じ値です。
executorLogs true / false AWS CodeBuildプロジェクトのログをAWS CloudWatchで表示するためのフラグです。デフォルトはfalseです。
privilegedMode true / false AWS CodeBuildプロジェクトのDockerビルドで特権モードを有効にするためのフラグです。デフォルトはfalseです。
computeType 全ての有効な AWS CodeBuild Compute Types 利用可能なメモリ、vCPU、およびディスク領域を持つ様々なコンピュートタイプを定義します。デフォルトはBUILD_GENERAL1_SMALLです。
environmentType 全ての有効な AWS CodeBuild Environment computeType に対応する様々な環境のタイプを定義します。デフォルトはLINUX_CONTAINERです。

ジョブレベルプロバイダーの設定

プロバイダーの設定はscrewdriver.yamlのジョブ内に設定できます。次の例はプロバイダーの設定に必須のパラメータを定義した例です。

jobs:
  main:
    requires: [~pr, ~commit]
    image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
    provider:
      name: aws
      region: us-west-2
      accountId: 123456789012
      vpc:
        vpcId: vpc-0123abc
        securityGroupIds:
          - sg-0123abc
        subnetIds:
          - subnet-0123abc
          - subnet-0123def
          - subnet-0123ghi
      role: arn:aws:iam::123456789012:role/screwdriver-integration-role
      executor: sls
      launcherImage: screwdrivercd/launcher:v6.0.149
      launcherVersion: v6.0.149
    steps:
      - init: npm install
      - test: npm test

外部プロバイダーの設定

また、プロバイダーの設定は、別のリポジトリにリモートで保存することもできます。チェックアウトURLをCHECKOUT_URL#BRANCH:PATHというフォーマットで記述することで、この設定を参照することができます。

jobs:
  main:
    requires: [~pr, ~commit]
    image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
    provider: git@github.com:configs/aws.git#main:cd/aws/provider.yaml
    steps:
      - init: npm install
      - test: npm test

Sharedプロバイダーの設定

providerの設定は、sharedに追加できます。ジョブに指定されたプロバイダー設定は、shared.provider上の同じ項目を上書きします。

以下の例では、main と main2 のジョブが使用するproviderの共有設定を定義しています。

shared:
  image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
  provider:
    name: aws
    region: us-west-2
    accountId: 123456789012
    vpc:
      vpcId: vpc-0123abc
      securityGroupIds:
        - sg-0123abc
      subnetIds:
        - subnet-0123abc
        - subnet-0123def
        - subnet-0123ghi
    role: arn:aws:iam::123456789012:role/screwdriver-integration-role
    executor: sls
    launcherImage: screwdrivercd/launcher:v6.0.149
    launcherVersion: v6.0.149

jobs:
    main:
      requires: [~pr, ~commit]
      steps:
        - init: npm install
        - pretest: npm lint
        - test: npm test
    main2:
      requires: [main]
      steps:
          - test: echo Skipping test

上の例は次の例と同じものになります:

jobs:
    main:
        requires: [~pr, ~commit]
        image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
        provider:
          ...same as shared
        steps:
            - init: npm install
            - pretest: npm lint
            - test: npm test
    main2:
        requires: [main]
        image: aws/codebuild/amazonlinux2-x86_64-standard:3.0
        provider:
          ...same as shared
        steps:
            - test: echo Skipping test