设为首页 收藏本站
查看: 1028|回复: 0

[经验分享] AWS学习笔记(一)

[复制链接]

尚未签到

发表于 2019-2-22 10:18:12 | 显示全部楼层 |阅读模式
安装AWS CLI
  使用pip安装AWS CLI
1) 安装python

---Check to see if Python is already installed---
$ python --version
---install python---
$ sudo yum install python
  2) 安装pip

---check pip---
$ pip -V
---install pip---
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
  如果已安装过老版本的pip,再次执行以上命令是不会更新的,请执行以下命令:

pip install --upgrade pip
  3) 安装AWS CLI

$ sudo pip install awscli
  4) 测试AWS CLI

$ aws help
  输入q退出

配置AWS CLI
  为了使用AWS CLI必须提供访问凭证且凭证提供者(User或Role)应具有相应的权限。

访问密钥/凭证
  创建访问密钥
1) 打开 IAM 控制台
2) 在导航中选择 Users
3) 选择IAM 用户名称(不是复选框)
4) 选择安全证书选项卡,然后选择创建访问密钥
5) 要查看访问密钥,选择显示,内容如下:

Access Key ID: AKIAIOSFODNN7EXAMPLE
Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  6) 要下载密钥文件,选择下载 .csv 文件,将密钥存储在安全位置
  注意:创建密钥后要保存下来,如未保存只能删除重建,最多可以创建两个密钥,为了安全应定期更换AWS密钥。
  配置CLI

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: cn-north-1
Default output format [None]: json
  这些信息分别保存在~/.aws/credentials,~/.aws/config文件内:
credentials:

[default]
aws_access_key_id = ASIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  config:

[default]
output = json
region = cn-north-1
  若再次运行aws configure命令,不需改动的项直接回车即可。
  另外credentials内还可配置aws_session_token(AWS会话令牌),在使用临时凭证时才需要,后面介绍。
  命名Profile
配置文件中,默认profile名称为default。可以使用aws configure --profile指定新的profile名称,增加其他密钥。
  CLI选项
--profile – profile名称, 默认为"default"
--region – AWS region
--output – 输出格式,支持json、text、table,默认为json
--endpoint-url – 指定endpoint, 可以是Proxy或Endpoint URL。一般不需指定,CLI基于region决定。
  CLI示例
CLI调用时可以指定--region、--output、--profile作为参数,下例以表格的形式显示cn-north-1下的instance:

$ aws ec2 describe-instances --output table --region cn-north-1
  注意: 机器时间一定要与服务器同步,否则会报以下错误:

AWS was not able to validate the provided access credentials
  还可以在环境变量中存储AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 AWS_SESSION_TOKEN。

EC2 IAM角色
  AWS密钥创建与分发管理复杂,存在安全隐患。为EC2授予IAM角色,AWS CLI则可自动获取临时访问权限,不必再分配密钥,避免了复杂的密钥管理。临时凭证会自动更换,在旧凭证过期前至少五分钟提供可用的新凭证。
同样,可以在 IAM 控制台中创建角色,定义角色可用的 API 操作和资源,在EC2控制台中可以附加IAM角色。一个角色可以授予多个实例,但一个实例只能拥有一个角色。
使用控制台创建角色时,控制台自动创建实例配置文件,按相应的角色为文件命名。如使用AWS CLI、API或 AWS开发工具包创建角色,则可以为它们提供不同的名称。
  可通过实例元数据检索安全凭证,比如角色名称为s3access,查询命令如下:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
  输出如下:

{
"Code" : "Success",
"LastUpdated" : "2019-02-12T01:14:53Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
"SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token" : "token",
"Expiration" : "2019-02-12T07:50:47Z"
}
  EC2上运行AWS CLI,不必显式获取临时凭证,CLI会自动从实例元数据获取,但需配置config,设定region、output。要在实例外部使用临时凭证(如进行测试)则必须提供aws_access_key_id、aws_secret_access_key、aws_session_token。

EC2 Metadata

$ curl http://169.254.169.254/latest/meta-data/
  这是查询本机EC2 Metadata的特定方法,可查询如下信息:

ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-keys/
reservation-id
security-groups
  比如,查询instance id:

$ curl http://169.254.169.254/latest/meta-data/instance-id
  查询Instance Identity Document

$ curl http://169.254.169.254/latest/dynamic/instance-identity/document
使用AWS CLI
  查看帮助

$ aws help
$ aws ec2 help
$ aws ec2 describe-instances help
Filter & Query
  --filter 设置过滤条件

$ aws ec2 describe-instances --output table --region cn-north-1 --filter Name=availability-zone,Values=cn-north-1b
  如果Values包含空格要使用引号,filter Name支持的参数请查看帮助。
  多种条件组合语法如下:

$ aws ec2 describe-instances --filters Name=instance-type,Values=m1.small,m1.medium Name=availability-zone,Values=us-west-2c
  从文件加载参数:

$ aws ec2 describe-instances --filters file://filter.json
[  
{  
"Name": "instance-type",  
"Values": ["t2.micro", "m1.medium"]  
},  
{  
"Name": "availability-zone",  
"Values": ["us-west-2c"]  
}  
]  
  根据自定义的tag查找:

aws ec2 describe-instances --filter Name=tag:Name,Values=prod-asd-app1-1a
  --query 自定义输出的内容和样式
显示 Volumes 列表中的第一个卷:

$ aws ec2 describe-volumes --query 'Volumes[0]'
{
"AvailabilityZone": "us-west-2a",
"Attachments": [
{
"AttachTime": "2013-09-17T00:55:03.000Z",
"InstanceId": "i-a071c394",
"VolumeId": "vol-e11a5288",
"State": "attached",
"DeleteOnTermination": true,
"Device": "/dev/sda1"
}
],
"VolumeType": "standard",
"VolumeId": "vol-e11a5288",
"State": "in-use",
"SnapshotId": "snap-f23ec1c8",
"CreateTime": "2013-09-17T00:55:03.000Z",
"Size": 30
}
  循环访问整个列表,并筛选出三个元素:VolumeId、AvailabilityZone 和 Size,并指定别名:

$ aws ec2 describe-volumes --query 'Volumes
  • .{ID:VolumeId,AZ:AvailabilityZone,Size:Size}'
    [
    {
    "AZ": "us-west-2a",
    "ID": "vol-e11a5288",
    "Size": 30
    },
    {
    "AZ": "us-west-2a",
    "ID": "vol-2e410a47",
    "Size": 8
    }
    ]
      使用key1.key2[0].key3 语法来筛选深度嵌套的元素:

    $ aws ec2 describe-volumes --query 'Volumes
  • .{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}'
    [
    {
    "InstanceId": "i-a071c394",
    "AZ": "us-west-2a",
    "ID": "vol-e11a5288",
    "Size": 30
    },
    {
    "InstanceId": "i-4b41a37c",
    "AZ": "us-west-2a",
    "ID": "vol-2e410a47",
    "Size": 8
    }
    ]
      如未指定别名,将按顺序输出:

    $ aws ec2 describe-volumes --query 'Volumes
  • .[VolumeId, Attachments[0].InstanceId, AvailabilityZone, Size]'
    [
    [
    "vol-e11a5288",
    "i-a071c394",
    "us-west-2a",
    30
    ],
    [
    "vol-2e410a47",
    "i-4b41a37c",
    "us-west-2a",
    8
    ]
    ]
      按特定字段的值筛选结果:

    $ aws ec2 describe-volumes --query 'Volumes[?AvailabilityZone==`us-west-2a`]'
      查询所有running的EC2 Instances:

    aws ec2 describe-instances --query 'Reservations
  • .Instances
  • .{State:State.Name,Ip:PrivateIpAddress,InstanceId:InstanceId,Name:Tags[0].Value}' --filter Name=instance-state-name,Values=running
    generate-cli-skeleton和cli-input-json
      大多数 AWS CLI 命令支持参数--generate-cli-skeleton和--cli-input-json,可将参数存储在JSON中,使用时从文件读取。
    当运行命令所需参数较多时,从文件读取参数代替从命令行键入,更为简单。文件中的JSON 数据更容易读取、编辑和共享。
      generate-cli-skeleton

    $ aws ec2 run-instances --generate-cli-skeleton
      输出run instances的参数,如下:

    {
    "DryRun": true,
    "ImageId": "",
    "MinCount": 0,
    "MaxCount": 0,
    "KeyName": "",
    "SecurityGroups": [
    ""
    ],
    "SecurityGroupIds": [
    ""
    ],
    "UserData": "",
    "InstanceType": "",
    "Placement": {
    "AvailabilityZone": "",
    "GroupName": "",
    "Tenancy": "",
    "HostId": "",
    "Affinity": ""
    },
    "KernelId": "",
    "RamdiskId": "",
    "BlockDeviceMappings": [
    {
    "VirtualName": "",
    "DeviceName": "",
    "Ebs": {
    "SnapshotId": "",
    "VolumeSize": 0,
    "DeleteOnTermination": true,
    "VolumeType": "",
    "Iops": 0,
    "Encrypted": true
    },
    "NoDevice": ""
    }
    ],
    "Monitoring": {
    "Enabled": true
    },
    "SubnetId": "",
    "DisableApiTermination": true,
    "InstanceInitiatedShutdownBehavior": "",
    "PrivateIpAddress": "",
    "ClientToken": "",
    "AdditionalInfo": "",
    "NetworkInterfaces": [
    {
    "NetworkInterfaceId": "",
    "DeviceIndex": 0,
    "SubnetId": "",
    "Description": "",
    "PrivateIpAddress": "",
    "Groups": [
    ""
    ],
    "DeleteOnTermination": true,
    "PrivateIpAddresses": [
    {
    "PrivateIpAddress": "",
    "Primary": true
    }
    ],
    "SecondaryPrivateIpAddressCount": 0,
    "AssociatePublicIpAddress": true
    }
    ],
    "IamInstanceProfile": {
    "Arn": "",
    "Name": ""
    },
    "EbsOptimized": true
    }
      将skeleton保存到文件:

    $ aws ec2 run-instances --generate-cli-skeleton > ec2runinst.json
      使用时删除不必要的参数并设置合适的参数值。

    {  
    "DryRun": true,  
    "ImageId": "ami-dfc39aef",  
    "KeyName": "mykey",  
    "SecurityGroupIds": [  
    "sg-aa737dcf"  
    ],  
    "InstanceType": "t2.micro",  
    "SubnetId": "subnet-ab9035dc"  
    }
      将 DryRun 参数设置为 true 可使用 EC2 的空运行功能,可利用此功能在不创建资源的情况下测试配置。
      cli-input-json

    $ aws ec2 run-instances --cli-input-json file://ec2runinst.json
    A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.  
      空运行错误表明,JSON 格式正确且参数值有效。
    将 DryRun 参数设置为 false,再次运行run-instances命令可启动实例。


    参考文档
      Amazon Web Services
    AWS文档
    AWS CLI 文档
    AWS CLI 用户指南
    AWS CLI Command Reference




  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675666-1-1.html 上篇帖子: AWS通过CLI修改路由表中路由条目 下篇帖子: AWS学习笔记(二)
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表