Chạy lệnh aws cli trong tập lệnh python

Sau khi cài đặt Python, hãy cài đặt các gói sau bằng cách thực hiện lệnh sau trong dòng lệnh hoặc thiết bị đầu cuối của bạn

pip install boto3 pandas jupyter

1. 2 Cài đặt AWS CLI

AWS CLI không được sử dụng trực tiếp cho phòng thí nghiệm này, tuy nhiên, nó giúp cấu hình thông tin xác thực AWS IAM dễ dàng hơn và hữu ích cho thử nghiệm cũng như sử dụng chung

  1. Trong dòng lệnh hoặc thiết bị đầu cuối của bạn, hãy chạy aws configure để định cấu hình thông tin đăng nhập của bạn. Lưu ý rằng người dùng sẽ yêu cầu quyền truy cập vào dịch vụ IAM

Phương pháp hay nhất là bắt buộc sử dụng MFA, vì vậy nếu bạn đặt nhầm mật khẩu Bảng điều khiển quản lý AWS và/hoặc khóa truy cập/mã bí mật, thì không ai có thể làm gì nếu không có thông tin xác thực MFA của bạn. Bạn có thể làm theo hướng dẫn tại đây để định cấu hình AWS CLI đảm nhận vai trò với MFA được thực thi

Trong một vài năm, tôi đang làm việc với CLI của riêng mình cho AWS. Code khá lộn xộn. Gần đây, tôi quyết định bắt đầu lại từ đầu. Cung cấp cho bạn quyền truy cập vào các lệnh được đánh giá cao của tôi và (trong) các giá trị mặc định lành mạnh, không có ý nghĩa gì. Cho bạn biết cách xây dựng CLI của riêng mình bằng một số mẹo & thủ thuật, có thể hữu ích. Ở cuối bài đăng trên blog này, bạn có thể làm những việc như

Tạo đối tượng S3

$ aws s3a make —-content-type 'text/html' s3://mybucket/myfile.html "Hello World"

Xem nhanh nội dung trong tệp S3

$ aws s3a cat s3://mybucket/myfile.txt
Hello World

Sử dụng các lệnh mặc định có sẵn trong

$ aws s3a ls
Bucket1
Bucket2
Bucket3
7

$ aws s3a ls
Bucket1
Bucket2
Bucket3

Tạo bí danh cho

$ aws s3a ls
Bucket1
Bucket2
Bucket3
8 và tạo lối tắt để liệt kê các ngăn xếp đang hoạt động

$ aws cfn list 
Stack1
Stack2
Stack3

Và tất nhiên ở đây các giá trị mặc định vẫn hoạt động

$ aws cfn list-stacks
{
  ...
}

Dịch vụ

Giới thiệu về các công cụ chúng tôi đang sử dụng

  • Giao diện dòng lệnh. AWS CLI giúp bạn tự động hóa cơ sở hạ tầng dễ dàng hơn. Thường thì đó là sự kết hợp của các lệnh CloudFormation và CLI. Trong khi phát triển, các lệnh này có thể tiêu tốn rất nhiều thời gian
  • Sự hình thành mây. Đây là dịch vụ mà AWS cung cấp để biến tệp văn bản có định dạng json hoặc yaml thành ngăn xếp đã triển khai
  • S3. Dịch vụ AWS cung cấp để lưu trữ đối tượng. Đôi khi bạn muốn xem nhanh nội dung của một tập tin, hoặc có thể ghi gì đó vào một tập tin. AWS CLI không cung cấp tính năng này theo mặc định

Giới thiệu

Bài đăng trên blog này được chia thành 3 bước

  1. Giới thiệu về
    $ aws s3a ls
    Bucket1
    Bucket2
    Bucket3
    
    9 Bí danh CLI và phím tắt
  2. Tạo CLI của riêng bạn bằng Python, Nhấp và cài đặt nó bằng pip
  3. Tạo các giá trị mặc định lành mạnh, nhiều phím tắt hơn và chuyển tiếp các lệnh
    $ aws s3a ls
    Bucket1
    Bucket2
    Bucket3
    
    9 sang CLI mới của chúng tôi

điều kiện tiên quyết

  • Tài khoản AWS
  • Đã cài đặt awscliv1 hoặc awscliv2
  • Đã cài đặt Python 3. 8 (trên mac
    $ aws cfn list 
    Stack1
    Stack2
    Stack3
    
    1 rất được khuyến khích)
  • Một phiên hoạt động trong thiết bị đầu cuối (
    $ aws cfn list 
    Stack1
    Stack2
    Stack3
    
    2 sẽ hoạt động)
  • Kiến thức cơ bản về Python, nhanh chóng khám phá boto3 và nhấp vào tài liệu

Bước 1. Bí danh AWS CLI

Tôi thêm nội dung sau vào ~/. aws/cli/bí danh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[toplevel]
whoami = sts get-caller-identity

myip =
  !f() {
    dig +short myip.opendns.com @resolver1.opendns.com
  }; f

cfn = 
  !f() {
    mycli cfn $@
  }; f

Tôi mở một thiết bị đầu cuối mới và thử các phím tắt của mình

$ aws whoami
{
  "UserId": "AHJHEFSEFSDLKVJERWEFDS:session",
  "Account": "111111222222",
  "Arn": "arn:aws:sts::111111222222:assumed-role/admin/session"
}

$ aws myip
82.53.64.3

$ aws cfn list-stacks
{
  ...
}

Bước 2. Tạo CLI của riêng tôi

Tôi bắt đầu với cấu trúc mã này. Trong tương lai mệnh lệnh của tôi sẽ là

$ aws cfn list 
Stack1
Stack2
Stack3
3. Việc bạn sử dụng cái gì không thực sự quan trọng, miễn là nó không được sử dụng bởi các công cụ khác. Ở bước 3, chúng ta sẽ thay thế
$ aws cfn list 
Stack1
Stack2
Stack3
3 cho
$ aws s3a ls
Bucket1
Bucket2
Bucket3
9

Các tệp

$ aws cfn list 
Stack1
Stack2
Stack3
6 trống, nhưng có thể nhập chính xác tất cả các mô-đun

├── README.md
├── mycli
│   ├── __init__.py
│   ├── commands
│   │   ├── __init__.py
│   │   └── s3.py
│   ├── helper.py
│   └── main.py
└── setup.py

cài đặt. py

Tôi tạo một thiết lập tối thiểu. py. Nếu bạn định xuất bản cli của mình, bạn nên điền vào tất cả các chi tiết. Cũng thêm tất cả các phụ thuộc. MyCLI sẽ sử dụng boto3, cfn linters, trình phân tích cú pháp cấu hình, v.v. Mở rộng danh sách này với tất cả các công cụ bạn có thể thêm vào cli của mình

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ aws s3a cat s3://mybucket/myfile.txt
Hello World
0

mycli/chính. py

Ở đây chúng tôi hợp nhất tất cả các lệnh phụ vào cli chính. Nếu bạn muốn thêm một thư viện lệnh khác. Thay thế "lệnh" cho mô tả ngắn thực tế mà bạn muốn sử dụng. Ví dụ. cfn, iam, sts hoặc ecs

  1. Tạo mycli/lệnh/lệnh. py bằng cách sao chép một trong các lệnh hiện có (mycli/commands/s3. py)
  2. Thêm một dòng ở cuối phần nhập trên đầu phần chính. tập tin py.
    $ aws cfn list 
    Stack1
    Stack2
    Stack3
    
    7
  3. Thêm
    $ aws cfn list 
    Stack1
    Stack2
    Stack3
    
    8 sau lệnh được thêm cuối cùng
  4. Cập nhật mycli/lệnh/lệnh. py để tránh va chạm

$ aws s3a cat s3://mybucket/myfile.txt
Hello World
1
$ aws s3a cat s3://mybucket/myfile.txt
Hello World
2

Nhân tiện, có lẽ có một cách để lặp qua tất cả các mô-đun và nhập chúng. Đối với tôi, đó không phải là vấn đề lớn và nó không vi phạm bất kỳ tiêu chuẩn kiểu mã nào. Trong ví dụ, đó chỉ là một lần nhập, trong cli riêng của tôi, tất nhiên là có nhiều hơn

mycli/người trợ giúp. py

trong người trợ giúp. py, tôi sẽ thu thập tất cả các chức năng được sử dụng nhiều lần trong ứng dụng của mình. Rất nhiều thứ được trình bày dưới dạng từ điển và với

$ aws cfn list 
Stack1
Stack2
Stack3
9 tôi có thể dễ dàng chuyển đổi nó thành json

$ aws s3a cat s3://mybucket/myfile.txt
Hello World
3_______2_______4

mycli/lệnh/s3. py

Tôi sẽ cho bạn s3 làm ví dụ. AWS đã tạo một vài phím tắt để làm việc với S3. Các tính năng mà nó thiếu và tôi muốn sử dụng khá thường xuyên

  • $ aws cfn list-stacks
    {
      ...
    }
    
    0. Nó hiển thị nội dung của một tập tin. Đừng làm điều này với các tệp lớn
  • $ aws cfn list-stacks
    {
      ...
    }
    
    1. Nó tạo một đối tượng S3 với một số nội dung trong đó

$ aws s3a cat s3://mybucket/myfile.txt
Hello World
5_______2_______6

Cài đặt

Xác định vị trí thiết lập. py và trong thư mục đó thực hiện lệnh sau. Bằng cách này, bạn có thể dễ dàng thực hiện các thay đổi đối với awscli của mình, những thay đổi này có sẵn ngay lập tức. Quá trình cài đặt đã tạo các liên kết tượng trưng đến thư mục dự án của bạn. Vì vậy, sau khi di chuyển thư mục, có thể cài đặt lại

$ aws s3a cat s3://mybucket/myfile.txt
Hello World
7

Bây giờ nó đã được cài đặt, tôi có thể thấy một số tệp trợ giúp

$ aws s3a cat s3://mybucket/myfile.txt
Hello World
8

$ aws s3a cat s3://mybucket/myfile.txt
Hello World
9

$ aws s3a ls
Bucket1
Bucket2
Bucket3
0

Bước 3. Thêm mycli vào aws cli và hơn thế nữa

Bây giờ tôi muốn để cli hoàn toàn mới của mình hoạt động với aws cli. Tôi cũng có thể sử dụng bí danh ở đây. Mình đã có phím tắt cho cfn (cloudformation), giờ mình sẽ tạo luôn cho s3. s3a. Chỉ vì thứ gì đó ngắn hơn “s3” sẽ không thực tế. Và s3a có ý nghĩa, đại diện cho bí danh. Bây giờ

$ aws s3a ls
Bucket1
Bucket2
Bucket3
7 vẫn hoạt động,
$ aws cfn list-stacks
{
  ...
}
3 cũng vậy và
$ aws cfn list-stacks
{
  ...
}
4 là bí danh của
$ aws s3a ls
Bucket1
Bucket2
Bucket3
7 và mycli

$ aws s3a ls
Bucket1
Bucket2
Bucket3
1____3_______2

Bây giờ tôi có sẵn cả mycli gốc và bí danh

$ aws cfn list-stacks
{
  ...
}
4. Nó gửi các lệnh tới
$ aws cfn list 
Stack1
Stack2
Stack3
3 hoặc tới
$ aws s3a ls
Bucket1
Bucket2
Bucket3
7

$ aws s3a ls
Bucket1
Bucket2
Bucket3
3

Tôi cũng sẽ thêm các phím tắt và giá trị mặc định lành mạnh này cho CloudFormation. Tôi cũng đã tạo cli của riêng mình cho định dạng đám mây, nhưng nó đang hoạt động, vì vậy không được chia sẻ

$ aws s3a ls
Bucket1
Bucket2
Bucket3
4_______3_______5

$ aws s3a ls
Bucket1
Bucket2
Bucket3
6

Phần kết luận

Chúng tôi đã học cách mở rộng aws cli bằng một số phím tắt, mặc định lành mạnh và mycli của riêng chúng tôi dựa trên Python và Nhấp chuột

Tôi đang làm việc trên một lệnh

$ aws cfn list-stacks
{
  ...
}
9 trong python. Lệnh này xác thực lỗi mẫu (cfn-lint), kích hoạt triển khai bằng bộ thay đổi (có xác nhận) và hiển thị tất cả các sự kiện trong khi ngăn xếp được tạo hoặc cập nhật. Các tham số như thẻ và tham số ngăn xếp là giá trị chính trong các đối tượng json

Tôi cũng có một lệnh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
0, lệnh này tìm hồ sơ được chỉ định, yêu cầu mã thông báo MFA của tôi, đảm nhận một vai trò và viết thông tin đăng nhập tạm thời vào
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
1 hoặc hồ sơ mặc định đã chỉ định. Cấu hình này có thể dễ dàng được các ứng dụng khác sử dụng mà không cần lưu trữ thông tin đăng nhập tạm thời ở các vị trí tùy ý hoặc chuyển dưới dạng biến môi trường. Nó cũng hoạt động tốt với docker container

-Martijn

Tôi vừa phát hiện ra một số hành vi lạ khi bạn đang cố gắng sử dụng một lệnh để đăng nhập. Ý tưởng của tôi là xây dựng một cái gì đó như thế này.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
2. Nó tìm thấy thông tin vai trò trong

Làm cách nào để thực thi AWS CLI bằng Python?

Tất cả những gì bạn phải làm là cài đặt thư viện Boto3 bằng Python cùng với công cụ AWS CLI bằng 'pip'. Một Boto3 được cài đặt, nó sẽ cung cấp quyền truy cập trực tiếp vào các dịch vụ AWS như EC2. Để giúp bạn bắt đầu với Boto3, tôi đã đưa ra một ví dụ bên dưới cho biết cách tạo một cặp khóa và khởi chạy một phiên bản bằng cách sử dụng tập lệnh Python

Tôi có thể chạy các lệnh AWS CLI trong Lambda không?

Nói chung, khi bạn muốn sử dụng AWS CLI trong Lambda, tốt nhất bạn nên gọi trực tiếp các API AWS bằng cách sử dụng SDK thích hợp từ mã chức năng của bạn. But there's one specific use case that is easier to do with the AWS CLI than API: aws s3 sync . This post will show how to enable AWS CLI in the Lambda execution environment.

Làm cách nào để cài đặt AWS CLI trong Python?

Để cài đặt AWS CLI phiên bản 1, hãy sử dụng lệnh pip3 (nếu bạn sử dụng Python phiên bản 3 trở lên) hoặc lệnh pip . Xác minh rằng AWS CLI phiên bản 1 đã được cài đặt đúng cách. Nếu không có phản hồi, hãy xem phần Thêm tệp thực thi AWS CLI phiên bản 1 vào đường dẫn dòng lệnh của bạn.

AWS CLI có cần Python không?

Yêu cầu phiên bản Python . Để sử dụng Tài liệu dịch vụ web của Amazon, Javascript phải được bật