小编hel*_*loV的帖子

尝试使用ffmpeg时,AWS Lambda权限被拒绝

我想编写一个响应S3 put事件的处理程序来转换任何上传到mp4的avi文件.我在Java中使用AWS工具包插件在Eclipse中完成它.对于视频转换,我使用ffmpeg和ffmpeg-cli-wrapper,我在源代码树中提供了ffmpeg的静态(linux)二进制文件.

我发现当我上传函数时,二进制文件被放入/var/task,但是当我尝试使用我编写的测试函数时,我得到了"权限被拒绝"错误.

import net.bramp.ffmpeg.FFmpeg;

public class LambdaFunctionHandler implements RequestHandler<S3Event, String> {

    private static final String FFMPEG = "/var/task/ffmpeg";

    public String handleRequest(S3Event event, Context context) {

        try {
            FFmpeg ff = new FFmpeg(FFMPEG);
            System.out.println(ff.version());
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "foo";
    }
}
Run Code Online (Sandbox Code Playgroud)

并且堆栈跟踪的第一行:java.io.IOException: Cannot run program "/var/task/ffmpeg": error=13, Permission denied.

我该如何执行这个二进制文件?我已经完成了其他人的建议和chmod 755上传之前的二进制文件,但它没有什么区别.

linux amazon-ec2 amazon-web-services aws-lambda

7
推荐指数
1
解决办法
6885
查看次数

如何(正确)在AWS Lambda函数中使用外部凭据?

我有一个(非常基本但完美的)AWS lambda函数,用Python编写,但是有嵌入的凭据连接到:1)外部Web服务2)DynamoDB表.

该函数的作用非常基本:它针对服务POST(登录凭证#1),然后将部分响应状态保存到DynamoDB表中(使用AWS凭证#2).

这些是该功能的相关部分:

h = httplib2.Http()
auth = base64.encodestring('myuser' + ':' + 'mysecretpassword')
(response, content) = h.request('https://vca.vmware.com/api/iam/login', 'POST', headers = {'Authorization':'Basic ' + auth,'Accept':'application/xml;version=5.7'})
Run Code Online (Sandbox Code Playgroud)

然后

conn = boto.connect_dynamodb(aws_access_key_id='FAKEhhahahah',aws_secret_access_key='FAKEdhdhdudjjdjdjhdjjhdjdjjd')
Run Code Online (Sandbox Code Playgroud)

如何通过在函数内部不使用这些凭据来清理代码?

仅供参考此功能计划每5分钟运行一次(没有其他外部事件触发它).

python boto amazon-web-services amazon-iam aws-lambda

7
推荐指数
1
解决办法
1867
查看次数

如何使用CloudFormation将卷附加和装载到EC2实例

我找不到使用cloudformation附加和装载卷的方法.

我可以使用VolumeAttachment附加卷; 但是,当我lsblk在EC2实例处于运行状态后执行操作时,我将此附加实例视为已卸载.

有没有办法从Cloudformation文件挂载此实例?我可以使用linux命令安装它,但是更好地处理来自cloudformation的所有内容.

这是我到目前为止:

"MyEc2Instance" : {
   "Type" : "AWS::EC2::Instance",
   "Properties" : {
      "KeyName" : { "Ref" : "KeyName" }
   }
},
    "MyVolume" : {
      "Type" : "AWS::EC2::Volume",
      "Properties" : {
        "Size" : "50",
        "AvailabilityZone" : "xyz"
      }
    },
    "attachment" : {
      "Type" : "AWS::EC2::VolumeAttachment",
      "Properties" : {
        "InstanceId" : { "Ref" : "MyEc2Instance" },
        "VolumeId"  : { "Ref" : "MyVolume" },
        "Device" : "/dev/sdh"
      }
    }
Run Code Online (Sandbox Code Playgroud)

当我lsblk在实例上做的时候,这是我看到的结果:

xvda    202:0    0   8G  0 disk
??xvda1 …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-web-services aws-cloudformation

7
推荐指数
1
解决办法
6889
查看次数

如何检查 S3 存储桶是否有标签

我试图检查现有的 s3 存储桶是否有标签,如果存储桶没有标签,将添加标签,我尝试了下面的代码

for region in region_list:
    s3 = boto3.resource('s3', region)
    s3_client = boto3.client('s3', region)
        for bucket in s3.buckets.all():
            s3_bucket = bucket
            s3_bucket_name = s3_bucket.name
            response = s3_client.get_bucket_tagging(Bucket=s3_bucket_name)
            tagset = response['TagSet']
                if len(response['TagSet'])==0:
                    print "s3 bucket not have tags, adding tags"
                else:
                    pass
Run Code Online (Sandbox Code Playgroud)

但低于错误

Traceback (most recent call last):
File "C:\Python27\ec2info.py", line 235, in <module>
response = s3_client.get_bucket_tagging(Bucket=s3_bucket_name)
File "C:\Python27\lib\site-packages\botocore\client.py", line 314, in 
_api_call
return self._make_api_call(operation_name, kwargs)
File "C:\Python27\lib\site-packages\botocore\client.py", line 612, in 
_make_api_call
raise error_class(parsed_response, operation_name)
ClientError: An error occurred …
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3

7
推荐指数
1
解决办法
5614
查看次数

通过 aws CLI 删除默认 VPC

启动新账户时,Amazon 会创建一个新的默认 VPC,其中包含 3 个子网、1 个安全组、1 个 ACL 和 1 个互联网网关。我想删除默认的 vpc 和与之关联的对象。我可以通过控制台来做到这一点,但我想通过 aws cli 来实现这一点,但我被卡住了。

当我尝试以下命令时:

aws ec2 delete-vpc --vpc-id $VpcId
Run Code Online (Sandbox Code Playgroud)

控制台返回 DependencyViolation 错误:

调用DeleteVpc操作时出现客户端错误(DependencyViolation):vpc 'vpc-13f53076'有依赖关系,无法删除。

所以我试图删除依赖项,但它并不适用于所有人!

  • 对于互联网网关,我遇到了同样的错误:

    调用 DeleteInternetGateway 操作时发生客户端错误 (DependencyViolation):internetGateway 'igw-d0f51bb5' 具有依赖关系,无法删除。

  • 对于默认安全组。我收到以下错误:

    调用DeleteSecurityGroup操作时出现客户端错误(CannotDelete):指定组:“sg-acca7bc”名称:“default”不能被用户删除

  • 对于默认 ACL,我收到以下错误:

    调用DeleteNetworkAcl操作时出现客户端错误(InvalidParameterValue):无法删除默认网络ACL acl-d3ba77b6

这是一个新账户,之前没有创建任何东西,除了亚马逊创建的默认 vpc。任何在正确方向上的帮助或指示将不胜感激。

amazon-ec2 amazon-web-services amazon-vpc aws-cli

6
推荐指数
2
解决办法
4996
查看次数

如何在 AWS 中将 AMI 从爱尔兰地区复制到中国地区

我在 AWS 爱尔兰地区进行了设置,现在我想要在我的中国使用该 AMI。有谁知道完成任务的最佳实践是什么?任何帮助将不胜感激。

提前致谢。

amazon-ec2 amazon-web-services amazon-ami

6
推荐指数
1
解决办法
4664
查看次数

如何在mac上降级并安装ansible 1.9.4

因此,由于一些严格的版本控制要求,我需要将我的Ansible版本降级2.1.1.01.9.4

我该怎么做(最好用brew)?

如果没有酿造,那么可能是一种选择.否则我听说使用虚拟环境也可能是一个不错的选择,这样我就可以轻松运行版本2.1.1.0或1.9.4,类似于rbenv的工作方式.

macos ansible

6
推荐指数
2
解决办法
8414
查看次数

boto3搜索未使用的安全组

我正在使用AWS Python SDK Boto3,我试图了解哪些安全组未使用.用boto2我做了但我不知道如何用boto3做同样的事情.

from boto.ec2.connection import EC2Connection
from boto.ec2.regioninfo import RegionInfo
import boto.sns
import sys
import logging
from security_groups_config import config

# Get settings from config.py
aws_access_key = config['aws_access_key']
aws_secret_key = config['aws_secret_key']    
ec2_region_name = config['ec2_region_name']
ec2_region_endpoint = config['ec2_region_endpoint']

region = RegionInfo(name=ec2_region_name, endpoint=ec2_region_endpoint)

if aws_access_key:
    conn = EC2Connection(aws_access_key, aws_secret_key, region=region)
else:
    conn = EC2Connection(region=region)

sgs = conn.get_all_security_groups()

## Searching unused SG if the instances number is 0
def search_unused_sg(event, context):
    for sg in sgs:
        print sg.name, len(sg.instances())
Run Code Online (Sandbox Code Playgroud)

python amazon-ec2 amazon-web-services aws-sdk boto3

6
推荐指数
2
解决办法
5094
查看次数

新的IAM管理员用户看到"您无权执行此操作"

我正在尝试在OSX上开始使用AWS CLI.我是aws通过pip 安装的.我在IAM中创建了一个新用户并附加了预建AdministratorAccess - AWS Managed policy策略.接下来,我已经复制了生成的访问密钥ID和秘密访问密钥.

我创建的用户不在任何组中.他们的政策如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

接下来,我aws configure从命令行运行,并输入我复制的访问密钥和密钥,加上区域代码eu-west-1(由于IAM用户是全局的,因此似乎不太相关),输出格式为text.

然后我尝试运行一个简单的测试命令来设置一个新组:

$  aws ec2 create-security-group --group-name my-sg --description "My security group" --debug
Run Code Online (Sandbox Code Playgroud)

但是,这失败并出现以下错误:

调用CreateSecurityGroup操作时发生客户端错误(UnauthorizedOperation):您无权执行此操作.

其他命令以相同方式失败.

我唯一的理论是它是键中的复制和粘贴错误,但我已经尝试过两次以上的整个过程并且两次都以相同的方式失败.我究竟做错了什么?有没有办法可以调试流程的哪个部分失败?

amazon-ec2 amazon-web-services aws-cli

6
推荐指数
2
解决办法
1万
查看次数

AWS:我可以使用什么来在RDS上运行定期任务?

在特定的RDS列中作为日期,我会在用户的试验结束时保留信息.

我将在数据库中每天检查这些日期,并且当试用结束时少数几天,我想发送一封电子邮件(使用SES).

如何在AWS中运行定期任务来检查数据库?我知道我可以使用:

  • LAMBDA
  • EC2(或Elastic Beanstalk)

还有其他我错过的解决方案吗?

amazon-ec2 rds amazon-web-services aws-lambda

6
推荐指数
1
解决办法
3105
查看次数