Closed8
AWS CDK を Go で書いたときのメモ
作ったやつはここに置いていくことにする。
スタックのリージョン、アカウント ID の取得
import (
"github.com/aws/aws-cdk-go/awscdk/v2"
"github.com/aws/constructs-go/constructs/v10"
)
func NewHogeStack(scope constructs.Construct) {
region := awscdk.Stack_Of(scope).Region()
accountID := awscdk.Stack_Of(scope).Account()
}
(CDK Go とは直接関係ないが)
- EventBridge の EventPattern にワイルドカードは使えない
- 代わりに、
prefix
とかの演算子が使える
ただ、 CDK の EventPattern は *[]*string
で指定する必要があるので、各種演算子を使用したい場合は Low Level Construct を使う必要がある。
多分こんな感じでやる気がするけど、途中で心が折れたのでまた時間があるときに別のリソースで試す。
const eventPatternFormat = `
{
"source": [%s]
"detail-type": [%s],
"resources": [{"prefix":"arn:aws:cloudformation:%s:%s:stack/%s"}],
}
`
region := awscdk.Stack_Of(scope).Region()
accountID := awscdk.Stack_Of(scope).Account()
awsevents.NewCfnRule(scope, jsii.String("CloudFormationEventsRule"), &awsevents.CfnRuleProps{
Name: jsii.String(util.ToKebabCase("events-rule-of-cloud-formation-events")),
EventBusName: jsii.String("default"),
State: jsii.String("ENABLED"),
EventPattern: fmt.Sprintf(eventPatternFormat,
`"aws.cloudformation"`,
`"CloudFormation Resource Status Change","CloudFormation Stack Status Change","CloudFormation Drift Detection Status Change"`,
*region,
*accountID,
`NotificationTest`,
),
})
interface{}
のところはそれ用の構造体作って json
タグ振ったりする形かもしれない。
どちらにしても、 Go だと辛そう。
Low Level Construct、
interface{} のところはそれ用の構造体作って json タグ振ったりする形かもしれない。
これは間違い。
map[string]interface{}
で記述していくのが正しそう。
awsevents.NewCfnRule(scope, jsii.String("CloudFormationEventsRule"), &awsevents.CfnRuleProps{
Name: jsii.String(util.ToKebabCase("events-rule-of-cloud-formation-events")),
EventBusName: jsii.String("default"),
State: jsii.String("ENABLED"),
EventPattern: &map[string]interface{}{
"detail-type": &[]*string{
jsii.String("CloudFormation Resource Status Change"),
jsii.String("CloudFormation Stack Status Change"),
jsii.String("CloudFormation Drift Detection Status Change"),
},
"region": region,
"resources": &[]interface{}{
&map[string]*string{
"prefix": jsii.String(fmt.Sprintf("arn:aws:cloudformation:%s:%s:stack/NotificationTest", *region, *accountID)),
},
},
},
})
↑ので無事に構築できたのでブログに書いた。
このスクラップは2023/01/26にクローズされました