CloudWatch Syntheticsでロールが作れないとき
概要
AWS CloudWatch SyntheticsのcanaryをGUIで作成するとき、 「Create a new role」がグレーアウトして押下できない。
原因
S3のパスを変更していたから。
IAM Roleを自動作成するとき、ポリシーの設定がデフォルトのS3パスになっている。
そのため、S3のパスを変更するときは、自分でIAM Policyを作成し、それをアタッチしたIAM Roleを作らなければならない。
下記のようなポリシーが作られる。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::cw-syn-results-<ACCOUNT_ID>-<REGION>/canary/<REGION>/<CANARY_NAME>-<HASH>/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::cw-syn-results-<HASH>-<REGION>" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:CreateLogGroup" ], "Resource": [ "arn:aws:logs:<REGION>:<ACCOUNT_ID>:log-group:/aws/lambda/cwsyn-<CANARY_NAME>-*" ] }, { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "xray:PutTraceSegments" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Resource": "*", "Action": "cloudwatch:PutMetricData", "Condition": { "StringEquals": { "cloudwatch:namespace": "CloudWatchSynthetics" } } } ] }
まとめ
今回、Syntheticsを利用するに当たり、本番環境のみ利用し、一度作成した後に変更が殆どないことから、GUIで作った。
関連して作られるリソースの削除などが面倒だったので、IaCしても良いかも知れない。
Terraformで作っても消してくれないので、自分で作る必要がある。
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/synthetics_canary
削除するときの手順は下記(これに加えIAM Policyも削除する必要がある。)
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/synthetics_canaries_deletion.html