我正在使用 AWS CDK 构建 Web 服务。我希望所有端点都需要 api 密钥才能允许连接。
目前我像这样设置我的网络服务:
// Define the API Gateway
const api = new apigw.RestApi(scope, 'MyApiGateway', {
defaultCorsPreflightOptions: {
allowOrigins: apigw.Cors.ALL_ORIGINS,
allowMethods: apigw.Cors.ALL_METHODS, // this is also the default
}
});
const apiKeyName = 'myKeyName';
const apiKey = new apigw.ApiKey(scope, 'api-key', {
apiKeyName,
enabled: true
});
// define the usage plan
const usagePlan = api.addUsagePlan('UsagePlan', {
name: 'UsagePlan',
throttle: {
rateLimit: 100,
burstLimit: 200,
},
});
// add the API key to the usage plan
usagePlan.addApiKey(apiKey); …Run Code Online (Sandbox Code Playgroud) 尝试获取 CF 创建的 EC2 实例的实例 ID(由 AWS CDK 生成),这至少适用于 v0.28:
const natInstance1 = new CfnInstance(this, 'NatInstance1', {
imageId: NAT_AMI_ID,
instanceType: NAT_INSTANCE_TYPE,
subnetId: vpc.publicSubnets[0].subnetId,
keyName: NAT_SSH_KEY,
sourceDestCheck: false,
securityGroupIds: [
publicSecurityGroup.securityGroupId
]
});
new ec2.CfnEIPAssociation(this, 'NatEip1', {
eip: NAT_EIP_POOL[0],
instanceId: natInstance1.instanceId
});
Run Code Online (Sandbox Code Playgroud)
这在 v0.37.0 中不再有效,出现错误:Property 'instanceId' does not exist on type 'CfnInstance'.ts(2339)
我有一个 AWS::EC2::VPCEndpoint 资源类型,我想获取其 DnsEntries 值,根据https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint。 html#aws-resource-ec2-vpcendpoint-return-values是 DNS 条目列表。我希望能够从列表中选择第一项,所以我尝试了这样的操作:
const vpcEndpoint = new ec2.CfnVPCEndpoint(this, "vpcendpoint", {
serviceName: "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxx",
vpcId: "vpc-123",
privateDnsEnabled: false,
subnetIds: ["subnet-123"],
vpcEndpointType: "Interface",
});
const fisrtDnsEntry = cdk.Fn.select(0, cdk.Fn.getAtt(vpcEndpoint.logicalId, "DnsEntries"))
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为Fn.select需要一个字符串数组,但Fn.getAtt返回IResolvable并且只有toString()方法。
知道我还能做什么吗?
使用 AWS CDK TYPESCRIPT 来部署 Beanstalk 应用程序。我能够使用 AWS CDK Typescript 设置 Beanstalk 应用程序,但找不到在现有 VPC 中以高可用性设置它的方法。这是我的 ebstack.ts
#!/usr/bin/env node
import cdk = require('@aws-cdk/core');
import elasticbeanstalk = require('@aws-cdk/aws-elasticbeanstalk');
export class ElbtestStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
//objects for access parameters
const node = this.node;
const appName = 'DEVELOPMENT';
const platform = node.tryGetContext("platform");
const app = new elasticbeanstalk.CfnApplication(this, 'Application', {
applicationName: appName
});
const optionSettingProperties: elasticbeanstalk.CfnEnvironment.OptionSettingProperty[] = [
{
namespace: 'aws:autoscaling:launchconfiguration',
optionName: 'InstanceType',
value: 't3.small', …Run Code Online (Sandbox Code Playgroud) vpc amazon-web-services typescript amazon-elastic-beanstalk aws-cdk
我正在CDK 中创建CfnDeliveryStream,我想稍后在 IAM 角色中使用 ARN。我找到了属性attrArn,但它没有记录。我的问题是:如何访问传输流的 ARN(类似于S3 结构中可用的内容)。
谢谢,本尼
我想用 cdk 创建一个可公开访问的数据库(dev db)。我知道如何通过 Web UI 做到这一点。我需要将公共可访问性设置为 true 并允许我的 IP 作为安全组的入站。
const vpc = new ec2.Vpc(this, 'Vpc')
const postgres = new rds.DatabaseInstance(this, 'Postgres', {
engine: rds.DatabaseInstanceEngine.POSTGRES,
instanceClass: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO),
masterUsername: 'postgres',
vpc,
})
Run Code Online (Sandbox Code Playgroud)
这是我目前的状态,它工作正常,但没有公共访问权限
我可以通过选中复选框 ( https://ibb.co/bWDLcNT )在 AWS 控制台中手动启用(S3 存储桶的请求指标,apid 选项)。但我试图通过代码来做到这一点。我尝试寻找使用 CloudFormation / CDK(nodeJs) / AWS CLI 的解决方案。但没有运气。我找到的解决方案只涉及使用过滤器等创建指标,而不是启用它。有什么建议吗?
amazon-s3 amazon-web-services aws-cloudformation amazon-cloudwatch aws-cdk
我有一个 lambda,我希望能够创建 dynamo db 表(不仅可以访问,还可以创建具有动态名称的表)。
const lambdaA = new lambda.Function(this, 'lambda-a', {
functionName: 'lambda-a',
memorySize: 256,
runtime: lambda.Runtime.NODEJS_12_X,
handler: 'index.handler',
code: lambda.Code.fromAsset(path.join(require.resolve('/lambda-a'), '..')),
});
Run Code Online (Sandbox Code Playgroud)
如何使用 AWS CDK 执行此操作?
我想我需要以某种方式将策略AmazonDynamoDBFullAccess(或其他一些允许创建表的策略)添加到 lambda 的执行角色。
我正在尝试探索是否有更好的方法。我只是使用策略生成器定义 IAM 策略,然后使用以下内容——
const policyDocument = {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FirstStatement",
"Effect": "Allow",
"Action": ["iam:ChangePassword"],
"Resource": "*"
},
{
"Sid": "SecondStatement",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::confidential-data",
"arn:aws:s3:::confidential-data/*"
],
"Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
}
]
};
Run Code Online (Sandbox Code Playgroud)
那么下面需要定义——
const customPolicyDocument = iam.PolicyDocument.fromJson(policyDocument);
const newManagedPolicy = new ManagedPolicy(stack, 'MyNewManagedPolicy', {
document: customPolicyDocument
});
const newPolicy = new Policy(stack, 'MyNewPolicy', {
document: customPolicyDocument
});
Run Code Online (Sandbox Code Playgroud)
最后,我创建了一个角色并附加了策略 -
const TestBucketRole = new iam.Role(this, 'TestBucketRole', {
assumedBy: new iam.ArnPrincipal('arn:aws:iam::123456789012:user/user1'), …Run Code Online (Sandbox Code Playgroud) aws-cdk ×10
amazon-iam ×1
amazon-rds ×1
amazon-s3 ×1
amazon-vpc ×1
aws-lambda ×1
typescript ×1
vpc ×1