@riddance/deploy
Version:
100 lines • 16.2 kB
JavaScript
import { jsonResponse, okResponse, throwOnNotOK } from '@riddance/fetch';
import { setTimeout } from 'node:timers/promises';
import { awsRequest } from '../lite.js';
export async function getRole(env, prefix, service) {
const response = await awsRequest(env, 'GET', 'iam', `?Action=GetRole&RoleName=${prefix}-${service}-role&Version=2010-05-08`);
if (response.status === 404) {
return undefined;
}
await throwOnNotOK(response, 'Error getting role');
const body = (await response.json());
return body.GetRoleResponse.GetRoleResult.Role;
}
export async function syncRole(env, prefix, service, role) {
role ??= await createRole(env, prefix, service);
return role.Arn;
}
async function createRole(env, prefix, service) {
console.log('creating role');
const response = await jsonResponse(awsRequest(env, 'GET', 'iam', `?${new URLSearchParams({
Action: 'CreateRole',
Version: '2010-05-08',
RoleName: `${prefix}-${service}-role`,
AssumeRolePolicyDocument: JSON.stringify({
Version: '2012-10-17',
Statement: [
{
Effect: 'Allow',
Principal: {
Service: 'lambda.amazonaws.com',
},
Action: 'sts:AssumeRole',
},
],
}),
'Tags.member.1.Key': 'framework',
'Tags.member.1.Value': 'riddance',
'Tags.member.2.Key': 'environment',
'Tags.member.2.Value': prefix,
'Tags.member.3.Key': 'service',
'Tags.member.3.Value': service,
}).toString()}`), 'Error creating role');
await setTimeout(10_000);
return response.CreateRoleResponse.CreateRoleResult.Role;
}
export async function assignPolicy(env, prefix, service, region, account, additionalStatements) {
console.log('assigning policy');
await okResponse(awsRequest(env, 'GET', 'iam', `?${new URLSearchParams({
Action: 'PutRolePolicy',
Version: '2010-05-08',
RoleName: `${prefix}-${service}-role`,
PolicyName: `${prefix}-${service}-policy`,
PolicyDocument: JSON.stringify({
Version: '2012-10-17',
Statement: [
{
Effect: 'Allow',
Resource: `arn:aws:logs:${region}:${account}:*`,
Action: 'logs:CreateLogGroup',
},
{
Effect: 'Allow',
Resource: `arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${prefix}-${service}-*`,
Action: ['logs:CreateLogStream', 'logs:PutLogEvents'],
},
{
Effect: 'Allow',
Resource: `arn:aws:dynamodb:${region}:${account}:table/${prefix}.${service}.*`,
Action: [
'dynamodb:CreateTable',
'dynamodb:BatchGetItem',
'dynamodb:ConditionCheckItem',
'dynamodb:PutItem',
'dynamodb:DeleteItem',
'dynamodb:GetItem',
'dynamodb:Scan',
'dynamodb:Query',
'dynamodb:UpdateItem',
'dynamodb:UpdateTable',
'dynamodb:GetRecords',
'dax:GetItem',
'dax:PutItem',
'dax:ConditionCheckItem',
'dax:BatchGetItem',
'dax:BatchWriteItem',
'dax:DeleteItem',
'dax:Query',
'dax:UpdateItem',
'dax:Scan',
],
},
...additionalStatements.map(as => ({
Effect: as.Effect,
Resource: as.Resource.replaceAll('$REGION', region).replaceAll('$ACCOUNT', account),
Action: as.Action,
})),
],
}),
}).toString()}`), 'Error assigning policy');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb2xlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakQsT0FBTyxFQUFZLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQWdCakQsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQ3pCLEdBQWEsRUFDYixNQUFjLEVBQ2QsT0FBZTtJQUVmLE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUM3QixHQUFHLEVBQ0gsS0FBSyxFQUNMLEtBQUssRUFDTCw0QkFBNEIsTUFBTSxJQUFJLE9BQU8sMEJBQTBCLENBQzFFLENBQUE7SUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQUNELE1BQU0sWUFBWSxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBTWxDLENBQUE7SUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQTtBQUNsRCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQzFCLEdBQWEsRUFDYixNQUFjLEVBQ2QsT0FBZSxFQUNmLElBQXlCO0lBRXpCLElBQUksS0FBSyxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQy9DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQTtBQUNuQixDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FBQyxHQUFhLEVBQUUsTUFBYyxFQUFFLE9BQWU7SUFDcEUsT0FBTyxDQUFD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QkFDL0IsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNO29CQUNqQixRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FDMUQsVUFBVSxFQUNWLE9BQU8sQ0FDVjtvQkFDRCxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU07aUJBQ3BCLENBQUMsQ0FBQzthQUNOO1NBQ0osQ0FBQztLQUNMLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNsQixFQUNELHdCQUF3QixDQUMzQixDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzb25SZXNwb25zZSwgb2tSZXNwb25zZSwgdGhyb3dPbk5vdE9LIH0gZnJvbSAnQHJpZGRhbmNlL2ZldGNoJ1xuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJ1xuaW1wb3J0IHsgTG9jYWxFbnYsIGF3c1JlcXVlc3QgfSBmcm9tICcuLi9saXRlLmpzJ1xuXG5leHBvcnQgdHlwZSBBd3NSb2xlID0ge1xuICAgIEFybjogc3RyaW5nXG4gICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiBzdHJpbmdcbiAgICBDcmVhdGVEYXRlOiBudW1iZXJcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nXG4gICAgTWF4U2Vzc2lvbkR1cmF0aW9uOiBudW1iZXJcbiAgICBQYXRoOiBzdHJpbmdcbiAgICBQZXJtaXNzaW9uc0JvdW5kYXJ5OiBudWxsXG4gICAgUm9sZUlkOiBzdHJpbmdcbiAgICBSb2xlTGFzdFVzZWQ6IHsgTGFzdFVzZWREYXRlOiBudW1iZXI7IFJlZ2lvbjogc3RyaW5nIH1cbiAgICBSb2xlTmFtZTogc3RyaW5nXG4gICAgVGFnczogbnVsbFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Um9sZShcbiAgICBlbnY6IExvY2FsRW52LFxuICAgIHByZWZpeDogc3RyaW5nLFxuICAgIHNlcnZpY2U6IHN0cmluZyxcbik6IFByb21pc2U8QXdzUm9sZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXdzUmVxdWVzdChcbiAgICAgICAgZW52LFxuICAgICAgICAnR0VUJyxcbiAgICAgICAgJ2lhbScsXG4gICAgICAgIGA/QWN0aW9uPUdldFJvbGUmUm9sZU5hbWU9JHtwcmVmaXh9LSR7c2VydmljZX0tcm9sZSZWZXJzaW9uPTIwMTAtMDUtMDhgLFxuICAgIClcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGF3YWl0IHRocm93T25Ob3RPSyhyZXNwb25zZSwgJ0Vycm9yIGdldHRpbmcgcm9sZScpXG4gICAgY29uc3QgYm9keSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgICAgR2V0Um9sZVJlc3BvbnNlOiB7XG4gICAgICAgICAgICBHZXRSb2xlUmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgUm9sZTogQXdzUm9sZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBib2R5LkdldFJvbGVSZXNwb25zZS5HZXRSb2xlUmVzdWx0LlJvbGVcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN5bmNSb2xlKFxuICAgIGVudjogTG9jYWxFbnYsXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgc2VydmljZTogc3RyaW5nLFxuICAgIHJvbGU6IEF3c1JvbGUgfCB1bmRlZmluZWQsXG4pIHtcbiAgICByb2xlID8/PSBhd2FpdCBjcmVhdGVSb2xlKGVudiwgcHJlZml4LCBzZXJ2aWNlKVxuICAgIHJldHVybiByb2xlLkFyblxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSb2xlKGVudjogTG9jYWxFbnYsIHByZWZpeDogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRpbmcgcm9sZScpXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBqc29uUmVzcG9uc2U8e1xuICAgICAgICBDcmVhdGVSb2xlUmVzcG9uc2U6IHtcbiAgICAgICAgICAgIENyZWF0ZVJvbGVSZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBSb2xlOiBBd3NSb2xlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9PihcbiAgICAgICAgYXdzUmVxdWVzdChcbiAgICAgICAgICAgIGVudixcbiAgICAgICAgICAgICdHRVQnLFxuICAgICAgICAgICAgJ2lhbScsXG4gICAgICAgICAgICBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICAgICAgQWN0aW9uOiAnQ3JlYXRlUm9sZScsXG4gICAgICAgICAgICAgICAgVmVyc2lvbjogJzIwMTAtMDUtMDgnLFxuICAgICAgICAgICAgICAgIFJvbGVOYW1lOiBgJHtwcmVmaXh9LSR7c2VydmljZX0tcm9sZWAsXG4gICAgICAgICAgICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICAgICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW5jaXBhbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlOiAnbGFtYmRhLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOiAnc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAnVGFncy5tZW1iZXIuMS5LZXknOiAnZnJhbWV3b3JrJyxcbiAgICAgICAgICAgICAgICAnVGFncy5tZW1iZXIuMS5WYWx1ZSc6ICdyaWRkYW5jZScsXG4gICAgICAgICAgICAgICAgJ1RhZ3MubWVtYmVyLjIuS2V5JzogJ2Vudmlyb25tZW50JyxcbiAgICAgICAgICAgICAgICAnVGFncy5tZW1iZXIuMi5WYWx1ZSc6IHByZWZpeCxcbiAgICAgICAgICAgICAgICAnVGFncy5tZW1iZXIuMy5LZXknOiAnc2VydmljZScsXG4gICAgICAgICAgICAgICAgJ1RhZ3MubWVtYmVyLjMuVmFsdWUnOiBzZXJ2aWNlLFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKX1gLFxuICAgICAgICApLFxuICAgICAgICAnRXJyb3IgY3JlYXRpbmcgcm9sZScsXG4gICAgKVxuICAgIGF3YWl0IHNldFRpbWVvdXQoMTBfMDAwKVxuICAgIHJldHVybiByZXNwb25zZS5DcmVhdGVSb2xlUmVzcG9uc2UuQ3JlYXRlUm9sZVJlc3VsdC5Sb2xlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NpZ25Qb2xpY3koXG4gICAgZW52OiBMb2NhbEVudixcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBzZXJ2aWNlOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgYWNjb3VudDogc3RyaW5nLFxuICAgIGFkZGl0aW9uYWxTdGF0ZW1lbnRzOiB7IEVmZmVjdDogc3RyaW5nOyBSZXNvdXJjZTogc3RyaW5nOyBBY3Rpb246IHN0cmluZ1tdIH1bXSxcbikge1xuICAgIGNvbnNvbGUubG9nKCdhc3NpZ25pbmcgcG9saWN5JylcbiAgICBhd2FpdCBva1Jlc3BvbnNlKFxuICAgICAgICBhd3NSZXF1ZXN0KFxuICAgICAgICAgICAgZW52LFxuICAgICAgICAgICAgJ0dFVCcsXG4gICAgICAgICAgICAnaWFtJyxcbiAgICAgICAgICAgIGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgICAgICBBY3Rpb246ICdQdXRSb2xlUG9saWN5JyxcbiAgICAgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMC0wNS0wOCcsXG4gICAgICAgICAgICAgICAgUm9sZU5hbWU6IGAke3ByZWZpeH0tJHtzZXJ2aWNlfS1yb2xlYCxcbiAgICAgICAgICAgICAgICBQb2xpY3lOYW1lOiBgJHtwcmVmaXh9LSR7c2VydmljZX0tcG9saWN5YCxcbiAgICAgICAgICAgICAgICBQb2xpY3lEb2N1bWVudDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZTogYGFybjphd3M6bG9nczoke3JlZ2lvbn06JHthY2NvdW50fToqYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb246ICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlOiBgYXJuOmF3czpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDovYXdzL2xhbWJkYS8ke3ByZWZpeH0tJHtzZXJ2aWNlfS0qYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb246IFsnbG9nczpDcmVhdGVMb2dTdHJlYW0nLCAnbG9nczpQdXRMb2dFdmVudHMnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlOiBgYXJuOmF3czpkeW5hbW9kYjoke3JlZ2lvbn06JHthY2NvdW50fTp0YWJsZS8ke3ByZWZpeH0uJHtzZXJ2aWNlfS4qYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2R5bmFtb2RiOkNyZWF0ZVRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2R5bmFtb2RiOkJhdGNoR2V0SXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkeW5hbW9kYjpDb25kaXRpb25DaGVja0l0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHluYW1vZGI6UHV0SXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkeW5hbW9kYjpEZWxldGVJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2R5bmFtb2RiOkdldEl0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHluYW1vZGI6U2NhbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkeW5hbW9kYjpRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkeW5hbW9kYjpVcGRhdGVJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2R5bmFtb2RiOlVwZGF0ZVRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2R5bmFtb2RiOkdldFJlY29yZHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF4OkdldEl0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF4OlB1dEl0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF4OkNvbmRpdGlvbkNoZWNrSXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXg6QmF0Y2hHZXRJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RheDpCYXRjaFdyaXRlSXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXg6RGVsZXRlSXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXg6UXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF4OlVwZGF0ZUl0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF4OlNjYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWRkaXRpb25hbFN0YXRlbWVudHMubWFwKGFzID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0OiBhcy5FZmZlY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2U6IGFzLlJlc291cmNlLnJlcGxhY2VBbGwoJyRSRUdJT04nLCByZWdpb24pLnJlcGxhY2VBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICckQUNDT1VOVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb246IGFzLkFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCl9YCxcbiAgICAgICAgKSxcbiAgICAgICAgJ0Vycm9yIGFzc2lnbmluZyBwb2xpY3knLFxuICAgIClcbn1cbiJdfQ==