Skip to content

Commit 8b7ffc9

Browse files
committed
feat: dns record create for bucket website ad fix destroy not read region info issue
Signed-off-by: seven <[email protected]>
1 parent 172f090 commit 8b7ffc9

File tree

9 files changed

+88
-9
lines changed

9 files changed

+88
-9
lines changed

package-lock.json

+23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"@alicloud/openapi-client": "^0.4.12",
5454
"@alicloud/ros-cdk-apigateway": "^1.6.0",
5555
"@alicloud/ros-cdk-core": "^1.6.0",
56+
"@alicloud/ros-cdk-dns": "^1.6.0",
5657
"@alicloud/ros-cdk-ecs": "^1.6.0",
5758
"@alicloud/ros-cdk-elasticsearchserverless": "^1.6.0",
5859
"@alicloud/ros-cdk-fc3": "^1.6.0",

samples/aliyun-poc-domain.yml

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ tags:
1313
buckets:
1414
insight_poc_bucket:
1515
name: insight-poc-domain
16+
security:
17+
acl: PUBLIC_READ
1618
website:
1719
code: dist
1820
domain: meke-ui.serverlessinsight.com

src/commands/destroy.ts

+18-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
1-
import { constructActionContext, logger, rosStackDelete } from '../common';
1+
import { constructActionContext, getIacLocation, logger, rosStackDelete } from '../common';
2+
import { parseYaml } from '../parser';
23

3-
export const destroyStack = async (stackName: string, options: { location: string }) => {
4-
const context = constructActionContext({ stackName, ...options });
5-
logger.info(`Destroying stack ${stackName}...`);
4+
export const destroyStack = async (
5+
stackName: string,
6+
options: {
7+
location: string;
8+
region?: string;
9+
provider?: string;
10+
accessKeyId?: string;
11+
accessKeySecret?: string;
12+
securityToken?: string;
13+
},
14+
) => {
15+
const iac = parseYaml(getIacLocation(options.location));
16+
const context = constructActionContext({ stackName, ...options, iacProvider: iac.provider });
17+
logger.info(
18+
`Destroying stack: ${stackName}, provider: ${context.provider}, region: ${context.region}...`,
19+
);
620
await rosStackDelete(context);
721
};

src/commands/index.ts

+17-3
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,23 @@ program
8282
program
8383
.command('destroy <stackName>')
8484
.option('-f, --file <path>', 'specify the yaml file')
85+
.option('-r, --region <region>', 'specify the region')
86+
.option('-pr, --provider <provider>', 'specify the provider')
87+
.option('-ak, --accessKeyId <accessKeyId>', 'specify the AccessKeyId')
88+
.option('-as, --accessKeySecret <accessKeySecret>', 'specify the AccessKeySecret')
89+
.option('-at, --securityToken <securityToken>', 'specify the SecurityToken')
8590
.description('destroy serverless stack')
86-
.action(async (stackName, { file }) => {
87-
await destroyStack(stackName, { location: file });
88-
});
91+
.action(
92+
async (stackName, { file, region, provider, accessKeyId, accessKeySecret, securityToken }) => {
93+
await destroyStack(stackName, {
94+
location: file,
95+
region,
96+
provider,
97+
accessKeyId,
98+
accessKeySecret,
99+
securityToken,
100+
});
101+
},
102+
);
89103

90104
program.parse();

src/common/domainHelper.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export const splitDomain = (domain: string) => {
2+
const parts = domain.split('.');
3+
const rr = parts.length > 2 ? parts[0] : '@';
4+
const domainName = parts.length > 2 ? parts.slice(1).join('.') : domain;
5+
6+
return { rr, domainName };
7+
};

src/common/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export * from './constants';
88
export * from './imsClient';
99
export * from './base64';
1010
export * from './rosAssets';
11+
export * from './domainHelper';

src/common/rosClient.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export const rosStackDeploy = async (
177177
export const rosStackDelete = async ({
178178
stackName,
179179
region,
180-
}: Pick<ActionContext, 'stackName' | 'region'>) => {
180+
}: Pick<ActionContext, 'stackName' | 'region' | 'provider'>) => {
181181
const stackInfo = await getStackByName(stackName, region);
182182
if (!stackInfo) {
183183
logger.warn(`Stack: ${stackName} not exists, skipped! 🚫`);

src/stack/rosStack/bucket.ts

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { ActionContext, BucketAccessEnum, BucketDomain } from '../../types';
22
import * as oss from '@alicloud/ros-cdk-oss';
33
import * as ros from '@alicloud/ros-cdk-core';
4-
import { encodeBase64ForRosId, getAssets, replaceReference } from '../../common';
4+
import { encodeBase64ForRosId, getAssets, replaceReference, splitDomain } from '../../common';
55
import * as ossDeployment from '@alicloud/ros-cdk-ossdeployment';
6+
import * as dns from '@alicloud/ros-cdk-dns';
67
import path from 'node:path';
78
import { RosRole } from '@alicloud/ros-cdk-ram';
89

@@ -87,6 +88,7 @@ export const resolveBuckets = (
8788
);
8889
}
8990
if (bucket.website?.domain) {
91+
const { rr, domainName } = splitDomain(bucket.website.domain);
9092
new oss.Domain(
9193
scope,
9294
`${bucket.key}_custom_domain_${encodeBase64ForRosId(bucket.website.domain)}`,
@@ -95,6 +97,21 @@ export const resolveBuckets = (
9597
domainName: replaceReference(bucket.website.domain, context),
9698
},
9799
);
100+
101+
new dns.DomainRecord(
102+
scope,
103+
`${bucket.key}_custom_domain_record_${encodeBase64ForRosId(bucket.website.domain)}`,
104+
{
105+
domainName: domainName,
106+
rr,
107+
type: 'CNAME',
108+
value: [BucketAccessEnum.PUBLIC_READ, BucketAccessEnum.PUBLIC_READ_WRITE].includes(
109+
bucket.security?.acl ?? ('' as BucketAccessEnum),
110+
)
111+
? ossBucket.attrDomainName
112+
: ossBucket.attrInternalDomainName,
113+
},
114+
);
98115
}
99116
});
100117
};

0 commit comments

Comments
 (0)