AwsSdkCall 인터페이스를 사용하여 CDK 프로젝트에서 AWS SDK를 호출하는 방법은 무엇인가요?
AwsSdkCall 인터페이스를 사용하여 AWS Cloud Development Kit(AWS CDK) 프로젝트에서 AWS SDK를 호출하려고 합니다.
간략한 설명
다음과 같은 스택 배포 시나리오에 AWS Software Development Kit(AWS SDK) 호출을 사용할 수 있습니다.
- 스택이 동적으로 생성되고 업데이트되는 동안 구성을 검색합니다.
- AWS CloudFormation에 있는 리소스의 반환 값에서 지원되지 않는 리소스의 속성을 검색합니다.
- AWS CloudFormation에서 지원하지 않는 작은 패치나 구성 변경을 수행합니다.
Create, Delete 또는 Update와 같은 다양한 CloudFormation 스택 작업 이벤트에서 AWS SDK 호출을 트리거할 수 있습니다. AWS SDK 호출을 위해 배포 파이프라인에 대한 액세스 및 도구를 설정할 필요가 없습니다. AWS SDK 런타임은 AWS Cloud Development Kit(AWS CDK)에 의해 완전히 설정됩니다. 또한, 사용자 지정 리소스 뒤에 있는 AWS Lambda 함수에 대한 액세스를 사용자 지정하고 제한할 수 있습니다.
해결 방법
참고: 이 해결 방법의 다음 예시는 Python을 사용합니다. 사용 중인 프로그래밍 언어 전용 명령을 사용해야 합니다.
AwsSdkCall을 사용하여 AWS SDK를 호출하려면 세 가지 기본 파라미터를 선언해야 합니다.
- Service - 호출하려는 AWS 서비스입니다. 값은 대소문자를 구분합니다.
- Action - 수행하려는 API/작업 호출입니다. 이는 보통 카멜 표기법 패턴을 따릅니다. 값은 대소문자를 구분합니다.
- Parameters - API/작업 호출을 수행하는 동안 전달하는 선택적 파라미터입니다. 파라미터를 변수로 선언한 다음 API 페이로드용 JSON 객체와 유사한 인터페이스에 전달할 수 있습니다. 자세한 내용은 ](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/index.html)JavaScript용 AWS SDK[를 참조하세요.
1. AWS Systems Manager Agent에서 Amazon Machine Image ID 검색:
참고: 다음 예시에서는 custom_resources를 cr로 가져오고 aws_cdk를 cdk로 가져옵니다.
get_ami_id = cr.AwsCustomResource(self, "GetAMIId", on_create=cr.AwsSdkCall( service="SSM", action="getParameter", parameters={ "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2" }, physical_resource_id=cr.PhysicalResourceId.of('get-ami-id')), policy=cr.AwsCustomResourcePolicy.from_sdk_calls( resources=cr.AwsCustomResourcePolicy.ANY_RESOURCE )) cdk.CfnOutput(self, 'ImageId', value=get_ami_id.get_response_field('Parameter.Value'))
참고: get_response_field 파라미터를 사용하여 API 호출의 응답을 참조할 수 있습니다.
2. 사용자 지정 KMS 키를 사용하여 Lambda 로그 그룹 암호화:
참고: 다음 예시에서는 aws_cdk에서 aws_lambda를 lambda_로, custom_resources를 cr로, aws_kms를 kms로 가져옵니다.
encryption_key = kms.Key(self, 'Key') encryption_key.grant_encrypt_decrypt( iam.ServicePrincipal('logs.amazonaws.com')) fn = lambda_.Function(self, "MyFunction", runtime=lambda_.Runtime.NODEJS_16_X, handler="index.handler", code=lambda_.Code.from_inline("hello world")) associate_kms_key = cr.AwsCustomResource(self, "AssociateKmsKey", on_create=cr.AwsSdkCall( service="CloudWatchLogs", action="associateKmsKey", parameters={ "kmsKeyId": encryption_key.key_arn, "logGroupName": fn.log_group.log_group_name }, physical_resource_id=cr.PhysicalResourceId.of("associate-kms-key")), policy=cr.AwsCustomResourcePolicy.from_sdk_calls( resources=cr.AwsCustomResourcePolicy.ANY_RESOURCE ) )
참고: 속성 정책을 사용하여 사용자 지정 리소스 뒤에 있는 Lambda 함수에 API 호출을 수행할 권한을 부여할 수 있습니다. **from_sdk_calls()**를 사용하는 경우, 각 API 호출은 해당하는 AWS Identity and Access Management(IAM) 권한으로 변환됩니다. 합성 후 올바른 권한이 추가되지 않은 경우, **from_statements()**를 사용하여 수동으로 권한을 추가할 수 있습니다.
예시:
policy=cr.AwsCustomResourcePolicy.from_statements( statements=[iam.PolicyStatement(actions=[ 'dynamodb:DescribeTable', 'dynamodb:ListTables'], resources=['*'], )] )
관련 콘텐츠
- 질문됨 2달 전lg...
- 질문됨 2달 전lg...
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 7달 전
- AWS 공식업데이트됨 3년 전