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としての構文出力と照らし合わせて検証中です