我将 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正确加载该功能应该没问题,有什么想法吗?
谢谢
我没有为此应用程序使用 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)您好,如果我在使用 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) 在我的步骤函数中,我想执行 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) 我正在尝试创建一个使用需要秘密的脚本的金丝雀资源。我正在尝试向金丝雀角色添加政策声明(我将其作为 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 的访问权限?
我已经创建并部署了一个生产堆栈:
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
使用现有的 Step Functions 定义 JSON 文件,如何直接在 CDK 中使用它来创建 Step Function?
我想使用 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) 我的 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 主题?
我正在通过 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)
将向总线添加策略,允许指定帐户将事件放入其中。但它似乎没有做任何事情,堆栈中没有合成任何新内容,也没有向总线添加任何策略。这是预期的吗,我做错了什么吗?
过去超过一周以上的两个纪元日期:
我已经用这个工具确定了他们的日期:https://www.epochconverter.com/
期望:在纪元日期后 48 小时内删除的项目,由其中包含 (TTL) 的字段确定。
结果:任何表中都没有项目被删除。
控制台记录:
aws-cdk ×7
amazon-iam ×2
aws-lambda ×2
amazon-sns ×1
aws-ssm ×1
downtime ×1
graphql ×1
node.js ×1
python ×1
rename ×1
ttl ×1