AWS CDK で Amazon EventBridge Pipes を設定する場合,AWS CloudFormation に沿った L1 Construct の CfnPipe
を使う必要がある.今回はソース(Amazon SQS キュー)・ターゲット(AWS Step Functions ステートマシン)で Amazon EventBridge Pipes を構成する👌
ちなみに Amazon EventBridge Pipes をソース(Amazon SQS キュー)・エンリッチメント(AWS Lambda 関数)・ターゲット(Amazon ECS タスク)で構成するのは以下の記事にまとめた🔗 似てるところもあるので参考になれば〜 \( 'ω')/
AWS CDK で試す
L1 Construct なので AWS CloudFormation の AWS::Pipes::Pipe
のドキュメントも参考にしながら進めた.
👾 sandbox-cdk-sqs-pipes-stepfunctions-stack.ts
実装を簡単にするため,AWS Step Functions ステートマシンは Succeed
のみにしている💡
import { Duration, Stack, StackProps, aws_iam, aws_pipes, aws_sqs, aws_stepfunctions, } from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class SandboxCdkSqsPipesStepfunctionsStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const queue = new aws_sqs.Queue(this, 'SandboxCdkQueue', { queueName: 'sandbox-cdk-sqs-pipes-stepfunctions-queue', visibilityTimeout: Duration.seconds(30), receiveMessageWaitTime: Duration.seconds(20), }); const definition = new aws_stepfunctions.Succeed(this, 'Success!'); const stateMachine = new aws_stepfunctions.StateMachine(this, 'SandboxCdkStepfunctions', { stateMachineName: 'sandbox-cdk-sqs-pipes-stepfunctions-state-machine', definitionBody: aws_stepfunctions.DefinitionBody.fromChainable(definition), }); const pipeRole = new aws_iam.Role(this, 'SandboxCdkPipesRole', { roleName: 'sandbox-cdk-sqs-pipes-stepfunctions-role', assumedBy: new aws_iam.ServicePrincipal('pipes.amazonaws.com') }); queue.grantConsumeMessages(pipeRole) stateMachine.grantStartExecution(pipeRole) new aws_pipes.CfnPipe(this, 'SandboxCdkPipes', { name: 'sandbox-cdk-sqs-pipes-stepfunctions-pipes', roleArn: pipeRole.roleArn, source: queue.queueArn, target: stateMachine.stateMachineArn, targetParameters: { stepFunctionStateMachineParameters: { invocationType: 'FIRE_AND_FORGET', } } }); } }
結果
以下のように期待通り Amazon EventBridge Pipes を設定できた❗️また動作確認として Amazon SQS キューにメッセージを送信すると,最終的に AWS Step Functions ステートマシンが実行された👌
ポイント(ソース・ターゲット)
Amazon SQS キューを Amazon EventBridge Pipes の「ソース」に設定する場合は source
に ARN を設定する.細かくパラメータを設定する場合は SourceParameters
の sqsQueueParameters
を使う.
AWS Step Functions ステートマシンを Amazon EventBridge Pipes の「ターゲット」に設定する場合は target
に ARN を設定する.細かくパラメータを設定する場合は targetParameters
の stepFunctionStateMachineParameters
を使う.標準ステートマシンを実行する場合は invocationType
に FIRE_AND_FORGET
を設定すれば OK👌
ポイント(実行ロール)
Amazon EventBridge Pipes の実行ロールに Amazon SQS キューの読み取り権限・AWS Step Functions ステートマシンの実行権限を与える必要がある.最小権限を考えるとポリシーの設定が大変だけど grantConsumeMessages(grantee)
/ grantStartExecution(grantee)
を使えば簡単に設定できる.AWS CDK の grant
は本当に便利だ〜💡