또 다른 IaC 도구 ...

21607 단어 typescriptiacpulumiaws

코드로서의 최신 인프라.



친숙한 프로그래밍 언어 및 도구를 사용하여 모든 클라우드에서 인프라 생성, 배포 및 관리

이 예에서는 Pulumi Crosswalk for AWS를 사용하여 액세스 권한이 있는 주제, 대기열 및 사용자를 쉽게 생성합니다. Pulumi Crosswalk for AWS는 잘 설계된 자동 모범 사례를 사용하여 AWS에서 일반적인 코드형 인프라 작업을 보다 쉽고 안전하게 만드는 라이브러리 모음입니다.



설치 스크립트를 실행하여 Linux에 Pulumi를 설치합니다.




curl -fsSL https://get.pulumi.com | sh


Node.js를 설치합니다.




sudo snap install node --classic


"pulumi_my" 프로젝트 생성:




mkdir pulumi_my && cd pulumi_my && pulumi new aws-typescript --emoji --generate-only



nano -c index.ts



import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";

// Create an AWS resource (IAM)
const mypolicy = new aws.iam.Policy("my_policy", {
  name: "my_policy",
  policy: JSON.stringify({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "sns:*",
        "Effect": "Allow",
        "Resource": "arn:aws:sns:my-region:my-account:my_topic"
      },
      {
        "Action": "sqs:*",
        "Effect": "Allow",
        "Resource": "arn:aws:sqs:my-region:my-account:my_queue"
      },
      {
        "Action": "sqs:*",
        "Effect": "Allow",
        "Resource": "arn:aws:sqs:my-region:my-account:my_queue_dlq"
      }
    ]
  })
});

const myuser = new aws.iam.User("my_user", {
  name: "my_user",
});

const policyAttachment = new aws.iam.PolicyAttachment("my_policy_attachment", {
  name: "my_policy_attachment",
  users: [myuser],
  policyArn: mypolicy.arn
});

// Create an AWS resource (SNS)
const myTopic = new aws.sns.Topic("my_topic", {
  name: "my_topic",
  deliveryPolicy: `{
  "http": {
    "defaultHealthyRetryPolicy": {
      "numRetries": 3,
      "numNoDelayRetries": 0,
      "minDelayTarget": 20,
      "maxDelayTarget": 20,
      "numMinDelayRetries": 0,
      "numMaxDelayRetries": 0,
      "backoffFunction": "linear"
    },
    "disableSubscriptionOverrides": false
  }
}
`,
  kmsMasterKeyId: "alias/aws/sns",
  tags: {
    Environment: "myproduction",
  },
});

// Create an AWS resource (SQS)
const myQueueDlq = new aws.sqs.Queue("my_queue_dlq", {
  name: "my_queue_dlq",
  delaySeconds: 90,
  maxMessageSize: 2048,
  messageRetentionSeconds: 86400,
  receiveWaitTimeSeconds: 10,
  policy: JSON.stringify({
    "Version": "2012-10-17",
    "Id": "arn:aws:sqs:my-region:my-account:my_queue_dlq/SQSDefaultPolicy",
    "Statement": [
      {
        "Sid": "__owner_statement",
        "Action": "sqs:*",
        "Effect": "Allow",
        "Resource": "arn:aws:sqs:my-region:my-account:my_queue_dlq",
        "Principal": {
          "AWS": [
            "arn:aws:iam::my-account:user/my_user"
          ]
        }
      }
    ]
  }),
  tags: {
    Environment: "myproduction",
  },
}, { dependsOn: [myuser, mypolicy, policyAttachment] });

const myQueue = new aws.sqs.Queue("my_queue", {
  name: "my_queue",
  delaySeconds: 90,
  maxMessageSize: 2048,
  messageRetentionSeconds: 86400,
  receiveWaitTimeSeconds: 10,
  policy: JSON.stringify({
    "Version": "2012-10-17",
    "Id": "arn:aws:sqs:my-region:my-account:my_queue/SQSDefaultPolicy",
    "Statement": [
      {
        "Sid": "__owner_statement",
        "Action": "sqs:*",
        "Effect": "Allow",
        "Resource": "arn:aws:sqs:my-region:my-account:my_queue",
        "Principal": {
          "AWS": [
            "arn:aws:iam::my-account:user/my_user"
          ]
        }
      }
    ]
  }),
  //redrivePolicy: "{\"deadLetterTargetArn\":\"arn:aws:sqs:my-region:my-account:my_queue_dlq\",\"maxReceiveCount\":\"4\"}",
  tags: {
    Environment: "myproduction",
  },
}, { dependsOn: [myuser, mypolicy, policyAttachment, myQueueDlq] });


export const iamUserName = myuser.id;
export const iamAccesskeyID = myAccessKey.id;
export const iamAccesskeySecret = myAccessKey.sesSmtpPasswordV4;
export const arnPolicy = mypolicy.id;
export const arnTopic = myTopic.id;
export const urlQueueDlq = myQueueDlq.id;
export const urlQueue = myQueue.id;


"my-region" 및 "my-account" 변경



"my-region"을 원하는 지역으로 바꿉니다. 예를 들어 "us-east-2"(일명 "Ohio")를 사용하려는 경우 다음과 같이 표시됩니다.




sed -i "s/"my-region"/"us-east-2"/g" index.ts


예를 들어 "5555-5555-5555"인 경우 "my-account"를 "-"가 없는 AWS 계정 ID로 바꾸면 아래와 같습니다.




sed -i "s/"my-account"/"555555555555"/g" index.ts


초기 배포를 수행하고 다음 명령을 실행합니다.




npm install



pulumi stack init


"pulumi_my" 프로젝트 검토




pulumi preview


AWS_PROFILE 설정:




pulumi config set aws:profile my-profile


AWS_REGION 설정:




pulumi config set aws:region us-east-2


스택 배포




pulumi up


"pulumi_my" 프로젝트 파괴




pulumi destroy


스택에서 "pulumi_my" 프로젝트 제거




pulumi stack rm dev


원천:



https://www.pulumi.com/docs/get-started/

https://www.pulumi.com/docs/guides/crosswalk/aws/

https://www.pulumi.com/docs/reference/pkg/

https://www.pulumi.com/docs/intro/concepts/state/

좋은 웹페이지 즐겨찾기