{"id":19042532,"url":"https://github.com/serverless/aws-sdk-extra","last_synced_at":"2025-04-17T18:33:54.678Z","repository":{"id":48375447,"uuid":"255905960","full_name":"serverless/aws-sdk-extra","owner":"serverless","description":"The AWS SDK + a handful of extra convenience methods.","archived":true,"fork":false,"pushed_at":"2024-12-09T15:40:01.000Z","size":73,"stargazers_count":18,"open_issues_count":6,"forks_count":4,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-02-17T09:34:31.986Z","etag":null,"topics":["aws","aws-sdk","cloud","faas","javascript","serverless","utils"],"latest_commit_sha":null,"homepage":"https://serverless.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/serverless.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-15T12:12:29.000Z","updated_at":"2024-12-09T15:40:23.000Z","dependencies_parsed_at":"2022-08-24T14:49:50.106Z","dependency_job_id":null,"html_url":"https://github.com/serverless/aws-sdk-extra","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverless%2Faws-sdk-extra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverless%2Faws-sdk-extra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverless%2Faws-sdk-extra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serverless%2Faws-sdk-extra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/serverless","download_url":"https://codeload.github.com/serverless/aws-sdk-extra/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249366281,"owners_count":21258340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-sdk","cloud","faas","javascript","serverless","utils"],"created_at":"2024-11-08T22:38:11.586Z","updated_at":"2025-04-17T18:33:54.670Z","avatar_url":"https://github.com/serverless.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"**📦 Archived - This repository is archived and preserved for reference only. No updates, issues, or pull requests will be accepted. If you have questions, please reach out to our support team.**\n\n---\n\n# AWS SDK Extra\n\nThe AWS SDK + a handful of extra convenience methods.\n\n```js\n// require aws-sdk-extra, instead of the official aws-sdk\nconst aws = require(`@serverless/aws-sdk-extra`)\n\n// initialize any service, as usual.\nconst s3 = new aws.S3({\n  credentials: { accessKeyId: 'xxx', secretAccessKey: 'xxx' },\n  region: 'us-east-1'\n})\n\n// initialize the Extras service for extra methods\nconst extras = new aws.Extras({\n  credentials: { accessKeyId: 'xxx', secretAccessKey: 'xxx' },\n  region: 'us-east-1'\n})\n\n// call some powerful extra methods. More info below.\nconst certificate = await extras.deployCertificate(params)\n```\n\n# Reference\n\n- [deployDistributionDomain](#deployDistributionDomain)\n- [deployCertificate](#deployCertificate)\n- [deployDistributionDns](#deployDistributionDns)\n- [addDomainToDistribution](#addDomainToDistribution)\n- [getDomainHostedZoneId](#getDomainHostedZoneId)\n- [deployRole](#deployRole)\n- [removeRole](#removeRole)\n- [removeRolePolicies](#removeRolePolicies)\n- [deployLambda](#deployLambda)\n- [deployApigDomainDns](#deployApigDomainDns)\n- [deployAppSyncApi](#deployAppSyncApi)\n- [deployAppSyncSchema](#deployAppSyncSchema)\n- [deployAppSyncResolvers](#deployAppSyncResolvers)\n- [deployStack](#deployStack)\n- [removeStack](#removeStack)\n\n# deployDistributionDomain\n\nDeploys a CloudFront distribution domain by adding the domain to the distribution and deploying the certificate and DNS records.\n\n```js\nconst params = {\n  domain: 'serverless.com',\n  distributionId: 'xxx'\n}\n\nconst {\n  certificateArn,\n  certificateStatus,\n  domainHostedZoneId\n} = await extras.deployDistributionDomain(params)\n```\n\n# deployCertificate\n\nDeploys a free ACM certificate for the given domain.\n\n```js\nconst params = {\n  domain: 'serverless.com'\n}\n\nconst { certificateArn, certificateStatus, domainHostedZoneId } = await extras.deployCertificate(\n  params\n)\n```\n\n# deployDistributionDns\n\nDeploys a DNS records for a distribution domain.\n\n```js\nconst params = {\n  domain: 'serverless.com',\n  distributionUrl: 'xxx.cloudfront.net'\n}\n\nconst { domainHostedZoneId } = await extras.deployDistributionDns(params)\n```\n\n# addDomainToDistribution\n\nAdds a domain or subdomain to a CloudFront Distribution.\n\n```js\nconst params = {\n  domain: 'serverless.com',\n  certificateArn: 'xxx:xxx',\n  certificateStatus: 'ISSUED'\n}\n\nconst { domainHostedZoneId } = await extras.addDomainToDistribution(params)\n```\n\n# getDomainHostedZoneId\n\nFetches the hosted zone id for the given domain.\n\n```js\nconst params = {\n  domain: 'serverless.com'\n}\n\nconst { domainHostedZoneId } = await extras.getDomainHostedZoneId(params)\n```\n\n# deployRole\n\nUpdates or creates the given role name with the given service \u0026 policy. You can specify an inline policy:\n\n```js\nconst params = {\n  name: 'my-role',\n  service: 'lambda.amazonaws.com',\n  policy: [\n    {\n      Effect: 'Allow',\n      Action: ['sts:AssumeRole'],\n      Resource: '*'\n    },\n    {\n      Effect: 'Allow',\n      Action: ['logs:CreateLogGroup', 'logs:CreateLogStream'],\n      Resource: '*'\n    }\n  ]\n}\nconst { roleArn } = await extras.deployRole(params)\n```\n\nOr you can specify the policy as a maanged policy arn string:\n\n```js\nconst params = {\n  name: 'my-role',\n  service: 'lambda.amazonaws.com',\n  policy: 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'\n}\nconst { roleArn } = await extras.deployRole(params)\n```\n\nIf you don't specify a policy property, an admin policy will be created by default.\n\n# removeRole\n\nRemoves the given role and all its attached managed and inline policies.\n\n```js\nconst params = {\n  name: 'my-role'\n}\n\nawait extras.removeRole(params)\n```\n\n# removeRolePolicies\n\nRemoves all attached managed and inline policies for the given role.\n\n```js\nconst params = {\n  name: 'my-role'\n}\n\nawait extras.removeRolePolicies(params)\n```\n\n# deployLambda\n\nUpdates a lambda if it exists, otherwise creates a new one.\n\n```js\nconst params = {\n  lambdaName: 'my-lambda', // required\n  roleArn: 'aws:iam:role:arn:xxx', // required\n  lambdaSrc: 'path/to/lambda/directory' // required. could also be a buffer of a zip file\n  memory: 512 // optional, along with the other lambda config\n  vpcConfig: // optional, specify a VPC\n    securityGroupIds:\n      - sg-xxx\n    subnetIds:\n      - subnet-xxx\n      - subnet-xxx\n}\n\nconst { lambdaArn, lambdaSize, lambdaSha } = await extras.deployLambda(params)\n```\n\n# deployApigDomainDns\n\nDeploys the DNS records for an Api Gateway V2 HTTP custom domain\n\n```js\nconst params = {\n  domain: 'serverless.com', // required. The custom domain you'd like to configure.\n  apigatewayHostedZoneId: 'qwertyuiop', // required. The regional hosted zone id of the APIG custom domain\n  apigatewayDomainName: 'd-qwertyuiop.xxx.com' // required. The regional endpoint of the APIG custom domain\n}\n\nconst { domainHostedZoneId } = await extras.deployApigDomainDns(params)\n```\n\n# deployAppSyncApi\n\nUpdates or creates an AppSync API\n\n```js\nconst params = {\n  apiName: 'my-api',\n  apiId: 'xxx' // if provided, updates the API. If not provided, creates a new API\n}\n\nconst { apiId, apiUrls } = await extras.deployAppSyncApi(params)\n```\n\n# deployAppSyncSchema\n\nUpdates or creates an AppSync Schema\n\n```js\nconst params = {\n  apiId: 'xxx', // the targeted api id\n  schema: '...' // valid graphql schema\n}\n\nawait extras.deployAppSyncApi(params)\n```\n\n# deployAppSyncResolvers\n\nUpdates or creates AppSync Resolvers\n\n```js\nconst params = {\n  apiId,\n  roleName: 'my-role', // name of the role that provides access for these resources to the required resources\n  resolvers: {\n    Query: {\n      getPost: {\n        lambda: 'getPost' // name of the lambda function to use as a resolver for the getPost field\n      }\n    },\n    Mutation: {\n      putPost: {\n        lambda: 'putPost'\n      }\n    }\n  }\n}\n\nawait extras.deployAppSyncResolvers(params)\n```\n\n# deployStack\n\nUpdates or creates a CloudFormation stack.\n\n```js\nconst inputs = {\n  stackName: 'my-stack', // required\n  template: {\n    // required\n    AWSTemplateFormatVersion: '2010-09-09',\n    Description: 'Example Stack',\n    Resources: {\n      LogGroup: {\n        Type: 'AWS::Logs::LogGroup',\n        Properties: {\n          LogGroupName: '/log/group/one',\n          RetentionInDays: 14\n        }\n      }\n    },\n    Outputs: {\n      firstStackOutput: {\n        Value: {\n          'Fn::GetAtt': ['LogGroup', 'Arn']\n        }\n      },\n      secondStackOutput: {\n        Value: {\n          'Fn::GetAtt': ['LogGroup', 'Arn']\n        }\n      }\n    }\n  },\n  capabilities: ['CAPABILITY_IAM'],\n  parameters: {\n    firstParameter: 'value'\n  },\n  role: 'arn:iam:xxx'\n}\n\nconst outputs = await extras.deployStack(params)\n```\n\n# removeStack\n\nRemoves a CloudFormation stack if it exists.\n\n```js\nconst prams = {\n  stackName: 'my-stack' // name of the stack you want to remove\n}\n\nawait extras.removeStack(params)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserverless%2Faws-sdk-extra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fserverless%2Faws-sdk-extra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserverless%2Faws-sdk-extra/lists"}