Using Cloudformation Sub Function To Create And Pass through Role Arns
Recently I needed to create a role for media convert using Cloudfomration I also needed to pass that role through to my Lamdba NoddeJS fucntion within environmetal varibles.
At first I thought you would need to use the GetAttr function like this.
"CloudfrontUrl": {
"Description": "Cloudfront Url",
"Value": {
"Fn::GetAtt": ["CreateWebsiteCloudFront", "DomainName"]
}
}
Turns out this is not the case you can simply use the sub function and insert the AWS Account Id like this.
"MediaConvertRole": {
"Description": "Role Used To Encode Your Media",
"Value": {
"Fn::Sub": "arn:aws:iam::${AWS::AccountId}:role/MediaConvertRole"
}
}
When creating a role with Cloudformation make sure you give it a role name else it will create one with an appended random id.
"MediaConvertRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"RoleName": "MediaConvertRole",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": ["mediaconvert.amazonaws.com"]
},
"Action": ["sts:AssumeRole"]
}]
},
"Path": "/",
"Policies": [{
"PolicyName": "Media_S3_Full",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}]
}
},
{
"PolicyName": "Media_Api_Invoke",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["execute-api:Invoke"],
"Resource": "arn:aws:execute-api:*:*:*"
}]
}
}
]
}
}

