使用 Ansible 将 IAM 角色附加到 AWS RDS 实例

seshadri_c

oracle-ee使用 Ansible (v2.9)rds_instance模块创建了一个 AWS RDS 实例后来我意识到我需要一些数据库文件。所以我创建了一个 S3 存储桶并向其中上传了一些.dmp文件。

我写了一个如下的 Ansible 任务来将 RDS 与 S3“集成”:

- name: Update RDS instance with Role ARN for S3 ingestion
  rds_instance:
    region: "{{ region }}"
    aws_access_key: "{{ aws_access_key_id }}"
    aws_secret_key: "{{ aws_secret_access_key }}"
    db_instance_identifier: my-db-instance
    s3_ingestion_role_arn: "{{ aws_rds_iam_role_arn }}"
    s3_bucket_name: "{{ aws_rds_s3_bucket }}"
    s3_prefix: db
    option_group_name: "{{ aws_rds_option_group }}"

注意:在 Playbook 运行期间提供了所有变量vars_files:

任务执行后,它会显示ok: [localhost]而不是更新 RDS 实例上的 IAM 角色。

AssociatedRoles使用 AWS CLI 进行快速检查显示null

$ aws rds describe-db-instances --db-instance-identifier my-db-instance --query "DBInstances[0].AssociatedRoles[0]"
null

根据 的 Ansible 文档rds_instance,我希望将指定的角色附加到 RDS 实例(至少显示在上面的 AWS CLI 输出中),并且匹配的文件s3_prefix可用。我错过了什么吗?

注意:我可以使用 AWS CLI 附加 IAM 角色并导入。但是,我希望在我们将创建的未来 RDS 实例中使用 Ansible。

编辑

除了附加到 RDS 实例的角色之外,我还希望将匹配的文件s3_prefix从 S3 存储桶复制到 RDS 实例。我已经调查过,DATA_DUMP_DIR但里面只有datapump/目录(没有*.dmp文件)。

seshadri_c

最终,我不得不求助于使用 AWS CLI 命令和 SQL 脚本来从 S3 存储桶下载转储 ( ) 文件的稍微有点长的解决方法*.dmp

将带有 S3_INTEGRATION 选项的 IAM 角色附加到 RDS 实例:

- name: Attach IAM role to RDS instance
  command: "aws rds add-role-to-db-instance --instance-identifier my-db-instance --feature-name S3_INTEGRATION --role-arn {{ aws_rds_iam_role_arn }}"
  register: attach_result
  failed_when:
  - attach_result.rc > 0
  - "'already associated' not in attach_result.stderr"

这确保了授权访问 S3 的 IAM 角色附加到我的 RDS 实例。

下一步是导入。但在此之前,我会验证该角色是否存在且处于活动状态。

- name: Verify IAM role with S3_INTEGRATION is present
  command: aws cli describe-db-instances --instance-identifier my-db-instance --query DBInstances[0].AssociatedRole[0].FeatureName --output json
  register: verify_iam_role
- name: Fail if S3_INTEGRATION is not present
  fail:
    msg: "S3_INTEGRATION is not available."
  when: "'S3_INTEGRATION' not in verify_iam_role.stdout"

创建 SQL 脚本(使用模板)以导入:

Ansible 任务:

- name: Create SQL script to copy from S3
  template:
    src: copy-from-s3.sql.j2
    dest: /tmp/copy-from-s3.sql

SQL 脚本:

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(p_bucket_name => 'my-s3-bucket', p_s3_prefix => 'db_', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

最后运行SQL脚本:

- name: Run SQL script
  command: "sqlplus dbuser/dbpasswd@my-db-instance-endpoint:1521 @/tmp/copy-from-s3.sql"

这会生成一个带有任务 ID 的日志文件。完成状态在文件中更新。现在db_*.dmp文件可用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Terraform:将AWS托管策略附加到角色的正确方法?

将多个IAM角色与CloudFormation中的AWS :: IAM :: InstanceProfile关联

如何将IAM角色添加到AWS中的现有实例?

在AWS CodeBuild worker上使用IAM角色

如何使用Terraform将多个IAM策略附加到IAM角色?

如何将IAM角色附加到EC2实例,以便它们可以从Terraform中的ECR中提取特定图像

将数据从AWS Athena导入RDS实例

使用IAM角色连接到Amazon RDS Postgresql

使用IAM角色的AWS RDS MySQL连接无法正常工作

AWS:将正确的入站安全组添加到RDS和EC2实例

AWS:将IAM角色关联到IAM用户

附加到实例“无法定位凭据”的IAM角色-无法访问元数据终结点

通过Terraform创建RDS实例后,将Postgresql角色添加到数据库

将AWS RDS MySQL实例更改为Postgres

使用cloudformation附加IAM角色

AWS CloudFormation:无法将安全组附加到ElasticBeanstalk实例

如何使用Terraform将AWS IAM角色分配给服务帐户?

如何使用ServiceAccount创建AWS IAM角色并将其附加到Kubernetes DaemonSet

将IAM角色从EKS中的Pod附加到Serviceaccount

如何将RDS实例附加到Terraform中的安全组

查找Ansible RDS实例

将IAM角色应用于ECS实例

使用 cloudFormation 将角色附加到现有 EC2 实例

使用 Terraform 将现有 IAM 角色添加到 EC2 实例

使用 terraform 和 apex 将单个 IAM 策略附加到两个不同区域(同一账户)中的两个不同角色

使用 AWS CDK 将现有角色附加到 AWS Lambda

如何将多个 IAM 角色附加到 AWS 上的实例配置文件?

我可以在免费试用中将 IAM 角色和安全组附加到 AWS RedShift 吗?

是否可以定义 AWS IAM 权限以仅创建具有特定标签的 RDS 实例?