[アップデート]Step FunctionsでCodeBuild統合がサポートされました
Step FunctionsでCodeBuildとの統合がサポートされました。
今回のアップデートにより、Lambda Functionsなどを介さず直接、CodeBuildの制御が行えるようになります。ここでは、統合でサポートされている操作の一部(StartBuild)を試してみたいと思います。
事前準備
以下ドキュメントをベースに、CodeBuild(ビルドプロジェクト)を作成しました。
やってみた
ステートマシン作成
ビルド実行を開始するだけの、もの凄いシンプルなステートマシンを作成しました。
定義は以下となります。
{ "Comment": "An example of using CodeBuild to run tests, get test results and send a notification.", "StartAt": "Trigger CodeBuild Build", "States": { "Trigger CodeBuild Build": { "Type": "Task", "Resource": "arn:aws:states:::codebuild:startBuild.sync", "Parameters": { "ProjectName": "codebuild-demo-project" }, "End": true } } }
タスクにて、StartBuild APIを呼び出しています。.sync
サフィックスを追加してビルド完了まで待機する定義です。ProjectName
で、ビルド実行を開始するプロジェクトの名前を指定しています。
ステートマシンのサービスロールではCodeBuildに対する権限が必要になりますので、IAMロールに必要な権限を付与しています。以下が参考になります。
ステートマシン実行
ステートマシン実行前(ビルド実行前)に、アーティファクト出力先バケットが空であることを確認しました。
$ aws s3api list-objects --bucket codebuild-ap-northeast-1-123456789012-output-bucket $
ステートマシンを実行します。
$ aws stepfunctions start-execution \ --state-machine-arn arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:stateMachine:TestCodeBuildStateMachine { "executionArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:execution:TestCodeBuildStateMachine:6e7af264-84e7-40e3-8447-a3c94f30616f", "startDate": 1588747745.583 }
しばらくすると、ビルドおよびステートマシンの実行が完了しました。
ビルドプロジェクト
ステートマシン
ステートマシン実行後に、アーティファクトが出力されていることを確認しました。
$ aws s3api list-objects --bucket codebuild-ap-northeast-1-123456789012-output-bucket { "Contents": [ { "Key": "codebuild-demo-project/target/messageUtil-1.0.jar", "LastModified": "2020-05-06T06:50:58.000Z", "ETag": "\"66774fad872c07159a15b92b885ecf4e\"", "Size": 2127, "StorageClass": "STANDARD", "Owner": { "DisplayName": "members-23841", "ID": "1679c517d90f700d99ff6c8130d6c44eb13076f7861796180f689ab6843c45ca" } } ] }
ビルドを実行したステート(ここではTrigger CodeBuild Build
)の出力を以下に添付しました。少々長いので折りたたみました。確認する際はクリックして展開してください。
Trigger CodeBuild Buildの出力
{ "SdkHttpMetadata": { "HttpHeaders": { "Content-Length": "3163", "Content-Type": "application/x-amz-json-1.1", "Date": "Wed, 06 May 2020 06:51:02 GMT", "x-amzn-RequestId": "492dc025-497d-4562-94a9-c4ee94076b1f" }, "HttpStatusCode": 200 }, "SdkResponseMetadata": { "RequestId": "492dc025-497d-4562-94a9-c4ee94076b1f" }, "Build": { "Arn": "arn:aws:codebuild:ap-northeast-1:XXXXXXXXXXXX:build/codebuild-demo-project:d50cd497-65a8-45a6-9d66-b33d64371f65", "Artifacts": { "EncryptionDisabled": false, "Location": "arn:aws:s3:::codebuild-ap-northeast-1-123456789012-output-bucket/codebuild-demo-project", "Md5sum": "", "OverrideArtifactName": false, "Sha256sum": "" }, "BuildComplete": true, "BuildNumber": 6, "BuildStatus": "SUCCEEDED", "Cache": { "Type": "NO_CACHE" }, "CurrentPhase": "COMPLETED", "EncryptionKey": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXXX:alias/aws/s3", "EndTime": 1588747858077, "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "EnvironmentVariables": [], "Image": "aws/codebuild/amazonlinux2-x86_64-standard:2.0", "ImagePullCredentialsType": "CODEBUILD", "PrivilegedMode": false, "Type": "LINUX_CONTAINER" }, "Id": "codebuild-demo-project:d50cd497-65a8-45a6-9d66-b33d64371f65", "Initiator": "states/TestCodeBuildStateMachine", "Logs": { "CloudWatchLogs": { "Status": "DISABLED" }, "S3Logs": { "EncryptionDisabled": false, "Status": "DISABLED" } }, "Phases": [ { "DurationInSeconds": 0, "EndTime": 1588747746209, "PhaseStatus": "SUCCEEDED", "PhaseType": "SUBMITTED", "StartTime": 1588747745873 }, { "DurationInSeconds": 1, "EndTime": 1588747747696, "PhaseStatus": "SUCCEEDED", "PhaseType": "QUEUED", "StartTime": 1588747746209 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 42, "EndTime": 1588747790221, "PhaseStatus": "SUCCEEDED", "PhaseType": "PROVISIONING", "StartTime": 1588747747696 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 1, "EndTime": 1588747791563, "PhaseStatus": "SUCCEEDED", "PhaseType": "DOWNLOAD_SOURCE", "StartTime": 1588747790221 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 0, "EndTime": 1588747791608, "PhaseStatus": "SUCCEEDED", "PhaseType": "INSTALL", "StartTime": 1588747791563 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 0, "EndTime": 1588747791656, "PhaseStatus": "SUCCEEDED", "PhaseType": "PRE_BUILD", "StartTime": 1588747791608 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 66, "EndTime": 1588747857796, "PhaseStatus": "SUCCEEDED", "PhaseType": "BUILD", "StartTime": 1588747791656 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 0, "EndTime": 1588747857841, "PhaseStatus": "SUCCEEDED", "PhaseType": "POST_BUILD", "StartTime": 1588747857796 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 0, "EndTime": 1588747858026, "PhaseStatus": "SUCCEEDED", "PhaseType": "UPLOAD_ARTIFACTS", "StartTime": 1588747857841 }, { "Contexts": [ { "Message": "", "StatusCode": "" } ], "DurationInSeconds": 0, "EndTime": 1588747858077, "PhaseStatus": "SUCCEEDED", "PhaseType": "FINALIZING", "StartTime": 1588747858026 }, { "PhaseType": "COMPLETED", "StartTime": 1588747858077 } ], "ProjectName": "codebuild-demo-project", "QueuedTimeoutInMinutes": 480, "SecondaryArtifacts": [], "SecondarySourceVersions": [], "SecondarySources": [], "ServiceRole": "arn:aws:iam::XXXXXXXXXXXX:role/service-role/codebuild-codebuild-demo-project-service-role", "Source": { "InsecureSsl": false, "Location": "codebuild-ap-northeast-1-123456789012-input-bucket/MessageUtil.zip", "Type": "S3" }, "StartTime": 1588747745873, "TimeoutInMinutes": 60 } }
さいごに
今回は一部のAPIしか利用しませんでしたが、CodeBuild向けにサポートされているAPIは複数あります。
ビルドの定期実行や、テスト結果に応じたアクションなど、ステートマシン側で処理することにより、カスタマイズや作り込みの簡素化などが期待できそうですね。