MCPcopy Create free account
hub / github.com/api3dao/airnode / createAirnodeBucket

Function createAirnodeBucket

packages/airnode-deployer/src/infrastructure/gcp.ts:50–106  ·  view source on GitHub ↗
(cloudProvider: GcpCloudProvider)

Source from the content-addressed store, hash-verified

48};
49
50export const createAirnodeBucket = async (cloudProvider: GcpCloudProvider) => {
51 const storage = initializeGcsService();
52 const bucketName = generateBucketName();
53
54 logger.debug(`Creating GCS bucket '${bucketName}' in ${cloudProvider.region}`);
55 const goCreate = await go(() => storage.createBucket(bucketName, { location: cloudProvider.region }));
56 if (!goCreate.success) {
57 throw new Error(`Failed to create an GCS bucket: ${goCreate.error}`);
58 }
59
60 const [bucket] = goCreate.data;
61
62 // Setting uniform bucket-level access
63 // https://cloud.google.com/storage/docs/uniform-bucket-level-access
64 logger.debug(`Setting uniform bucket-level access for GCS bucket '${bucketName}'`);
65 const goMetadata = await go(() =>
66 bucket.setMetadata({
67 iamConfiguration: { uniformBucketLevelAccess: { enabled: true }, publicAccessPrevention: 'enforced' },
68 })
69 );
70 if (!goMetadata.success) {
71 throw new Error(`Failed to setup a uniform bucket-level access for bucket '${bucketName}': ${goMetadata.error}`);
72 }
73
74 // Adding roles that are by default added when adding bucket via GCP Console. Some are missing when creating bucket via SDK,
75 // causing user not being able to see the bucket content in the GCP Console.
76 const policy = {
77 bindings: [
78 {
79 role: 'roles/storage.legacyBucketReader',
80 members: [`projectViewer:${cloudProvider.projectId}`],
81 },
82 {
83 role: 'roles/storage.legacyBucketOwner',
84 members: [`projectEditor:${cloudProvider.projectId}`, `projectOwner:${cloudProvider.projectId}`],
85 },
86 {
87 role: 'roles/storage.legacyObjectReader',
88 members: [`projectViewer:${cloudProvider.projectId}`],
89 },
90 {
91 role: 'roles/storage.legacyObjectOwner',
92 members: [`projectEditor:${cloudProvider.projectId}`, `projectOwner:${cloudProvider.projectId}`],
93 },
94 ],
95 };
96 logger.debug(`Setting necessary IAM policy for GCS bucket '${bucketName}'`);
97 const goPolicy = await go(() => bucket.iam.setPolicy(policy));
98 if (!goPolicy.success) {
99 throw new Error(`Failed to setup IAM policy for bucket '${bucketName}': ${goPolicy.error}`);
100 }
101
102 return {
103 name: bucketName,
104 region: cloudProvider.region,
105 };
106};
107

Callers 1

gcp.test.tsFile · 0.90

Calls 2

generateBucketNameFunction · 0.90
initializeGcsServiceFunction · 0.85

Tested by

no test coverage detected