AWS CDKをLambdaレイヤーにパッケージ化する方法は?

ジョン

AWS CDKをLambdaレイヤーとしてバンドルするための最良の方法は何ですか?

JavaプロセスからCDKを呼び出す必要があるため、Java 11ランタイムを使用してから、NodejsとCDKを2つの別々のレイヤーとしてインストールします。現在、Nodejsバイナリをダウンロードして、次のようなものを使用しています。

    LayerVersion nodeLayer = LayerVersion.Builder.create(this, "node-layer")
            .description("Layer containing Node.js")
            .code(
                    Code.fromAsset(somePathToNodejs)
            )
            .build();

次に、Lambdaコンストラクター/ビルダー内のレイヤーを参照します。

CDKはとしてインストールされるnpm install -g aws-cdkので、これを同様の方法でバンドルする最善の方法がわかりません。

ジョン

最終的にDockerコンテナーを使用してaws-cdkモジュールを特定のパスにインストールし、コンテナーを圧縮してバインドマウントされたディレクトリにコピーし、基になるホストで使用できるようにしました。

Gradleとgradle-docker-pluginBenMuschkoによるプロジェクトを作成しました。ビルドを高速化するために、より小さなノードイメージを使用しようとして時間を費やしたことはありません。

task createCdkDockerfile(type: Dockerfile) {
    from 'node:latest'
    defaultCommand('/bin/bash', '-c', "apt-get update && apt-get install -y zip && mkdir -p /nodejs && npm config set prefix /nodejs/bin && npm install -g aws-cdk && pushd /nodejs/bin && zip -r --symlinks /opt/aws-cdk.zip *")
}

task buildCdkImage(type:DockerBuildImage) {
    dependsOn createCdkDockerfile
    images.add('my-aws-cdk:latest')
}

ext.maybeConvertWindowsPath = { path ->
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        path = "/${path.replace("\\", "/").replace(":", "")}"
    }
    return path
}

task createCdkContainer(type: DockerCreateContainer) {
    def dockerBindDir = new File(buildDir, "docker")
    dockerBindDir.mkdirs()
    dependsOn buildCdkImage
    targetImageId buildCdkImage.getImageId()
    hostConfig.autoRemove = true
    hostConfig.binds = ["${maybeConvertWindowsPath(buildDir.toString())}/docker" : "/opt"]
}

task startCdkContainer(type: DockerStartContainer) {
    dependsOn createCdkContainer
    targetContainerId createCdkContainer.getContainerId()
}

task waitCdkContainer(type: DockerWaitContainer) {
    dependsOn startCdkContainer
    targetContainerId createCdkContainer.getContainerId()
}

zipファイルはで入手できます${buildDir}/docker/aws-cdk.zip

CDKをレイヤーとして追加するのは、私の質問のNodejsの例のとおりなので、次のようになります。

LayerVersion nodeLayer = LayerVersion.Builder.create(this, "aws-cdk-layer")
        .description("Layer containing AWS CDK")
        .code(
                Code.fromAsset(somePathTo-aws-cdk.zip)
        )
        .build();

注意すべき点:

  • Windowsでビルドする場合、Windowsで圧縮してから、Linuxで解凍すると、実行可能であるはずのファイル、つまりcdkそれ自体で問題が発生します
  • Windowsでは、バインドマウントディレクトリに問題があるようです。そのため、ファイル名をサニタイズする必要があります。
  • 圧縮するときは、--symlinksオプションを使用することが重要です。そうしないと、cdk実行可能ファイルがcdk.jsファイルを見つけることができません

tarファイルを圧縮するためにを使用することをお勧めしますが、fromAsset()tarファイルは受け入れません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AWS Lambdaの既存のレイヤーにパッケージを追加する

分類Dev

aws lambdaにmecabパッケージを追加する方法は?

分類Dev

AWS LambdaのサブディレクトリにPython依存関係をパッケージ化する

分類Dev

aws cdkに既存のVPCをインポートする方法は?

分類Dev

AWS Lambda:250MBを超えるデプロイパッケージを管理する方法

分類Dev

AWS CDK OpenApi仕様からLambdaに裏打ちされたAPIゲートウェイを作成する方法は?

分類Dev

AWSでWebアプリをパッケージ化して提供する方法

分類Dev

LinuxパッケージをWindowsマシン(AWS Lambda用)にpipインストールするにはどうすればよいですか?

分類Dev

ARNを指定してAWSからパブリックLambdaレイヤーのコンテンツをダウンロードすることは可能ですか?

分類Dev

AWS Lambda Pythonレイヤーを作成するにはどうすればよいですか?(XGBoostでの使用例)

分類Dev

AWS Lambda Pythonレイヤーを作成するにはどうすればよいですか?(XGBoostでの使用例)

分類Dev

レイヤーを使用してAWSラムダ関数のnpmパッケージにアクセスしようとしている「Runtime.ImportModuleError」

分類Dev

AWSプライベートバケットをAzureストレージにコピーする方法

分類Dev

AWS Lambda:外部APIにシークレットを保存する方法は?

分類Dev

AWS Lambda内にPythonパッケージをPipインストールしますか?

分類Dev

SpringBootマイクロサービスアプリケーション(RESTful)をサーバーレスとしてAWS Lambdaにデプロイする方法は?

分類Dev

AWS Cloud9:Lambdaレイヤーをローカルで参照する

分類Dev

AWSLambda-AWSレイヤーにONNXモデルを配置する方法

分類Dev

AWS CDKコードパイプラインElasticBeanstalkにデプロイする方法は?

分類Dev

AWS CDK:指定されたバージョンのLambdaをエイリアスに関連付けるにはどうすればよいですか?

分類Dev

AWS CDK:Elastic IPを指すRoute53 Aレコードを作成する方法は?

分類Dev

AWS CDK IAMポリシーにプリンシパルを含める方法は?

分類Dev

AWS LambdaでAWSヘルパークラスをインスタンス化するときにリージョンを指定する必要がありますか?

分類Dev

AzureまたはAWSでプライベートPythonパッケージマネージャーをホストする方法

分類Dev

AWSクイックサイトでデータセットの更新をスケジュールまたは自動化する方法

分類Dev

AWS CDKでコードを実行する前に、スタックが完了するのを待つ方法は?

分類Dev

AWSラムダデプロイメントパッケージ(RequestEntityTooLargeException)の最大サイズを増やす方法は?

分類Dev

AWS Lambdaにnpmモジュールをロードする方法は?

分類Dev

AWS CodeBuildからnpmにパッケージを公開するにはどうすればよいですか?

Related 関連記事

  1. 1

    AWS Lambdaの既存のレイヤーにパッケージを追加する

  2. 2

    aws lambdaにmecabパッケージを追加する方法は?

  3. 3

    AWS LambdaのサブディレクトリにPython依存関係をパッケージ化する

  4. 4

    aws cdkに既存のVPCをインポートする方法は?

  5. 5

    AWS Lambda:250MBを超えるデプロイパッケージを管理する方法

  6. 6

    AWS CDK OpenApi仕様からLambdaに裏打ちされたAPIゲートウェイを作成する方法は?

  7. 7

    AWSでWebアプリをパッケージ化して提供する方法

  8. 8

    LinuxパッケージをWindowsマシン(AWS Lambda用)にpipインストールするにはどうすればよいですか?

  9. 9

    ARNを指定してAWSからパブリックLambdaレイヤーのコンテンツをダウンロードすることは可能ですか?

  10. 10

    AWS Lambda Pythonレイヤーを作成するにはどうすればよいですか?(XGBoostでの使用例)

  11. 11

    AWS Lambda Pythonレイヤーを作成するにはどうすればよいですか?(XGBoostでの使用例)

  12. 12

    レイヤーを使用してAWSラムダ関数のnpmパッケージにアクセスしようとしている「Runtime.ImportModuleError」

  13. 13

    AWSプライベートバケットをAzureストレージにコピーする方法

  14. 14

    AWS Lambda:外部APIにシークレットを保存する方法は?

  15. 15

    AWS Lambda内にPythonパッケージをPipインストールしますか?

  16. 16

    SpringBootマイクロサービスアプリケーション(RESTful)をサーバーレスとしてAWS Lambdaにデプロイする方法は?

  17. 17

    AWS Cloud9:Lambdaレイヤーをローカルで参照する

  18. 18

    AWSLambda-AWSレイヤーにONNXモデルを配置する方法

  19. 19

    AWS CDKコードパイプラインElasticBeanstalkにデプロイする方法は?

  20. 20

    AWS CDK:指定されたバージョンのLambdaをエイリアスに関連付けるにはどうすればよいですか?

  21. 21

    AWS CDK:Elastic IPを指すRoute53 Aレコードを作成する方法は?

  22. 22

    AWS CDK IAMポリシーにプリンシパルを含める方法は?

  23. 23

    AWS LambdaでAWSヘルパークラスをインスタンス化するときにリージョンを指定する必要がありますか?

  24. 24

    AzureまたはAWSでプライベートPythonパッケージマネージャーをホストする方法

  25. 25

    AWSクイックサイトでデータセットの更新をスケジュールまたは自動化する方法

  26. 26

    AWS CDKでコードを実行する前に、スタックが完了するのを待つ方法は?

  27. 27

    AWSラムダデプロイメントパッケージ(RequestEntityTooLargeException)の最大サイズを増やす方法は?

  28. 28

    AWS Lambdaにnpmモジュールをロードする方法は?

  29. 29

    AWS CodeBuildからnpmにパッケージを公開するにはどうすればよいですか?

ホットタグ

アーカイブ