小编fed*_*nev的帖子

切换到 18.x 后,Lambda 函数无法加载 AWS sdk

我将 Lambda 函数从 node12.x 升级到了 node18.x

该代码在 12.x 上运行得很好,切换到 18.x 后,我无法再包含 AWS sdk:

我曾经通过简单地输入以下内容来包含它:

var AWS = require('aws-sdk');
Run Code Online (Sandbox Code Playgroud)

我现在收到这个错误

"Error: Cannot find module 'aws-sdk'
Run Code Online (Sandbox Code Playgroud)

我想如果我能让AWS sdk正确加载该功能应该没问题,有什么想法吗?

谢谢

amazon-web-services node.js aws-lambda aws-sdk-nodejs

8
推荐指数
2
解决办法
2万
查看次数

AWS Graphql lambda 查询

我没有为此应用程序使用 AWS AppSync。我已经创建了 Graphql 模式,我已经制作了自己的解析器。对于每个创建、查询,我都创建了每个 Lambda 函数。我使用了 DynamoDB 单表概念及其全局二级索引。

创建一个 Book 项目对我来说没问题。在 DynamoDB 中,该表如下所示:在此输入图像描述

我在返回 Graphql 查询时遇到问题。从 DynamoDB 表获取后Items,我必须使用 Map 函数,然后返回Items基于 Graphql 的表type。我觉得这不是有效的方法。我不知道查询数据的最佳方式。另外,我的作者和作者查询都为空。

这是我的gitlab 分支

这是我的 Graphql 架构

import { gql } from 'apollo-server-lambda';

const typeDefs = gql`
  enum Genre {
    adventure
    drama
    scifi
  }

  enum Authors {
    AUTHOR
  }

  # Root Query - all the queries supported by the schema

  type Query {
    """
    All Authors query
    """
    authors(author: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda graphql apollo-server

7
推荐指数
1
解决办法
466
查看次数

CodePipeline 的云开发工具包失败,找不到 cdk.out 的匹配基本目录路径

您好,如果我在使用 AWS 云开发工具包 (CDK) 部署代码管道时收到此错误的可能来源,我将不胜感激。

我有一个 Typecript CDK 项目(cdk init --语言打字稿)。这使用 GitHub 挂钩在我的 GitHub 存储库中的分支的每次更新上进行部署。这一步效果很好。但是,构建后步骤发生失败并出现错误

“阶段上下文状态代码:CLIENT_ERROR 消息:找不到 cdk.out 的匹配基本目录路径”

从下面的代码中您可以看到我使用 @aws-cdk/pipelines 、 SimpleSynthAction.standardNpmSynth 并且我认为这不会生成 cdk.out 文件(?)。任何帮助我解决这个问题的评论将不胜感激

import { Construct, SecretValue, Stack, StackProps } from '@aws-cdk/core';
import * as cp from '@aws-cdk/aws-codepipeline';
import * as cpa from '@aws-cdk/aws-codepipeline-actions';
import * as pipelines from '@aws-cdk/pipelines';
import { WebServiceStage } from './webservice_stage';


    export class MyPipelineStack extends Stack {
      constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props);
    
        const sourceArtifact = new cp.Artifact(); …
Run Code Online (Sandbox Code Playgroud)

aws-codepipeline aws-cdk clouddevelopmentkit

5
推荐指数
2
解决办法
4947
查看次数

AWS Step 函数和 Athena:我可以从输入路径配置查询字符串吗?

在我的步骤函数中,我想执行 Athena 查询。我能够定义一个步骤并成功执行查询。但是,我想传递一些参数作为输入并在查询字符串中使用它们。例如。

假设我的查询字符串是:

select * from <Data Source>.<database>.<tablename> where partition_0 = '2021';

我希望能够将年份作为输入 json 传递给步骤函数,例如:

{
"YYYY": 2021
}
Run Code Online (Sandbox Code Playgroud)

是否可以在查询字符串中插入输入“YYYY”?如果是这样,怎么办?

步骤函数配置示例:

{
  "Comment": "Start athena exececution",
  "StartAt": "athena",
  "States": {
    "athena": {
      "Type": "Task",
      "InputPath": "$",
      "Resource": "arn:aws:states:::athena:startQueryExecution.sync",
      "Parameters": {
        "QueryString": "select * from mycatalog.mydatabase.mytable where partition_0 = '2021'",
        "WorkGroup": "primary",
        "ResultConfiguration": {
          "OutputLocation": "s3://mys3bucket"
        }
      },
      "Next": "Pass"
    },
    "Pass": {
      "Comment": "A Pass state passes its input to its output, without performing work. Pass states are useful …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-step-functions amazon-athena

5
推荐指数
1
解决办法
4430
查看次数

AWS CDK Secrets Manger 获取完整的 arn (python)

我正在尝试创建一个使用需要秘密的脚本的金丝雀资源。我正在尝试向金丝雀角色添加政策声明(我将其作为 cdk 的一部分创建)。为此,我需要获取完整的秘密 arn,我可以使用以下命令获取部分 arn

secret_from_name = secretsmanager.Secret.from_secret_name_v2
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

resources = [secret_from_name.secret_arn]
Run Code Online (Sandbox Code Playgroud)

但这并没有给我完整的 arn 并且权限不起作用。

.....because no identity-based policy allows the secretsmanager:GetSecretValue action
Run Code Online (Sandbox Code Playgroud)

我想我可以通过这样做来解决这个问题

.....because no identity-based policy allows the secretsmanager:GetSecretValue action
Run Code Online (Sandbox Code Playgroud)

但因为这是通过名称派生的,所以它不会获得完整的 arn,并且您会得到“未定义”

我还尝试使用部分 arn 从属性中获取它,但也没有什么乐趣。

那么有什么办法可以解决这个问题吗?因为我不想做的是传递完整的 arn,或者是否有其他方法可以授予对此 reousece 的访问权限?

python amazon-iam aws-secrets-manager aws-cdk

5
推荐指数
1
解决办法
2476
查看次数

AWS CDK:如何在不失去更新能力的情况下重命名现有堆栈?

我已经创建并部署了一个生产堆栈:

const app = new cdk.App();
const stack = new cdk.Stack(app, 'myorg-production-api');
Run Code Online (Sandbox Code Playgroud)

现在更改命名架构很重要,我需要此堆栈为myorg-api-production-root.

当然,我可以通过手动销毁旧的,然后部署新的来做到这一点(两者不能同时存在,因为像 DNS 记录这样的“单一”资源),但这意味着巨大的停机时间,我需要不惜一切代价避免。

我可以以某种方式干预 CDK 的堆栈身份确定过程并更改堆栈名称而不需要停机吗?

rename downtime amazon-web-services aws-cloudformation aws-cdk

5
推荐指数
1
解决办法
5077
查看次数

从 CDK 中的 JSON 文件创建 Step Functions

使用现有的 Step Functions 定义 JSON 文件,如何直接在 CDK 中使用它来创建 Step Function?

amazon-web-services aws-step-functions aws-cdk

4
推荐指数
2
解决办法
5003
查看次数

如何使用 AWS CDK 更新现有 SSM 参数

我想使用 AWS CDK 更新 SSM 参数。

我的用例:在第一个堆栈中,我正在创建 SSM 参数。在第二个堆栈中想要更新(更改)它。我遇到的解决方案之一是使用 lambda,我想避免它。

是通过 CDK 更新现有参数的方法吗?cfn_param.set_value

第一个堆栈:

    class ParamSetupStack(Stack):
    
        def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
            super().__init__(scope, construct_id, **kwargs)
    
    
    
            ssm.StringParameter( self,
                                f'PIPELINE-PARAM-1',
                                parameter_name="parma-1",
                                string_value="SOME STRING VALUE",
                                description="Desctiption of ...."
                                )
Run Code Online (Sandbox Code Playgroud)

第二个堆栈:

    class UpdateParamStack(Stack):
    
        def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
            super().__init__(scope, construct_id, **kwargs)
    
            template = cfn_inc.CfnInclude(self, "Template",
                                      template_file="PATH/TO/ParamSetupStack.json",
                                      preserve_logical_ids=False)
    
            cfn_param = template.get_resource("PIPELINE-PARAM-1")
    
            cfn_param.set_value("NEW VALUE")
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation aws-ssm aws-cdk

3
推荐指数
1
解决办法
3756
查看次数

引用 CDK 中已存在的 SNS 主题?

我的 AWS 环境中已存在一个 SNS 主题。我不想创建新的 SNS 主题,而是想简单地引用已经存在的主题并向其发布消息。

现在,我有以下内容:

const topic = new sns.Topic(this, 'AggregateSNS', {

      contentBasedDeduplication: false,
      displayName: 'Customer subscription topic',
      fifo: true,
      topicName: 'MySNSTopic',

      //how to reference existing topics?
    });
Run Code Online (Sandbox Code Playgroud)

我的理解是这将创建一个新的 SNS 主题,但正如我上面所说,我想引用现有的 SNS 主题。如何在 CDK 中引用现有的 SNS 主题?

amazon-web-services amazon-sns aws-cdk

2
推荐指数
1
解决办法
4453
查看次数

无法向 EventBridge 总线授予权限

我正在通过 CDK 在 AWS EventBridge 中创建自定义总线:

    export class EventbridgeStack extends Stack {
      constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props);
    
        const targetCoreBus = new events.EventBus(this, 'TargetCoreBus', {
          eventBusName: 'TargetCoreBus',
        });
    
        targetCoreBus.grantPutEventsTo(new iam.AccountPrincipal('1234567890'));
    
      }
    }
Run Code Online (Sandbox Code Playgroud)

巴士制作得很好,但我假设线路

    targetCoreBus.grantPutEventsTo(new iam.AccountPrincipal('1234567890'));
Run Code Online (Sandbox Code Playgroud)

将向总线添加策略,允许指定帐户将事件放入其中。但它似乎没有做任何事情,堆栈中没有合成任何新内容,也没有向总线添加任何策略。这是预期的吗,我做错了什么吗?

userprincipal amazon-iam aws-cdk aws-event-bridge

2
推荐指数
1
解决办法
1425
查看次数

为什么我的具有 TTL 纪元的 DynamoDB 项目无法删除?

过去超过一周以上的两个纪元日期:

  1. 1666324555879
  2. 1666170554391

我已经用这个工具确定了他们的日期:https://www.epochconverter.com/

期望:在纪元日期后 48 小时内删除的项目,由其中包含 (TTL) 的字段确定。

结果:任何表中都没有项目被删除。

控制台记录:

在此输入图像描述

ttl amazon-dynamodb

2
推荐指数
1
解决办法
361
查看次数