in src/tasks/CloudFormationCreateOrUpdateStack/TaskOperations.ts [90:160]
private async createStack(): Promise<string> {
const request: CloudFormation.CreateStackInput = {
StackName: this.taskParameters.stackName,
OnFailure: this.taskParameters.onFailure,
RoleARN: this.taskParameters.roleARN
}
switch (this.taskParameters.templateSource) {
case fileSource:
if (this.taskParameters.s3BucketName) {
request.TemplateURL = await this.uploadTemplateFile(
this.taskParameters.templateFile,
this.taskParameters.s3BucketName
)
} else {
request.TemplateBody = await this.loadTemplateFile(this.taskParameters.templateFile)
}
break
case urlSource:
request.TemplateURL = this.taskParameters.templateUrl
break
case s3Source:
// sync call
request.TemplateURL = await SdkUtils.getPresignedUrl(
this.s3Client,
'getObject',
this.taskParameters.s3BucketName,
this.taskParameters.s3ObjectKey
)
break
}
request.Parameters = this.loadTemplateParameters()
console.log(tl.loc('CreateStack', this.taskParameters.templateFile))
request.NotificationARNs = this.getNotificationArns(this.taskParameters.notificationARNs)
request.ResourceTypes = this.getResourceTypes(this.taskParameters.resourceTypes)
request.Capabilities = this.getCapabilities(
this.taskParameters.capabilityIAM,
this.taskParameters.capabilityNamedIAM,
this.taskParameters.capabilityAutoExpand
)
request.Tags = SdkUtils.getTags<CloudFormation.Tag[]>(this.taskParameters.tags)
if (this.taskParameters.monitorRollbackTriggers) {
request.RollbackConfiguration = {
MonitoringTimeInMinutes: this.taskParameters.monitoringTimeInMinutes,
RollbackTriggers: this.constructRollbackTriggerCollection(this.taskParameters.rollbackTriggerARNs)
}
}
try {
const response: CloudFormation.CreateStackOutput = await this.cloudFormationClient
.createStack(request)
.promise()
tl.debug(`Stack id ${response.StackId}`)
await waitForStackCreation(this.cloudFormationClient, request.StackName, this.taskParameters.timeoutInMins)
if (!response.StackId) {
return ''
}
return response.StackId
} catch (err) {
console.error(tl.loc('StackCreateRequestFailed', (err as Error).message), err)
throw err
}
}