LambdaをサポートしたCodeBuildでAWS CLIを実行してみた

実行環境として AWS Lambda をサポートした AWS CodeBuild。 AWSCLI の実行環境としての実用性を確かめてみました。
2024.05.24

昨年、2023年11月のアップデートで、コンピュートリソースとして AWS Lambda をサポートしたAWS CodeBuild。AWSCLI(v2)の実行環境として使えることを試す機会がありましたので、紹介させていただきます。

CodeBuild プロジェクトの作成

AWS マネージドコンソールを利用して、CodeBuild プロジェクトを作成しました。

ビルドプロジェクトを作成する

環境

コンピューティングリソースとして「Lambda」を指定しました。

ビルドプロジェクトを作成2

  • OS: Amazon Linux
  • ランタイム: Node
  • イメージ: aws/codebuild/amazonlinux-aarch64-lambda-standard:nodejs20

Buildspec

ビルドコマンドとして、 aws --version を指定しました。

Buildespec

  • buildspec.yaml
version: 0.2

phases:
  build:
    commands:
       - aws --version

動作確認

作成したプロジェクトで「ビルドを開始」

ビルド開始

ビルドログの出力で、AWSCLIのバージョンを確認することができました。

実行例2

  • aws --version 実行結果
[Container] 2024/05/23 **:**:**.** Running command aws --version
aws-cli/2.14.4 Python/3.11.6 Linux/5.10.215-223.850.amzn2.aarch64 exec-env/AWS_Lambda_Image exe/aarch64.amzn.2023 prompt/off

DynamoDB操作

AWSリソースの操作に利用できる事を確認しました。

サービスロール設定

CodeBuildプロジェクトのサービスロールに、許可ポリシーとして「AmazonDynamoDBReadOnlyAccess」を付与しました。

サービスロール許可追加

ビルドコマンド追加

dynamodb のテーブル一覧を確認 (list-tables )を追加しました。

Buildespec_dynamodb

version: 0.2

phases:
  build:
    commands:
       - aws --version
       - aws dynamodb list-tables

ビルド結果

aws dynamodb list-tables の実行結果を確認できました。

実行例_dynamo

[Container] 2024/05/23 **:**:** Running command aws dynamodb list-tables
{
    "TableNames": [
        "table_default"
    ]
}

フェーズ詳細で確認した実行時間、10秒前後でした。

フェーズ詳細

まとめ

Lambdaを実行環境とした AWS CodeBuild、少ない待ち時間での利用が期待できます。

CodeBuildのサービスロールを 適切な最小権限を付与して利用する事で意図せぬリソース操作の回避や、実行履歴を残せる点なども利点になります。

S3バケット間のファイル同期を、aws s3 sync を定期的に実現する必要がある場合、同期対象が小規模な間は CodeBuild の 実行環境として Lambdaを利用。

もし将来的に実行時間が 15分を超過する規模となり、Lambdaの手にあまる状況となった場合には、CodeBuild の実行環境を Lambdaから EC2に切り替える利用をお試しください。