스택스 리눅스 AWS OpsWorks 인스턴스에서 Ruby용 SDK 사용하기 - AWS OpsWorks

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

스택스 리눅스 AWS OpsWorks 인스턴스에서 Ruby용 SDK 사용하기

중요

이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 고객과 기존 고객 모두 사용할 수 없습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 AWS re:Post 또는 Premium AWS Support를 통해 AWS Support 팀에 문의하세요.

이 주제에서는 Stacks Linux 인스턴스의 Ruby용 SDK를 사용하여 Amazon S3 AWS OpsWorks 버킷에서 파일을 다운로드하는 방법을 설명합니다. AWS OpsWorks 스택은 모든 리눅스 인스턴스에 Ruby용 SDK를 자동으로 설치합니다. 하지만 서비스의 클라이언트 객체를 생성할 때는 적절한 AWS 자격 증명 AWS::S3.new(또는 다른 서비스의 동등한 값)를 제공해야 합니다.

Amazon S3 버킷에 전달한 콘텐츠에는 고객 콘텐츠가 포함될 수 있습니다. 중요 데이터 제거에 관한 자세한 내용은 S3 버킷을 비우려면 어떻게 해야 합니까? 단원 또는 S3 버킷을 삭제하려면 어떻게 해야 합니까? 단원을 참조하세요.

Vagrant 인스턴스에서 SDK for Ruby 사용 섹션은 노드 객체에 자격 증명을 저장하고 레시피 코드에서 속성 단원을 참조하는 식으로 자격 증명 노출 위험을 완화하는 방법을 보여줍니다. Amazon EC2 인스턴스에서 레시피를 실행하는 경우 IAM 역할이라는 훨씬 더 좋은 옵션을 사용할 수 있습니다.

IAM 역할은 IAM 사용자와 거의 비슷하게 작동합니다. 여기에는 다양한 AWS 서비스를 사용할 수 있는 권한을 부여하는 정책이 연결됩니다. 하지만 역할은 개인이 아니라 Amazon EC2 인스턴스에 할당합니다. 그러면 이 인스턴스에서 실행되는 애플리케이션은 연결된 정책이 부여하는 권한을 획득할 수 있습니다. 역할을 사용하면 자격 증명이 간접적으로라도 코드에 표시되지 않습니다. 이 주제에서는 IAM 역할을 사용하여 Amazon EC2 인스턴스에서 Vagrant 인스턴스에서 SDK for Ruby 사용의 레시피를 실행하는 방법을 설명합니다.

예제 9: Amazon EC2 인스턴스 사용 색션에 설명된 대로 kitchen-ec2 드라이버를 사용하여 이 레시피를 Test Kitchen과 함께 실행할 수 있습니다. 하지만 Amazon EC2 인스턴스에 Ruby용 SDK를 설치하는 작업은 다소 복잡하므로 Stacks와 관련하여 걱정할 필요가 없습니다. AWS OpsWorks 모든 AWS OpsWorks Stacks Linux 인스턴스에는 기본적으로 Ruby용 SDK가 설치되어 있습니다. 따라서 이 예제에서는 단순화를 위해 Stacks 인스턴스를 사용합니다. AWS OpsWorks

첫 번째 단계는 IAM 역할을 설정하는 것입니다. 이 예제는 가장 간단한 접근 방식을 취하는데, 첫 번째 스택을 생성할 때 AWS OpsWorks Stacks가 생성하는 Amazon EC2 역할을 사용하는 것입니다. 이 역할은 aws-opsworks-ec2-role로 명명됩니다. 하지만 AWS OpsWorks Stacks는 해당 역할에 정책을 연결하지 않으므로 기본적으로 권한을 부여하지 않습니다.

적절한 권한을 부여하려면 AmazonS3ReadOnlyAccess 정책을 aws-opsworks-ec2-role 역할에 연결해야 합니다. 정책을 역할에 연결하는 방법에 대한 자세한 내용은 IAM 사용 설명서IAM 자격 증명 권한 추가(콘솔)를 참조하세요.

스택을 생성하거나 업데이트할 때 역할을 지정합니다. Linux 인스턴스에서 레시피 실행 섹션에 설명된 대로 사용자 지정 계층을 포함하는 스택을 설정하되 한 가지를 추가합니다. Add Stack 페이지에서 기본 IAM 인스턴스 프로필이 2-role로 aws-opsworks-ec 설정되어 있는지 확인합니다. AWS OpsWorks 그러면 스택이 해당 역할을 스택의 모든 인스턴스에 할당합니다.

쿡북을 설정하는 절차는 Linux 인스턴스에서 레시피 실행 섹션에서 사용한 것과 비슷합니다. 다음은 간략한 요약이며, 자세한 정보는 해당 예제를 참조해야 합니다.

쿡북을 설정하려면
  1. s3bucket_ops 하위 디렉터리를 만들고 그 디렉터리로 이동합니다.

  2. 다음 내용이 포함된 metadata.rb 파일을 만들어 s3bucket_ops에 저장합니다.

    name "s3bucket_ops" version "0.1.0"
  3. recipes 안에 s3bucket_ops 디렉터리를 만듭니다.

  4. 다음 레시피가 포함된 default.rb 파일을 만들어 recipes 디렉터리에 저장합니다.

    Chef::Log.info("******Downloading a file from Amazon S3.******") ruby_block "download-object" do block do require 'aws-sdk' s3 = AWS::S3.new myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt'] Dir.chdir("/tmp") File.open("myfile.txt", "w") do |f| f.syswrite(myfile.read) f.close end end action :run end
  5. s3bucket_ops.zip 아카이브를 만들고 그 아카이브를 Amazon S3 버킷에 업로드합니다. 간단한 설명을 위해 아카이브를 퍼블릭으로 설정한 다음 나중에 사용하기 위해 아카이브의 URL을 적어 둡니다. 프라이빗 Amazon S3 아카이브 또는 기타 여러 가지 리포지토리 유형에 쿡북을 저장할 수도 있습니다. 자세한 내용은 쿡북 리포지토리 섹션을 참조하세요.

이 레시피는 다음을 제외하면 이전 예제에서 사용된 것과 비슷합니다.

  • AWS OpsWorks Stacks가 이미 Ruby용 SDK를 설치했기 때문에 리소스가 삭제되었습니다chef_gem.

  • 레시피가 AWS::S3.new로 자격 증명을 전달하지 않습니다.

    자격 증명이 인스턴스의 역할에 따라 자동으로 애플리케이션에 할당됩니다.

  • 레시피는 Chef::Log.info를 사용하여 Chef 로그에 메시지를 추가합니다.

다음과 같이 이 예제를 위한 스택을 생성합니다. 기존의 Windows 스택을 사용할 수 있습니다. 나중에 설명하듯이 쿡북을 업데이트하면 됩니다.

스택 생성
  1. AWS OpsWorks Stacks 콘솔을 열고 스택 추가를 클릭합니다.

  2. 다음 설정을 지정하고, 그 외 설정에 대해서는 기본값을 수락한 다음 [스택 추가]를 클릭합니다.

    • 이름 – RubySDK

    • 기본 SSH 키 – Amazon EC2 키 페어

    Amazon EC2 키 페어를 생성해야 하는 경우 Amazon EC2 키 페어를 참조하세요. 키 페어는 인스턴스와 동일한 AWS 리전에 속해야 합니다. 이 예에서는 기본 미국 서부(오레곤) 리전을 사용합니다.

  3. [계층 추가]를 클릭하여 스택에 다음 설정으로 사용자 지정 계층을 추가합니다.

    • 이름 – S3Download

    • 짧은 이름 - s3download

    모든 계층 유형이 실제로 Linux 스택에서 작동하지만 이 예제에서는 다른 계층 유형에서 설치한 패키지가 필요하지 않기 때문에 사용자 지정 계층을 사용하는 것이 가장 간단합니다.

  4. 기본 설정을 사용하여 계층에 24/7 인스턴스를 추가하고 해당 인스턴스를 시작합니다.

이제 레시피를 설치하고 실행할 수 있습니다.

레시피를 실행하려면
  1. 스택을 편집해 사용자 지정 쿡북을 활성화하고 다음 설정을 지정합니다.

    • 리포지토리 유형Http Archive

    • 리포지토리 URL - 앞에서 기록해 둔 쿡북 아카이브 URL

    기타 설정에 기본값을 사용하고 [저장]을 클릭하여 스택 구성을 업데이트합니다.

  2. 사용자 지정 쿡북 업데이트 스택 명령을 실행하여 스택의 인스턴스에 사용자 지정 쿡북의 최신 버전을 설치합니다. 쿡북의 이전 버전이 있으면 이 명령이 이전 버전을 덮어 씁니다.

  3. 실행할 레시피s3bucket_ops::default으로 설정된 상태에서 레시피 실행 스택 명령을 실행하여 레시피를 실행합니다. 이 명령은 s3bucket_ops::default로 구성된 실행 목록을 사용하여 Chef 실행을 시작합니다.

    참고

    일반적으로 AWS OpsWorks Stacks에서 레시피를 적절한 라이프사이클 이벤트에 할당하여 레시피를 자동으로 실행하도록 합니다. 수동으로 이벤트를 트리거하여 그러한 레시피를 실행할 수 있습니다. 스택 명령을 사용하여 설정 및 Configure 이벤트를 트리거할 수 있고, 배포 명령을 사용하여 Deploy 및 Undeploy 이벤트를 트리거할 수 있습니다.

레시피가 성공적으로 실행되면 이를 확인할 수 있습니다.

s3bucket_ops를 확인하려면
  1. 가장 먼저 Chef 로그를 확인합니다. 스택에는 opstest1이라는 인스턴스가 하나 있어야 합니다. 인스턴스 페이지에서 인스턴스의 로그 열에 있는 표시를 클릭하여 Chef 로그를 표시합니다. 아래로 스크롤하면 맨 아래 근처에 로그 메시지가 보입니다.

    ... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Downloading a file from Amazon S3.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
  2. SSH를 사용하여 인스턴스에 로그인하고 /tmp의 내용을 표시합니다.