0
0

More than 3 years have passed since last update.

CDK(TypeScript)で既存のS3 Bucket上のLambdaを指定する

Last updated at Posted at 2020-05-28

aws-cdkでの環境構築メモです。
特定のBucketへのPutをトリガーに発火するLambdaを作っています。
ただし、Lambdaのコードベースはcdk管理外のS3で管理されているものとします。

1. fromCfnParametersのdefault値で無理やり当てる

...
    /* S3  */
    const originalVideoBucket = new Bucket(this, `OriginalVideoBucket` , {
      bucketName: resources.originalVideoS3Bucket.name,
      removalPolicy: cdk.RemovalPolicy.DESTROY, // RETAIN
      versioned: true,
      publicReadAccess: false,
    });

    const fn = new lambda.Function(this, 'OriginalVideoAssetUploaded', {
      functionName: resources.originalVideoUploaded.lambdaName, 
      runtime: lambda.Runtime.GO_1_X,
      handler: 'main',
      memorySize: 128,
      code: lambda.Code.fromCfnParameters({
        bucketNameParam: new CfnParameter(this, "OriginalVideoBucketLambdaSourceBucket" , {
          default: <既存のS3Bucket>,
        }),
        objectKeyParam: new CfnParameter(this, "OriginalVideoBucketLambdaSourceS3Key" , {
           default: <既存のS3Key>,
        }),
      }),
    });

    fn.addEventSource(new  eventSource.S3EventSource(originalVideoBucket , {
      events: [ EventType.OBJECT_CREATED],
    }))

2. Bucket.fromBucketName

    const resourceBucketRef = Bucket.fromBucketName(this , `resource` , resources.resourceS3Bucket.name);

    const regionalUserApiLambda = new lambda.Function(this, 'RegionalUserApi', {
      functionName: resources.userApi.lambdaName,
      runtime: lambda.Runtime.GO_1_X,
      handler: 'main',
      memorySize: 128,
      timeout :  Duration.seconds(10),
      code: lambda.Code.fromBucket(resourceBucketRef , resources.userApi.lambdaS3Key)
    });


3. @aws-cdk/aws-sam の方のCfnFunctionを使う

import * as Sam from "@aws-cdk/aws-sam"
....
....

    const samFunction = new Sam.CfnFunction(this, 'OriginalVideoAssetUploaded', {
      functionName: resources.originalVideoUploaded.lambdaName,
      codeUri: {
        bucket : <既存のS3Bucket>,
        key: <既存のS3Key>
      },
      handler: 'main',
      runtime: 'go1.x',
      memorySize: 128,
      timeout: 3,
      events: {
        "mys3event": {
          type : `S3`,
          properties : {
            bucket : originalVideoBucket.bucketName,
            events : `s3:ObjectCreated:*`,
          },
        },

      },
    });

こっちのパターンはs3 eventの方がうまく設定されないのでちょっとCloudformationとしての構文出力と照らし合わせて検証中です

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0