serverless-offline-msk
Version:
A serverless offline plugin that enables AWS MSK events
82 lines (74 loc) • 2.54 kB
JavaScript
;
const { style } = require('@serverless/utils/log');
const log = require('./log');
const { serviceSlug, instanceSlug } = require('./utils');
const { getDashboardUrl } = require('./dashboard');
const { getPlatformClientWithAccessKey } = require('./client-utils');
module.exports.configureDeployProfile = async (ctx) => {
let deploymentProfile;
const {
provider,
sls: {
service: { app, org, service },
processedInput: { options: cliOptions },
},
} = ctx;
if (cliOptions['use-local-credentials']) {
log.info('Skipping provider resolution, use-local-credentials option present');
return;
}
const stage = cliOptions.stage || provider.getStage();
const region = cliOptions.region || provider.getRegion();
const sdk = await getPlatformClientWithAccessKey(org);
try {
deploymentProfile = await sdk.deploymentProfiles.get({
orgName: org,
appName: app,
stageName: stage,
});
} catch (e) {
log.debug('deployment profile fetch error %o', e);
}
if (deploymentProfile && deploymentProfile.providerCredentials) {
ctx.provider.cachedCredentials = deploymentProfile.providerCredentials.secretValue;
ctx.provider.cachedCredentials.region = region;
}
let providerCredentials = {};
try {
if (!ctx.sls.service.orgUid) {
const { orgUid } = await sdk.getOrgByName(ctx.sls.service.org);
ctx.sls.service.orgUid = orgUid;
}
providerCredentials = await sdk.getProvidersByOrgServiceInstance(
ctx.sls.service.orgUid,
serviceSlug({ app, service }),
instanceSlug({ app, service, stage, region })
);
} catch (e) {
if (!e.statusCode === '404') {
throw e;
}
}
const providersConfigUrl = `${getDashboardUrl(ctx)}/providers`;
if (providerCredentials.result) {
const awsCredentials = providerCredentials.result.find(
(result) => result.providerName === 'aws'
);
if (awsCredentials) {
ctx.state.areProvidersUsed = true;
ctx.provider.cachedCredentials = {
dashboardProviderAlias: awsCredentials.alias,
accessKeyId: awsCredentials.providerDetails.accessKeyId,
secretAccessKey: awsCredentials.providerDetails.secretAccessKey,
sessionToken: awsCredentials.providerDetails.sessionToken,
};
ctx.provider.cachedCredentials.region = ctx.provider.getRegion();
}
} else {
log.notice(
`Using local credentials. Add provider credentials via dashboard: ${style.link(
providersConfigUrl
)}`
);
}
};